Commit 304fe11b authored by Damien Le Moal's avatar Damien Le Moal Committed by Martin K. Petersen

scsi: pm8001: Simplify pm8001_ccb_task_free()

The task argument of the pm8001_ccb_task_free() function can be inferred
from the ccb argument ccb_task field. So there is no need to have this
argument. Likewise, the ccb_index argument is always equal to the ccb tag
field and is not needed either. Remove both arguments and update all call
sites. The pm8001_ccb_task_free_done() helper is also modified to match
this change.

Link: https://lore.kernel.org/r/20220220031810.738362-30-damien.lemoal@opensource.wdc.comReviewed-by: default avatarJack Wang <jinpu.wang@ionos.com>
Signed-off-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent e29c47fe
...@@ -1564,11 +1564,11 @@ void pm8001_work_fn(struct work_struct *work) ...@@ -1564,11 +1564,11 @@ void pm8001_work_fn(struct work_struct *work)
spin_unlock_irqrestore(&t->task_state_lock, flags1); spin_unlock_irqrestore(&t->task_state_lock, flags1);
pm8001_dbg(pm8001_ha, FAIL, "task 0x%p done with event 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n", pm8001_dbg(pm8001_ha, FAIL, "task 0x%p done with event 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
t, pw->handler, ts->resp, ts->stat); t, pw->handler, ts->resp, ts->stat);
pm8001_ccb_task_free(pm8001_ha, t, ccb, ccb->ccb_tag); pm8001_ccb_task_free(pm8001_ha, ccb);
spin_unlock_irqrestore(&pm8001_ha->lock, flags); spin_unlock_irqrestore(&pm8001_ha->lock, flags);
} else { } else {
spin_unlock_irqrestore(&t->task_state_lock, flags1); spin_unlock_irqrestore(&t->task_state_lock, flags1);
pm8001_ccb_task_free(pm8001_ha, t, ccb, ccb->ccb_tag); pm8001_ccb_task_free(pm8001_ha, ccb);
mb();/* in order to force CPU ordering */ mb();/* in order to force CPU ordering */
spin_unlock_irqrestore(&pm8001_ha->lock, flags); spin_unlock_irqrestore(&pm8001_ha->lock, flags);
t->task_done(t); t->task_done(t);
...@@ -1697,8 +1697,7 @@ void pm8001_work_fn(struct work_struct *work) ...@@ -1697,8 +1697,7 @@ void pm8001_work_fn(struct work_struct *work)
continue; continue;
} }
/*complete sas task and update to top layer */ /*complete sas task and update to top layer */
pm8001_ccb_task_free(pm8001_ha, task, ccb, pm8001_ccb_task_free(pm8001_ha, ccb);
ccb->ccb_tag);
ts->resp = SAS_TASK_COMPLETE; ts->resp = SAS_TASK_COMPLETE;
task->task_done(task); task->task_done(task);
} else if (ccb->ccb_tag != PM8001_INVALID_TAG) { } else if (ccb->ccb_tag != PM8001_INVALID_TAG) {
...@@ -2084,10 +2083,10 @@ mpi_ssp_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) ...@@ -2084,10 +2083,10 @@ mpi_ssp_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
spin_unlock_irqrestore(&t->task_state_lock, flags); spin_unlock_irqrestore(&t->task_state_lock, flags);
pm8001_dbg(pm8001_ha, FAIL, "task 0x%p done with io_status 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n", pm8001_dbg(pm8001_ha, FAIL, "task 0x%p done with io_status 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
t, status, ts->resp, ts->stat); t, status, ts->resp, ts->stat);
pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free(pm8001_ha, ccb);
} else { } else {
spin_unlock_irqrestore(&t->task_state_lock, flags); spin_unlock_irqrestore(&t->task_state_lock, flags);
pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free(pm8001_ha, ccb);
mb();/* in order to force CPU ordering */ mb();/* in order to force CPU ordering */
t->task_done(t); t->task_done(t);
} }
...@@ -2251,10 +2250,10 @@ static void mpi_ssp_event(struct pm8001_hba_info *pm8001_ha, void *piomb) ...@@ -2251,10 +2250,10 @@ static void mpi_ssp_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
spin_unlock_irqrestore(&t->task_state_lock, flags); spin_unlock_irqrestore(&t->task_state_lock, flags);
pm8001_dbg(pm8001_ha, FAIL, "task 0x%p done with event 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n", pm8001_dbg(pm8001_ha, FAIL, "task 0x%p done with event 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
t, event, ts->resp, ts->stat); t, event, ts->resp, ts->stat);
pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free(pm8001_ha, ccb);
} else { } else {
spin_unlock_irqrestore(&t->task_state_lock, flags); spin_unlock_irqrestore(&t->task_state_lock, flags);
pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free(pm8001_ha, ccb);
mb();/* in order to force CPU ordering */ mb();/* in order to force CPU ordering */
t->task_done(t); t->task_done(t);
} }
...@@ -2480,7 +2479,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) ...@@ -2480,7 +2479,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS); IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS);
ts->resp = SAS_TASK_UNDELIVERED; ts->resp = SAS_TASK_UNDELIVERED;
ts->stat = SAS_QUEUE_FULL; ts->stat = SAS_QUEUE_FULL;
pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free_done(pm8001_ha, ccb);
return; return;
} }
break; break;
...@@ -2496,7 +2495,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) ...@@ -2496,7 +2495,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS); IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS);
ts->resp = SAS_TASK_UNDELIVERED; ts->resp = SAS_TASK_UNDELIVERED;
ts->stat = SAS_QUEUE_FULL; ts->stat = SAS_QUEUE_FULL;
pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free_done(pm8001_ha, ccb);
return; return;
} }
break; break;
...@@ -2518,7 +2517,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) ...@@ -2518,7 +2517,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
IO_OPEN_CNX_ERROR_STP_RESOURCES_BUSY); IO_OPEN_CNX_ERROR_STP_RESOURCES_BUSY);
ts->resp = SAS_TASK_UNDELIVERED; ts->resp = SAS_TASK_UNDELIVERED;
ts->stat = SAS_QUEUE_FULL; ts->stat = SAS_QUEUE_FULL;
pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free_done(pm8001_ha, ccb);
return; return;
} }
break; break;
...@@ -2589,7 +2588,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) ...@@ -2589,7 +2588,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
IO_DS_NON_OPERATIONAL); IO_DS_NON_OPERATIONAL);
ts->resp = SAS_TASK_UNDELIVERED; ts->resp = SAS_TASK_UNDELIVERED;
ts->stat = SAS_QUEUE_FULL; ts->stat = SAS_QUEUE_FULL;
pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free_done(pm8001_ha, ccb);
return; return;
} }
break; break;
...@@ -2609,7 +2608,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) ...@@ -2609,7 +2608,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
IO_DS_IN_ERROR); IO_DS_IN_ERROR);
ts->resp = SAS_TASK_UNDELIVERED; ts->resp = SAS_TASK_UNDELIVERED;
ts->stat = SAS_QUEUE_FULL; ts->stat = SAS_QUEUE_FULL;
pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free_done(pm8001_ha, ccb);
return; return;
} }
break; break;
...@@ -2639,10 +2638,10 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) ...@@ -2639,10 +2638,10 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
pm8001_dbg(pm8001_ha, FAIL, pm8001_dbg(pm8001_ha, FAIL,
"task 0x%p done with io_status 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n", "task 0x%p done with io_status 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
t, status, ts->resp, ts->stat); t, status, ts->resp, ts->stat);
pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free(pm8001_ha, ccb);
} else { } else {
spin_unlock_irqrestore(&t->task_state_lock, flags); spin_unlock_irqrestore(&t->task_state_lock, flags);
pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free_done(pm8001_ha, ccb);
} }
} }
...@@ -2994,12 +2993,10 @@ mpi_smp_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) ...@@ -2994,12 +2993,10 @@ mpi_smp_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
spin_unlock_irqrestore(&t->task_state_lock, flags); spin_unlock_irqrestore(&t->task_state_lock, flags);
pm8001_dbg(pm8001_ha, FAIL, "task 0x%p done with io_status 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n", pm8001_dbg(pm8001_ha, FAIL, "task 0x%p done with io_status 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
t, status, ts->resp, ts->stat); t, status, ts->resp, ts->stat);
pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free(pm8001_ha, ccb);
} else { } else {
spin_unlock_irqrestore(&t->task_state_lock, flags); spin_unlock_irqrestore(&t->task_state_lock, flags);
pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free_done(pm8001_ha, ccb);
mb();/* in order to force CPU ordering */
t->task_done(t);
} }
} }
...@@ -3649,7 +3646,7 @@ int pm8001_mpi_task_abort_resp(struct pm8001_hba_info *pm8001_ha, void *piomb) ...@@ -3649,7 +3646,7 @@ int pm8001_mpi_task_abort_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
t->task_state_flags &= ~SAS_TASK_STATE_PENDING; t->task_state_flags &= ~SAS_TASK_STATE_PENDING;
t->task_state_flags |= SAS_TASK_STATE_DONE; t->task_state_flags |= SAS_TASK_STATE_DONE;
spin_unlock_irqrestore(&t->task_state_lock, flags); spin_unlock_irqrestore(&t->task_state_lock, flags);
pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free(pm8001_ha, ccb);
mb(); mb();
if (pm8001_dev->id & NCQ_ABORT_ALL_FLAG) { if (pm8001_dev->id & NCQ_ABORT_ALL_FLAG) {
...@@ -4287,12 +4284,11 @@ static int pm8001_chip_sata_req(struct pm8001_hba_info *pm8001_ha, ...@@ -4287,12 +4284,11 @@ static int pm8001_chip_sata_req(struct pm8001_hba_info *pm8001_ha,
"task 0x%p resp 0x%x stat 0x%x but aborted by upper layer\n", "task 0x%p resp 0x%x stat 0x%x but aborted by upper layer\n",
task, ts->resp, task, ts->resp,
ts->stat); ts->stat);
pm8001_ccb_task_free(pm8001_ha, task, ccb, tag); pm8001_ccb_task_free(pm8001_ha, ccb);
} else { } else {
spin_unlock_irqrestore(&task->task_state_lock, spin_unlock_irqrestore(&task->task_state_lock,
flags); flags);
pm8001_ccb_task_free_done(pm8001_ha, task, pm8001_ccb_task_free_done(pm8001_ha, ccb);
ccb, tag);
return 0; return 0;
} }
} }
......
...@@ -489,20 +489,19 @@ int pm8001_queue_command(struct sas_task *task, gfp_t gfp_flags) ...@@ -489,20 +489,19 @@ int pm8001_queue_command(struct sas_task *task, gfp_t gfp_flags)
/** /**
* pm8001_ccb_task_free - free the sg for ssp and smp command, free the ccb. * pm8001_ccb_task_free - free the sg for ssp and smp command, free the ccb.
* @pm8001_ha: our hba card information * @pm8001_ha: our hba card information
* @ccb: the ccb which attached to ssp task * @ccb: the ccb which attached to ssp task to free
* @task: the task to be free.
* @ccb_idx: ccb index.
*/ */
void pm8001_ccb_task_free(struct pm8001_hba_info *pm8001_ha, void pm8001_ccb_task_free(struct pm8001_hba_info *pm8001_ha,
struct sas_task *task, struct pm8001_ccb_info *ccb, u32 ccb_idx) struct pm8001_ccb_info *ccb)
{ {
struct sas_task *task = ccb->task;
struct ata_queued_cmd *qc; struct ata_queued_cmd *qc;
struct pm8001_device *pm8001_dev; struct pm8001_device *pm8001_dev;
if (!ccb->task) if (!task)
return; return;
if (!sas_protocol_ata(task->task_proto))
if (ccb->n_elem) if (!sas_protocol_ata(task->task_proto) && ccb->n_elem)
dma_unmap_sg(pm8001_ha->dev, task->scatter, dma_unmap_sg(pm8001_ha->dev, task->scatter,
task->num_scatter, task->data_dir); task->num_scatter, task->data_dir);
...@@ -523,12 +522,12 @@ void pm8001_ccb_task_free(struct pm8001_hba_info *pm8001_ha, ...@@ -523,12 +522,12 @@ void pm8001_ccb_task_free(struct pm8001_hba_info *pm8001_ha,
} }
if (sas_protocol_ata(task->task_proto)) { if (sas_protocol_ata(task->task_proto)) {
// For SCSI/ATA commands uldd_task points to ata_queued_cmd /* For SCSI/ATA commands uldd_task points to ata_queued_cmd */
qc = task->uldd_task; qc = task->uldd_task;
pm8001_dev = ccb->device; pm8001_dev = ccb->device;
trace_pm80xx_request_complete(pm8001_ha->id, trace_pm80xx_request_complete(pm8001_ha->id,
pm8001_dev ? pm8001_dev->attached_phy : PM8001_MAX_PHYS, pm8001_dev ? pm8001_dev->attached_phy : PM8001_MAX_PHYS,
ccb_idx, 0 /* ctlr_opcode not known */, ccb->ccb_tag, 0 /* ctlr_opcode not known */,
qc ? qc->tf.command : 0, // ata opcode qc ? qc->tf.command : 0, // ata opcode
pm8001_dev ? atomic_read(&pm8001_dev->running_req) : -1); pm8001_dev ? atomic_read(&pm8001_dev->running_req) : -1);
} }
...@@ -844,11 +843,11 @@ void pm8001_open_reject_retry( ...@@ -844,11 +843,11 @@ void pm8001_open_reject_retry(
& SAS_TASK_STATE_ABORTED))) { & SAS_TASK_STATE_ABORTED))) {
spin_unlock_irqrestore(&task->task_state_lock, spin_unlock_irqrestore(&task->task_state_lock,
flags1); flags1);
pm8001_ccb_task_free(pm8001_ha, task, ccb, ccb->ccb_tag); pm8001_ccb_task_free(pm8001_ha, ccb);
} else { } else {
spin_unlock_irqrestore(&task->task_state_lock, spin_unlock_irqrestore(&task->task_state_lock,
flags1); flags1);
pm8001_ccb_task_free(pm8001_ha, task, ccb, ccb->ccb_tag); pm8001_ccb_task_free(pm8001_ha, ccb);
mb();/* in order to force CPU ordering */ mb();/* in order to force CPU ordering */
spin_unlock_irqrestore(&pm8001_ha->lock, flags); spin_unlock_irqrestore(&pm8001_ha->lock, flags);
task->task_done(task); task->task_done(task);
......
...@@ -637,7 +637,7 @@ int pm8001_tag_alloc(struct pm8001_hba_info *pm8001_ha, u32 *tag_out); ...@@ -637,7 +637,7 @@ int pm8001_tag_alloc(struct pm8001_hba_info *pm8001_ha, u32 *tag_out);
void pm8001_tag_init(struct pm8001_hba_info *pm8001_ha); void pm8001_tag_init(struct pm8001_hba_info *pm8001_ha);
u32 pm8001_get_ncq_tag(struct sas_task *task, u32 *tag); u32 pm8001_get_ncq_tag(struct sas_task *task, u32 *tag);
void pm8001_ccb_task_free(struct pm8001_hba_info *pm8001_ha, void pm8001_ccb_task_free(struct pm8001_hba_info *pm8001_ha,
struct sas_task *task, struct pm8001_ccb_info *ccb, u32 ccb_idx); struct pm8001_ccb_info *ccb);
int pm8001_phy_control(struct asd_sas_phy *sas_phy, enum phy_func func, int pm8001_phy_control(struct asd_sas_phy *sas_phy, enum phy_func func,
void *funcdata); void *funcdata);
void pm8001_scan_start(struct Scsi_Host *shost); void pm8001_scan_start(struct Scsi_Host *shost);
...@@ -780,12 +780,12 @@ static inline void pm8001_ccb_free(struct pm8001_hba_info *pm8001_ha, ...@@ -780,12 +780,12 @@ static inline void pm8001_ccb_free(struct pm8001_hba_info *pm8001_ha,
pm8001_tag_free(pm8001_ha, tag); pm8001_tag_free(pm8001_ha, tag);
} }
static inline void static inline void pm8001_ccb_task_free_done(struct pm8001_hba_info *pm8001_ha,
pm8001_ccb_task_free_done(struct pm8001_hba_info *pm8001_ha, struct pm8001_ccb_info *ccb)
struct sas_task *task, struct pm8001_ccb_info *ccb,
u32 ccb_idx)
{ {
pm8001_ccb_task_free(pm8001_ha, task, ccb, ccb_idx); struct sas_task *task = ccb->task;
pm8001_ccb_task_free(pm8001_ha, ccb);
smp_mb(); /*in order to force CPU ordering*/ smp_mb(); /*in order to force CPU ordering*/
task->task_done(task); task->task_done(task);
} }
......
...@@ -2157,14 +2157,12 @@ mpi_ssp_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) ...@@ -2157,14 +2157,12 @@ mpi_ssp_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
pm8001_dbg(pm8001_ha, FAIL, pm8001_dbg(pm8001_ha, FAIL,
"task 0x%p done with io_status 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n", "task 0x%p done with io_status 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
t, status, ts->resp, ts->stat); t, status, ts->resp, ts->stat);
pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free(pm8001_ha, ccb);
if (t->slow_task) if (t->slow_task)
complete(&t->slow_task->completion); complete(&t->slow_task->completion);
} else { } else {
spin_unlock_irqrestore(&t->task_state_lock, flags); spin_unlock_irqrestore(&t->task_state_lock, flags);
pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free_done(pm8001_ha, ccb);
mb();/* in order to force CPU ordering */
t->task_done(t);
} }
} }
...@@ -2340,12 +2338,10 @@ static void mpi_ssp_event(struct pm8001_hba_info *pm8001_ha, void *piomb) ...@@ -2340,12 +2338,10 @@ static void mpi_ssp_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
pm8001_dbg(pm8001_ha, FAIL, pm8001_dbg(pm8001_ha, FAIL,
"task 0x%p done with event 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n", "task 0x%p done with event 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
t, event, ts->resp, ts->stat); t, event, ts->resp, ts->stat);
pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free(pm8001_ha, ccb);
} else { } else {
spin_unlock_irqrestore(&t->task_state_lock, flags); spin_unlock_irqrestore(&t->task_state_lock, flags);
pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free_done(pm8001_ha, ccb);
mb();/* in order to force CPU ordering */
t->task_done(t);
} }
} }
...@@ -2579,7 +2575,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, ...@@ -2579,7 +2575,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha,
ts->stat = SAS_QUEUE_FULL; ts->stat = SAS_QUEUE_FULL;
spin_unlock_irqrestore(&circularQ->oq_lock, spin_unlock_irqrestore(&circularQ->oq_lock,
circularQ->lock_flags); circularQ->lock_flags);
pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free_done(pm8001_ha, ccb);
spin_lock_irqsave(&circularQ->oq_lock, spin_lock_irqsave(&circularQ->oq_lock,
circularQ->lock_flags); circularQ->lock_flags);
return; return;
...@@ -2599,7 +2595,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, ...@@ -2599,7 +2595,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha,
ts->stat = SAS_QUEUE_FULL; ts->stat = SAS_QUEUE_FULL;
spin_unlock_irqrestore(&circularQ->oq_lock, spin_unlock_irqrestore(&circularQ->oq_lock,
circularQ->lock_flags); circularQ->lock_flags);
pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free_done(pm8001_ha, ccb);
spin_lock_irqsave(&circularQ->oq_lock, spin_lock_irqsave(&circularQ->oq_lock,
circularQ->lock_flags); circularQ->lock_flags);
return; return;
...@@ -2627,7 +2623,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, ...@@ -2627,7 +2623,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha,
ts->stat = SAS_QUEUE_FULL; ts->stat = SAS_QUEUE_FULL;
spin_unlock_irqrestore(&circularQ->oq_lock, spin_unlock_irqrestore(&circularQ->oq_lock,
circularQ->lock_flags); circularQ->lock_flags);
pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free_done(pm8001_ha, ccb);
spin_lock_irqsave(&circularQ->oq_lock, spin_lock_irqsave(&circularQ->oq_lock,
circularQ->lock_flags); circularQ->lock_flags);
return; return;
...@@ -2702,7 +2698,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, ...@@ -2702,7 +2698,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha,
ts->stat = SAS_QUEUE_FULL; ts->stat = SAS_QUEUE_FULL;
spin_unlock_irqrestore(&circularQ->oq_lock, spin_unlock_irqrestore(&circularQ->oq_lock,
circularQ->lock_flags); circularQ->lock_flags);
pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free_done(pm8001_ha, ccb);
spin_lock_irqsave(&circularQ->oq_lock, spin_lock_irqsave(&circularQ->oq_lock,
circularQ->lock_flags); circularQ->lock_flags);
return; return;
...@@ -2726,7 +2722,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, ...@@ -2726,7 +2722,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha,
ts->stat = SAS_QUEUE_FULL; ts->stat = SAS_QUEUE_FULL;
spin_unlock_irqrestore(&circularQ->oq_lock, spin_unlock_irqrestore(&circularQ->oq_lock,
circularQ->lock_flags); circularQ->lock_flags);
pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free_done(pm8001_ha, ccb);
spin_lock_irqsave(&circularQ->oq_lock, spin_lock_irqsave(&circularQ->oq_lock,
circularQ->lock_flags); circularQ->lock_flags);
return; return;
...@@ -2760,14 +2756,14 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, ...@@ -2760,14 +2756,14 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha,
pm8001_dbg(pm8001_ha, FAIL, pm8001_dbg(pm8001_ha, FAIL,
"task 0x%p done with io_status 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n", "task 0x%p done with io_status 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
t, status, ts->resp, ts->stat); t, status, ts->resp, ts->stat);
pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free(pm8001_ha, ccb);
if (t->slow_task) if (t->slow_task)
complete(&t->slow_task->completion); complete(&t->slow_task->completion);
} else { } else {
spin_unlock_irqrestore(&t->task_state_lock, flags); spin_unlock_irqrestore(&t->task_state_lock, flags);
spin_unlock_irqrestore(&circularQ->oq_lock, spin_unlock_irqrestore(&circularQ->oq_lock,
circularQ->lock_flags); circularQ->lock_flags);
pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free_done(pm8001_ha, ccb);
spin_lock_irqsave(&circularQ->oq_lock, spin_lock_irqsave(&circularQ->oq_lock,
circularQ->lock_flags); circularQ->lock_flags);
} }
...@@ -3171,10 +3167,10 @@ mpi_smp_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) ...@@ -3171,10 +3167,10 @@ mpi_smp_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
pm8001_dbg(pm8001_ha, FAIL, pm8001_dbg(pm8001_ha, FAIL,
"task 0x%p done with io_status 0x%x resp 0x%xstat 0x%x but aborted by upper layer!\n", "task 0x%p done with io_status 0x%x resp 0x%xstat 0x%x but aborted by upper layer!\n",
t, status, ts->resp, ts->stat); t, status, ts->resp, ts->stat);
pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free(pm8001_ha, ccb);
} else { } else {
spin_unlock_irqrestore(&t->task_state_lock, flags); spin_unlock_irqrestore(&t->task_state_lock, flags);
pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); pm8001_ccb_task_free(pm8001_ha, ccb);
mb();/* in order to force CPU ordering */ mb();/* in order to force CPU ordering */
t->task_done(t); t->task_done(t);
} }
...@@ -4702,13 +4698,12 @@ static int pm80xx_chip_sata_req(struct pm8001_hba_info *pm8001_ha, ...@@ -4702,13 +4698,12 @@ static int pm80xx_chip_sata_req(struct pm8001_hba_info *pm8001_ha,
"task 0x%p resp 0x%x stat 0x%x but aborted by upper layer\n", "task 0x%p resp 0x%x stat 0x%x but aborted by upper layer\n",
task, ts->resp, task, ts->resp,
ts->stat); ts->stat);
pm8001_ccb_task_free(pm8001_ha, task, ccb, tag); pm8001_ccb_task_free(pm8001_ha, ccb);
return 0; return 0;
} else { } else {
spin_unlock_irqrestore(&task->task_state_lock, spin_unlock_irqrestore(&task->task_state_lock,
flags); flags);
pm8001_ccb_task_free_done(pm8001_ha, task, pm8001_ccb_task_free_done(pm8001_ha, ccb);
ccb, tag);
atomic_dec(&pm8001_ha_dev->running_req); atomic_dec(&pm8001_ha_dev->running_req);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment