Lines Matching refs:task
73 static void sas_ata_task_done(struct sas_task *task) in sas_ata_task_done() argument
75 struct ata_queued_cmd *qc = task->uldd_task; in sas_ata_task_done()
76 struct domain_device *dev = task->dev; in sas_ata_task_done()
77 struct task_status_struct *stat = &task->task_status; in sas_ata_task_done()
87 task = NULL; in sas_ata_task_done()
93 if (unlikely(!task)) in sas_ata_task_done()
152 sas_free_task(task); in sas_ata_task_done()
158 struct sas_task *task; in sas_ata_qc_issue() local
175 task = sas_alloc_task(GFP_ATOMIC); in sas_ata_qc_issue()
176 if (!task) in sas_ata_qc_issue()
178 task->dev = dev; in sas_ata_qc_issue()
179 task->task_proto = SAS_PROTOCOL_STP; in sas_ata_qc_issue()
180 task->task_done = sas_ata_task_done; in sas_ata_qc_issue()
186 ata_tf_to_fis(&qc->tf, qc->dev->link->pmp, 1, (u8 *)&task->ata_task.fis); in sas_ata_qc_issue()
187 task->uldd_task = qc; in sas_ata_qc_issue()
189 memcpy(task->ata_task.atapi_packet, qc->cdb, qc->dev->cdb_len); in sas_ata_qc_issue()
190 task->total_xfer_len = qc->nbytes; in sas_ata_qc_issue()
191 task->num_scatter = qc->n_elem; in sas_ata_qc_issue()
192 task->data_dir = qc->dma_dir; in sas_ata_qc_issue()
194 task->data_dir = DMA_NONE; in sas_ata_qc_issue()
199 task->total_xfer_len = xfer; in sas_ata_qc_issue()
200 task->num_scatter = si; in sas_ata_qc_issue()
201 task->data_dir = qc->dma_dir; in sas_ata_qc_issue()
203 task->scatter = qc->sg; in sas_ata_qc_issue()
204 qc->lldd_task = task; in sas_ata_qc_issue()
206 task->ata_task.use_ncq = ata_is_ncq(qc->tf.protocol); in sas_ata_qc_issue()
207 task->ata_task.dma_xfer = ata_is_dma(qc->tf.protocol); in sas_ata_qc_issue()
210 task->ata_task.return_fis_on_success = 1; in sas_ata_qc_issue()
213 ASSIGN_SAS_TASK(qc->scsicmd, task); in sas_ata_qc_issue()
215 ret = i->dft->lldd_execute_task(task, GFP_ATOMIC); in sas_ata_qc_issue()
221 sas_free_task(task); in sas_ata_qc_issue()
447 static void sas_ata_internal_abort(struct sas_task *task) in sas_ata_internal_abort() argument
449 struct sas_internal *si = dev_to_sas_internal(task->dev); in sas_ata_internal_abort()
453 spin_lock_irqsave(&task->task_state_lock, flags); in sas_ata_internal_abort()
454 if (task->task_state_flags & SAS_TASK_STATE_ABORTED || in sas_ata_internal_abort()
455 task->task_state_flags & SAS_TASK_STATE_DONE) { in sas_ata_internal_abort()
456 spin_unlock_irqrestore(&task->task_state_lock, flags); in sas_ata_internal_abort()
457 pr_debug("%s: Task %p already finished.\n", __func__, task); in sas_ata_internal_abort()
460 task->task_state_flags |= SAS_TASK_STATE_ABORTED; in sas_ata_internal_abort()
461 spin_unlock_irqrestore(&task->task_state_lock, flags); in sas_ata_internal_abort()
463 res = si->dft->lldd_abort_task(task); in sas_ata_internal_abort()
465 spin_lock_irqsave(&task->task_state_lock, flags); in sas_ata_internal_abort()
466 if (task->task_state_flags & SAS_TASK_STATE_DONE || in sas_ata_internal_abort()
468 spin_unlock_irqrestore(&task->task_state_lock, flags); in sas_ata_internal_abort()
477 pr_warn("%s: Task %p leaked.\n", __func__, task); in sas_ata_internal_abort()
479 if (!(task->task_state_flags & SAS_TASK_STATE_DONE)) in sas_ata_internal_abort()
480 task->task_state_flags &= ~SAS_TASK_STATE_ABORTED; in sas_ata_internal_abort()
481 spin_unlock_irqrestore(&task->task_state_lock, flags); in sas_ata_internal_abort()
485 sas_free_task(task); in sas_ata_internal_abort()
502 struct sas_task *task = qc->lldd_task; in sas_ata_post_internal() local
505 if (!task) in sas_ata_post_internal()
507 task->uldd_task = NULL; in sas_ata_post_internal()
508 sas_ata_internal_abort(task); in sas_ata_post_internal()
627 void sas_ata_task_abort(struct sas_task *task) in sas_ata_task_abort() argument
629 struct ata_queued_cmd *qc = task->uldd_task; in sas_ata_task_abort()