Lines Matching full:task
64 #include "task.h"
71 * @task: request to complete
72 * @response: response code for the completed task.
73 * @status: status code for the completed task.
76 static void isci_task_refuse(struct isci_host *ihost, struct sas_task *task, in isci_task_refuse() argument
84 dev_dbg(&ihost->pdev->dev, "%s: task = %p, response=%d, status=%d\n", in isci_task_refuse()
85 __func__, task, response, status); in isci_task_refuse()
87 spin_lock_irqsave(&task->task_state_lock, flags); in isci_task_refuse()
89 task->task_status.resp = response; in isci_task_refuse()
90 task->task_status.stat = status; in isci_task_refuse()
93 task->task_state_flags |= SAS_TASK_STATE_DONE; in isci_task_refuse()
94 task->task_state_flags &= ~SAS_TASK_STATE_PENDING; in isci_task_refuse()
95 task->lldd_task = NULL; in isci_task_refuse()
96 spin_unlock_irqrestore(&task->task_state_lock, flags); in isci_task_refuse()
98 task->task_done(task); in isci_task_refuse()
101 #define for_each_sas_task(num, task) \ argument
103 task = list_entry(task->list.next, struct sas_task, list))
107 struct sas_task *task) in isci_device_io_ready() argument
111 isci_task_is_ncq_recovery(task)) in isci_device_io_ready()
116 * functions. This function is called by libsas to send a task down to
118 * @task: This parameter specifies the SAS task to send.
123 int isci_task_execute_task(struct sas_task *task, gfp_t gfp_flags) in isci_task_execute_task() argument
125 struct isci_host *ihost = dev_to_ihost(task->dev); in isci_task_execute_task()
133 idev = isci_lookup_device(task->dev); in isci_task_execute_task()
134 io_ready = isci_device_io_ready(idev, task); in isci_task_execute_task()
139 "task: %p, dev: %p idev: %p:%#lx cmd = %p\n", in isci_task_execute_task()
140 task, task->dev, idev, idev ? idev->flags : 0, in isci_task_execute_task()
141 task->uldd_task); in isci_task_execute_task()
144 isci_task_refuse(ihost, task, SAS_TASK_UNDELIVERED, in isci_task_execute_task()
150 isci_task_refuse(ihost, task, SAS_TASK_COMPLETE, in isci_task_execute_task()
154 spin_lock_irqsave(&task->task_state_lock, flags); in isci_task_execute_task()
156 if (task->task_state_flags & SAS_TASK_STATE_ABORTED) { in isci_task_execute_task()
158 spin_unlock_irqrestore(&task->task_state_lock, flags); in isci_task_execute_task()
160 isci_task_refuse(ihost, task, in isci_task_execute_task()
167 ireq = isci_io_request_from_tag(ihost, task, tag); in isci_task_execute_task()
168 spin_unlock_irqrestore(&task->task_state_lock, flags); in isci_task_execute_task()
172 status = isci_request_execute(ihost, idev, task, ireq); in isci_task_execute_task()
179 isci_task_refuse(ihost, task, in isci_task_execute_task()
191 isci_task_refuse(ihost, task, in isci_task_execute_task()
243 /* XXX convert to get this from task->tproto like other drivers */ in isci_task_request_build()
445 /* Send the task management part of the reset. */ in isci_task_lu_reset()
467 /* Task Management Functions. Must be called from process context. */
471 * functions. This function is called by libsas to abort a specified task.
472 * @task: This parameter specifies the SAS task to abort.
476 int isci_task_abort_task(struct sas_task *task) in isci_task_abort_task() argument
478 struct isci_host *ihost = dev_to_ihost(task->dev); in isci_task_abort_task()
487 /* Get the isci_request reference from the task. Note that in isci_task_abort_task()
493 spin_lock(&task->task_state_lock); in isci_task_abort_task()
495 old_request = task->lldd_task; in isci_task_abort_task()
497 /* If task is already done, the request isn't valid */ in isci_task_abort_task()
498 if (!(task->task_state_flags & SAS_TASK_STATE_DONE) && in isci_task_abort_task()
500 idev = isci_get_device(task->dev->lldd_dev); in isci_task_abort_task()
504 spin_unlock(&task->task_state_lock); in isci_task_abort_task()
508 "%s: dev = %p (%s%s), task = %p, old_request == %p\n", in isci_task_abort_task()
510 (dev_is_sata(task->dev) ? "STP/SATA" in isci_task_abort_task()
511 : ((dev_is_expander(task->dev->dev_type)) in isci_task_abort_task()
518 task, old_request); in isci_task_abort_task()
526 * is nothing to do here other than to set the task in isci_task_abort_task()
527 * done bit, and indicate that the task abort function in isci_task_abort_task()
530 spin_lock_irqsave(&task->task_state_lock, flags); in isci_task_abort_task()
531 task->task_state_flags |= SAS_TASK_STATE_DONE; in isci_task_abort_task()
532 task->task_state_flags &= ~SAS_TASK_STATE_PENDING; in isci_task_abort_task()
533 spin_unlock_irqrestore(&task->task_state_lock, flags); in isci_task_abort_task()
538 "%s: abort task not needed for %p\n", in isci_task_abort_task()
539 __func__, task); in isci_task_abort_task()
547 "req=%p, task=%p) failed\n", in isci_task_abort_task()
548 __func__, idev, old_request, task); in isci_task_abort_task()
554 if (task->task_proto == SAS_PROTOCOL_SMP || in isci_task_abort_task()
555 sas_protocol_ata(task->task_proto) || in isci_task_abort_task()
561 /* No task to send, so explicitly resume the device here */ in isci_task_abort_task()
569 ((task->task_proto == SAS_PROTOCOL_SMP) in isci_task_abort_task()
571 : (sas_protocol_ata(task->task_proto) in isci_task_abort_task()
579 spin_lock_irqsave(&task->task_state_lock, flags); in isci_task_abort_task()
580 task->task_state_flags &= ~SAS_TASK_STATE_PENDING; in isci_task_abort_task()
581 task->task_state_flags |= SAS_TASK_STATE_DONE; in isci_task_abort_task()
582 spin_unlock_irqrestore(&task->task_state_lock, flags); in isci_task_abort_task()
592 /* Send the task management request. */ in isci_task_abort_task()
599 "%s: Done; dev = %p, task = %p , old_request == %p\n", in isci_task_abort_task()
600 __func__, idev, task, old_request); in isci_task_abort_task()
607 * functions. This is one of the Task Management functoins called by libsas,
608 * to abort all task for the given lun.
625 * functions. This is one of the Task Management functoins called by libsas.
644 * all return codes from the abort task call). When TMF_RESP_FUNC_SUCC is
647 * @task: This parameter specifies the sas task being queried.
652 struct sas_task *task) in isci_task_query_task() argument
655 if (task->task_state_flags & SAS_TASK_NEED_DEV_RESET) in isci_task_query_task()
663 * an task request completes.
697 /* PRINT_TMF( ((struct isci_tmf *)request->task)); */ in isci_task_request_complete()
712 /* The task management part completes last. */ in isci_task_request_complete()
748 /* Explicitly resume the RNC here, since there was no task sent. */ in isci_reset_device()