|
@@ -146,6 +146,7 @@ static void hisi_sas_slot_abort(struct work_struct *work)
|
|
|
struct scsi_lun lun;
|
|
|
struct device *dev = &hisi_hba->pdev->dev;
|
|
|
int tag = abort_slot->idx;
|
|
|
+ unsigned long flags;
|
|
|
|
|
|
if (!(task->task_proto & SAS_PROTOCOL_SSP)) {
|
|
|
dev_err(dev, "cannot abort slot for non-ssp task\n");
|
|
@@ -159,7 +160,9 @@ static void hisi_sas_slot_abort(struct work_struct *work)
|
|
|
hisi_sas_debug_issue_ssp_tmf(task->dev, lun.scsi_lun, &tmf_task);
|
|
|
out:
|
|
|
/* Do cleanup for this task */
|
|
|
+ spin_lock_irqsave(&hisi_hba->lock, flags);
|
|
|
hisi_sas_slot_task_free(hisi_hba, task, abort_slot);
|
|
|
+ spin_unlock_irqrestore(&hisi_hba->lock, flags);
|
|
|
if (task->task_done)
|
|
|
task->task_done(task);
|
|
|
if (sas_dev)
|