Lines Matching refs:task

49 static int pm8001_find_tag(struct sas_task *task, u32 *tag)  in pm8001_find_tag()  argument
51 if (task->lldd_task) { in pm8001_find_tag()
53 ccb = task->lldd_task; in pm8001_find_tag()
278 u32 pm8001_get_ncq_tag(struct sas_task *task, u32 *tag) in pm8001_get_ncq_tag() argument
280 struct ata_queued_cmd *qc = task->uldd_task; in pm8001_get_ncq_tag()
353 static int pm8001_task_exec(struct sas_task *task, in pm8001_task_exec() argument
356 struct domain_device *dev = task->dev; in pm8001_task_exec()
360 struct sas_task *t = task; in pm8001_task_exec()
373 pm8001_ha = pm8001_find_ha_by_dev(task->dev); in pm8001_task_exec()
421 ccb->task = t; in pm8001_task_exec()
479 int pm8001_queue_command(struct sas_task *task, gfp_t gfp_flags) in pm8001_queue_command() argument
481 return pm8001_task_exec(task, gfp_flags, 0, NULL); in pm8001_queue_command()
492 struct sas_task *task, struct pm8001_ccb_info *ccb, u32 ccb_idx) in pm8001_ccb_task_free() argument
494 if (!ccb->task) in pm8001_ccb_task_free()
496 if (!sas_protocol_ata(task->task_proto)) in pm8001_ccb_task_free()
498 dma_unmap_sg(pm8001_ha->dev, task->scatter, in pm8001_ccb_task_free()
499 task->num_scatter, task->data_dir); in pm8001_ccb_task_free()
501 switch (task->task_proto) { in pm8001_ccb_task_free()
503 dma_unmap_sg(pm8001_ha->dev, &task->smp_task.smp_resp, 1, in pm8001_ccb_task_free()
505 dma_unmap_sg(pm8001_ha->dev, &task->smp_task.smp_req, 1, in pm8001_ccb_task_free()
516 task->lldd_task = NULL; in pm8001_ccb_task_free()
517 ccb->task = NULL; in pm8001_ccb_task_free()
649 void pm8001_task_done(struct sas_task *task) in pm8001_task_done() argument
651 if (!del_timer(&task->slow_task->timer)) in pm8001_task_done()
653 complete(&task->slow_task->completion); in pm8001_task_done()
658 struct sas_task *task = (struct sas_task *)data; in pm8001_tmf_timedout() local
660 task->task_state_flags |= SAS_TASK_STATE_ABORTED; in pm8001_tmf_timedout()
661 complete(&task->slow_task->completion); in pm8001_tmf_timedout()
680 struct sas_task *task = NULL; in pm8001_exec_internal_tmf_task() local
686 task = sas_alloc_slow_task(GFP_KERNEL); in pm8001_exec_internal_tmf_task()
687 if (!task) in pm8001_exec_internal_tmf_task()
690 task->dev = dev; in pm8001_exec_internal_tmf_task()
691 task->task_proto = dev->tproto; in pm8001_exec_internal_tmf_task()
692 memcpy(&task->ssp_task, parameter, para_len); in pm8001_exec_internal_tmf_task()
693 task->task_done = pm8001_task_done; in pm8001_exec_internal_tmf_task()
694 task->slow_task->timer.data = (unsigned long)task; in pm8001_exec_internal_tmf_task()
695 task->slow_task->timer.function = pm8001_tmf_timedout; in pm8001_exec_internal_tmf_task()
696 task->slow_task->timer.expires = jiffies + PM8001_TASK_TIMEOUT*HZ; in pm8001_exec_internal_tmf_task()
697 add_timer(&task->slow_task->timer); in pm8001_exec_internal_tmf_task()
699 res = pm8001_task_exec(task, GFP_KERNEL, 1, tmf); in pm8001_exec_internal_tmf_task()
702 del_timer(&task->slow_task->timer); in pm8001_exec_internal_tmf_task()
708 wait_for_completion(&task->slow_task->completion); in pm8001_exec_internal_tmf_task()
717 if ((task->task_state_flags & SAS_TASK_STATE_ABORTED)) { in pm8001_exec_internal_tmf_task()
718 if (!(task->task_state_flags & SAS_TASK_STATE_DONE)) { in pm8001_exec_internal_tmf_task()
726 if (task->task_status.resp == SAS_TASK_COMPLETE && in pm8001_exec_internal_tmf_task()
727 task->task_status.stat == SAM_STAT_GOOD) { in pm8001_exec_internal_tmf_task()
732 if (task->task_status.resp == SAS_TASK_COMPLETE && in pm8001_exec_internal_tmf_task()
733 task->task_status.stat == SAS_DATA_UNDERRUN) { in pm8001_exec_internal_tmf_task()
736 res = task->task_status.residual; in pm8001_exec_internal_tmf_task()
740 if (task->task_status.resp == SAS_TASK_COMPLETE && in pm8001_exec_internal_tmf_task()
741 task->task_status.stat == SAS_DATA_OVERRUN) { in pm8001_exec_internal_tmf_task()
751 task->task_status.resp, in pm8001_exec_internal_tmf_task()
752 task->task_status.stat)); in pm8001_exec_internal_tmf_task()
753 sas_free_task(task); in pm8001_exec_internal_tmf_task()
754 task = NULL; in pm8001_exec_internal_tmf_task()
758 BUG_ON(retry == 3 && task != NULL); in pm8001_exec_internal_tmf_task()
759 sas_free_task(task); in pm8001_exec_internal_tmf_task()
771 struct sas_task *task = NULL; in pm8001_exec_internal_task_abort() local
774 task = sas_alloc_slow_task(GFP_KERNEL); in pm8001_exec_internal_task_abort()
775 if (!task) in pm8001_exec_internal_task_abort()
778 task->dev = dev; in pm8001_exec_internal_task_abort()
779 task->task_proto = dev->tproto; in pm8001_exec_internal_task_abort()
780 task->task_done = pm8001_task_done; in pm8001_exec_internal_task_abort()
781 task->slow_task->timer.data = (unsigned long)task; in pm8001_exec_internal_task_abort()
782 task->slow_task->timer.function = pm8001_tmf_timedout; in pm8001_exec_internal_task_abort()
783 task->slow_task->timer.expires = jiffies + PM8001_TASK_TIMEOUT * HZ; in pm8001_exec_internal_task_abort()
784 add_timer(&task->slow_task->timer); in pm8001_exec_internal_task_abort()
792 ccb->task = task; in pm8001_exec_internal_task_abort()
798 del_timer(&task->slow_task->timer); in pm8001_exec_internal_task_abort()
804 wait_for_completion(&task->slow_task->completion); in pm8001_exec_internal_task_abort()
807 if ((task->task_state_flags & SAS_TASK_STATE_ABORTED)) { in pm8001_exec_internal_task_abort()
808 if (!(task->task_state_flags & SAS_TASK_STATE_DONE)) { in pm8001_exec_internal_task_abort()
815 if (task->task_status.resp == SAS_TASK_COMPLETE && in pm8001_exec_internal_task_abort()
816 task->task_status.stat == SAM_STAT_GOOD) { in pm8001_exec_internal_task_abort()
825 task->task_status.resp, in pm8001_exec_internal_task_abort()
826 task->task_status.stat)); in pm8001_exec_internal_task_abort()
827 sas_free_task(task); in pm8001_exec_internal_task_abort()
828 task = NULL; in pm8001_exec_internal_task_abort()
832 BUG_ON(retry == 3 && task != NULL); in pm8001_exec_internal_task_abort()
833 sas_free_task(task); in pm8001_exec_internal_task_abort()
903 struct sas_task *task; in pm8001_open_reject_retry() local
924 task = ccb->task; in pm8001_open_reject_retry()
925 if (!task || !task->task_done) in pm8001_open_reject_retry()
927 if (task_to_close && (task != task_to_close)) in pm8001_open_reject_retry()
929 ts = &task->task_status; in pm8001_open_reject_retry()
936 spin_lock_irqsave(&task->task_state_lock, flags1); in pm8001_open_reject_retry()
937 task->task_state_flags &= ~SAS_TASK_STATE_PENDING; in pm8001_open_reject_retry()
938 task->task_state_flags &= ~SAS_TASK_AT_INITIATOR; in pm8001_open_reject_retry()
939 task->task_state_flags |= SAS_TASK_STATE_DONE; in pm8001_open_reject_retry()
940 if (unlikely((task->task_state_flags in pm8001_open_reject_retry()
942 spin_unlock_irqrestore(&task->task_state_lock, in pm8001_open_reject_retry()
944 pm8001_ccb_task_free(pm8001_ha, task, ccb, tag); in pm8001_open_reject_retry()
946 spin_unlock_irqrestore(&task->task_state_lock, in pm8001_open_reject_retry()
948 pm8001_ccb_task_free(pm8001_ha, task, ccb, tag); in pm8001_open_reject_retry()
951 task->task_done(task); in pm8001_open_reject_retry()
1097 int pm8001_query_task(struct sas_task *task) in pm8001_query_task() argument
1104 if (unlikely(!task || !task->lldd_task || !task->dev)) in pm8001_query_task()
1107 if (task->task_proto & SAS_PROTOCOL_SSP) { in pm8001_query_task()
1108 struct scsi_cmnd *cmnd = task->uldd_task; in pm8001_query_task()
1109 struct domain_device *dev = task->dev; in pm8001_query_task()
1114 rc = pm8001_find_tag(task, &tag); in pm8001_query_task()
1147 int pm8001_abort_task(struct sas_task *task) in pm8001_abort_task() argument
1159 if (unlikely(!task || !task->lldd_task || !task->dev)) in pm8001_abort_task()
1161 spin_lock_irqsave(&task->task_state_lock, flags); in pm8001_abort_task()
1162 if (task->task_state_flags & SAS_TASK_STATE_DONE) { in pm8001_abort_task()
1163 spin_unlock_irqrestore(&task->task_state_lock, flags); in pm8001_abort_task()
1167 spin_unlock_irqrestore(&task->task_state_lock, flags); in pm8001_abort_task()
1168 if (task->task_proto & SAS_PROTOCOL_SSP) { in pm8001_abort_task()
1169 struct scsi_cmnd *cmnd = task->uldd_task; in pm8001_abort_task()
1170 dev = task->dev; in pm8001_abort_task()
1171 ccb = task->lldd_task; in pm8001_abort_task()
1175 rc = pm8001_find_tag(task, &tag); in pm8001_abort_task()
1189 } else if (task->task_proto & SAS_PROTOCOL_SATA || in pm8001_abort_task()
1190 task->task_proto & SAS_PROTOCOL_STP) { in pm8001_abort_task()
1191 dev = task->dev; in pm8001_abort_task()
1194 rc = pm8001_find_tag(task, &tag); in pm8001_abort_task()
1202 } else if (task->task_proto & SAS_PROTOCOL_SMP) { in pm8001_abort_task()
1204 dev = task->dev; in pm8001_abort_task()
1207 rc = pm8001_find_tag(task, &tag); in pm8001_abort_task()