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()
304 u32 pm8001_get_ncq_tag(struct sas_task *task, u32 *tag) in pm8001_get_ncq_tag() argument
306 struct ata_queued_cmd *qc = task->uldd_task; in pm8001_get_ncq_tag()
380 static int pm8001_task_exec(struct sas_task *task, in pm8001_task_exec() argument
383 struct domain_device *dev = task->dev; in pm8001_task_exec()
387 struct sas_task *t = task; in pm8001_task_exec()
401 pm8001_ha = pm8001_find_ha_by_dev(task->dev); in pm8001_task_exec()
456 ccb->task = t; in pm8001_task_exec()
515 int pm8001_queue_command(struct sas_task *task, gfp_t gfp_flags) in pm8001_queue_command() argument
517 return pm8001_task_exec(task, gfp_flags, 0, NULL); in pm8001_queue_command()
528 struct sas_task *task, struct pm8001_ccb_info *ccb, u32 ccb_idx) in pm8001_ccb_task_free() argument
530 if (!ccb->task) in pm8001_ccb_task_free()
532 if (!sas_protocol_ata(task->task_proto)) in pm8001_ccb_task_free()
534 dma_unmap_sg(pm8001_ha->dev, task->scatter, in pm8001_ccb_task_free()
535 task->num_scatter, task->data_dir); in pm8001_ccb_task_free()
537 switch (task->task_proto) { in pm8001_ccb_task_free()
539 dma_unmap_sg(pm8001_ha->dev, &task->smp_task.smp_resp, 1, in pm8001_ccb_task_free()
541 dma_unmap_sg(pm8001_ha->dev, &task->smp_task.smp_req, 1, in pm8001_ccb_task_free()
552 task->lldd_task = NULL; in pm8001_ccb_task_free()
553 ccb->task = NULL; in pm8001_ccb_task_free()
685 void pm8001_task_done(struct sas_task *task) in pm8001_task_done() argument
687 del_timer(&task->slow_task->timer); in pm8001_task_done()
688 complete(&task->slow_task->completion); in pm8001_task_done()
694 struct sas_task *task = slow->task; in pm8001_tmf_timedout() local
697 spin_lock_irqsave(&task->task_state_lock, flags); in pm8001_tmf_timedout()
698 if (!(task->task_state_flags & SAS_TASK_STATE_DONE)) { in pm8001_tmf_timedout()
699 task->task_state_flags |= SAS_TASK_STATE_ABORTED; in pm8001_tmf_timedout()
700 complete(&task->slow_task->completion); in pm8001_tmf_timedout()
702 spin_unlock_irqrestore(&task->task_state_lock, flags); in pm8001_tmf_timedout()
721 struct sas_task *task = NULL; in pm8001_exec_internal_tmf_task() local
727 task = sas_alloc_slow_task(GFP_KERNEL); in pm8001_exec_internal_tmf_task()
728 if (!task) in pm8001_exec_internal_tmf_task()
731 task->dev = dev; in pm8001_exec_internal_tmf_task()
732 task->task_proto = dev->tproto; in pm8001_exec_internal_tmf_task()
733 memcpy(&task->ssp_task, parameter, para_len); in pm8001_exec_internal_tmf_task()
734 task->task_done = pm8001_task_done; in pm8001_exec_internal_tmf_task()
735 task->slow_task->timer.function = pm8001_tmf_timedout; in pm8001_exec_internal_tmf_task()
736 task->slow_task->timer.expires = jiffies + PM8001_TASK_TIMEOUT*HZ; in pm8001_exec_internal_tmf_task()
737 add_timer(&task->slow_task->timer); in pm8001_exec_internal_tmf_task()
739 res = pm8001_task_exec(task, GFP_KERNEL, 1, tmf); in pm8001_exec_internal_tmf_task()
742 del_timer(&task->slow_task->timer); in pm8001_exec_internal_tmf_task()
746 wait_for_completion(&task->slow_task->completion); in pm8001_exec_internal_tmf_task()
755 if (task->task_state_flags & SAS_TASK_STATE_ABORTED) { in pm8001_exec_internal_tmf_task()
756 struct pm8001_ccb_info *ccb = task->lldd_task; in pm8001_exec_internal_tmf_task()
762 ccb->task = NULL; in pm8001_exec_internal_tmf_task()
766 if (task->task_status.resp == SAS_TASK_COMPLETE && in pm8001_exec_internal_tmf_task()
767 task->task_status.stat == SAM_STAT_GOOD) { in pm8001_exec_internal_tmf_task()
772 if (task->task_status.resp == SAS_TASK_COMPLETE && in pm8001_exec_internal_tmf_task()
773 task->task_status.stat == SAS_DATA_UNDERRUN) { in pm8001_exec_internal_tmf_task()
776 res = task->task_status.residual; in pm8001_exec_internal_tmf_task()
780 if (task->task_status.resp == SAS_TASK_COMPLETE && in pm8001_exec_internal_tmf_task()
781 task->task_status.stat == SAS_DATA_OVERRUN) { in pm8001_exec_internal_tmf_task()
789 task->task_status.resp, in pm8001_exec_internal_tmf_task()
790 task->task_status.stat); in pm8001_exec_internal_tmf_task()
791 sas_free_task(task); in pm8001_exec_internal_tmf_task()
792 task = NULL; in pm8001_exec_internal_tmf_task()
796 BUG_ON(retry == 3 && task != NULL); in pm8001_exec_internal_tmf_task()
797 sas_free_task(task); in pm8001_exec_internal_tmf_task()
809 struct sas_task *task = NULL; in pm8001_exec_internal_task_abort() local
812 task = sas_alloc_slow_task(GFP_KERNEL); in pm8001_exec_internal_task_abort()
813 if (!task) in pm8001_exec_internal_task_abort()
816 task->dev = dev; in pm8001_exec_internal_task_abort()
817 task->task_proto = dev->tproto; in pm8001_exec_internal_task_abort()
818 task->task_done = pm8001_task_done; in pm8001_exec_internal_task_abort()
819 task->slow_task->timer.function = pm8001_tmf_timedout; in pm8001_exec_internal_task_abort()
820 task->slow_task->timer.expires = jiffies + PM8001_TASK_TIMEOUT * HZ; in pm8001_exec_internal_task_abort()
821 add_timer(&task->slow_task->timer); in pm8001_exec_internal_task_abort()
829 ccb->task = task; in pm8001_exec_internal_task_abort()
835 del_timer(&task->slow_task->timer); in pm8001_exec_internal_task_abort()
840 wait_for_completion(&task->slow_task->completion); in pm8001_exec_internal_task_abort()
843 if (task->task_state_flags & SAS_TASK_STATE_ABORTED) { in pm8001_exec_internal_task_abort()
848 if (task->task_status.resp == SAS_TASK_COMPLETE && in pm8001_exec_internal_task_abort()
849 task->task_status.stat == SAM_STAT_GOOD) { in pm8001_exec_internal_task_abort()
857 task->task_status.resp, in pm8001_exec_internal_task_abort()
858 task->task_status.stat); in pm8001_exec_internal_task_abort()
859 sas_free_task(task); in pm8001_exec_internal_task_abort()
860 task = NULL; in pm8001_exec_internal_task_abort()
864 BUG_ON(retry == 3 && task != NULL); in pm8001_exec_internal_task_abort()
865 sas_free_task(task); in pm8001_exec_internal_task_abort()
935 struct sas_task *task; in pm8001_open_reject_retry() local
956 task = ccb->task; in pm8001_open_reject_retry()
957 if (!task || !task->task_done) in pm8001_open_reject_retry()
959 if (task_to_close && (task != task_to_close)) in pm8001_open_reject_retry()
961 ts = &task->task_status; in pm8001_open_reject_retry()
968 spin_lock_irqsave(&task->task_state_lock, flags1); in pm8001_open_reject_retry()
969 task->task_state_flags &= ~SAS_TASK_STATE_PENDING; in pm8001_open_reject_retry()
970 task->task_state_flags &= ~SAS_TASK_AT_INITIATOR; in pm8001_open_reject_retry()
971 task->task_state_flags |= SAS_TASK_STATE_DONE; in pm8001_open_reject_retry()
972 if (unlikely((task->task_state_flags in pm8001_open_reject_retry()
974 spin_unlock_irqrestore(&task->task_state_lock, in pm8001_open_reject_retry()
976 pm8001_ccb_task_free(pm8001_ha, task, ccb, tag); in pm8001_open_reject_retry()
978 spin_unlock_irqrestore(&task->task_state_lock, in pm8001_open_reject_retry()
980 pm8001_ccb_task_free(pm8001_ha, task, ccb, tag); in pm8001_open_reject_retry()
983 task->task_done(task); in pm8001_open_reject_retry()
1134 int pm8001_query_task(struct sas_task *task) in pm8001_query_task() argument
1140 if (unlikely(!task || !task->lldd_task || !task->dev)) in pm8001_query_task()
1143 if (task->task_proto & SAS_PROTOCOL_SSP) { in pm8001_query_task()
1144 struct scsi_cmnd *cmnd = task->uldd_task; in pm8001_query_task()
1145 struct domain_device *dev = task->dev; in pm8001_query_task()
1150 rc = pm8001_find_tag(task, &tag); in pm8001_query_task()
1179 int pm8001_abort_task(struct sas_task *task) in pm8001_abort_task() argument
1191 if (unlikely(!task || !task->lldd_task || !task->dev)) in pm8001_abort_task()
1193 dev = task->dev; in pm8001_abort_task()
1197 ret = pm8001_find_tag(task, &tag); in pm8001_abort_task()
1199 pm8001_printk("no tag for task:%p\n", task); in pm8001_abort_task()
1202 spin_lock_irqsave(&task->task_state_lock, flags); in pm8001_abort_task()
1203 if (task->task_state_flags & SAS_TASK_STATE_DONE) { in pm8001_abort_task()
1204 spin_unlock_irqrestore(&task->task_state_lock, flags); in pm8001_abort_task()
1207 task->task_state_flags |= SAS_TASK_STATE_ABORTED; in pm8001_abort_task()
1208 if (task->slow_task == NULL) { in pm8001_abort_task()
1210 task->slow_task = &slow_task; in pm8001_abort_task()
1212 spin_unlock_irqrestore(&task->task_state_lock, flags); in pm8001_abort_task()
1213 if (task->task_proto & SAS_PROTOCOL_SSP) { in pm8001_abort_task()
1214 struct scsi_cmnd *cmnd = task->uldd_task; in pm8001_abort_task()
1221 } else if (task->task_proto & SAS_PROTOCOL_SATA || in pm8001_abort_task()
1222 task->task_proto & SAS_PROTOCOL_STP) { in pm8001_abort_task()
1293 &task->slow_task->completion, in pm8001_abort_task()
1309 } else if (task->task_proto & SAS_PROTOCOL_SMP) { in pm8001_abort_task()
1316 spin_lock_irqsave(&task->task_state_lock, flags); in pm8001_abort_task()
1317 if (task->slow_task == &slow_task) in pm8001_abort_task()
1318 task->slow_task = NULL; in pm8001_abort_task()
1319 spin_unlock_irqrestore(&task->task_state_lock, flags); in pm8001_abort_task()