diff options
author | Xiang Chen | 2017-10-24 17:51:34 +0200 |
---|---|---|
committer | Martin K. Petersen | 2017-10-25 14:21:04 +0200 |
commit | 9feaf9090bac3963d1b1afeba08179a0dda9c0f2 (patch) | |
tree | fb710b97be38d34f9c6098c8d0d2fb94924ded77 /drivers/scsi/hisi_sas/hisi_sas_main.c | |
parent | scsi: hisi_sas: use spin_lock_irqsave() for hisi_hba.lock (diff) | |
download | kernel-qcow2-linux-9feaf9090bac3963d1b1afeba08179a0dda9c0f2.tar.gz kernel-qcow2-linux-9feaf9090bac3963d1b1afeba08179a0dda9c0f2.tar.xz kernel-qcow2-linux-9feaf9090bac3963d1b1afeba08179a0dda9c0f2.zip |
scsi: hisi_sas: grab hisi_hba.lock when processing slots
When adding/removing slots from device list, we need to lock this
operation with hisi_hba lock for safety.
This patch adds missing instances of this.
Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com>
Signed-off-by: John Garry <john.garry@huawei.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi/hisi_sas/hisi_sas_main.c')
-rw-r--r-- | drivers/scsi/hisi_sas/hisi_sas_main.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c index e038bdf23369..254af67d87e1 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_main.c +++ b/drivers/scsi/hisi_sas/hisi_sas_main.c @@ -401,7 +401,9 @@ static int hisi_sas_task_prep(struct sas_task *task, struct hisi_sas_dq goto err_out_buf; } + spin_lock_irqsave(&hisi_hba->lock, flags); list_add_tail(&slot->entry, &sas_dev->list); + spin_unlock_irqrestore(&hisi_hba->lock, flags); spin_lock_irqsave(&task->task_state_lock, flags); task->task_state_flags |= SAS_TASK_AT_INITIATOR; spin_unlock_irqrestore(&task->task_state_lock, flags); @@ -1387,8 +1389,9 @@ hisi_sas_internal_abort_task_exec(struct hisi_hba *hisi_hba, int device_id, if (rc) goto err_out_buf; - + spin_lock_irqsave(&hisi_hba->lock, flags); list_add_tail(&slot->entry, &sas_dev->list); + spin_unlock_irqrestore(&hisi_hba->lock, flags); spin_lock_irqsave(&task->task_state_lock, flags); task->task_state_flags |= SAS_TASK_AT_INITIATOR; spin_unlock_irqrestore(&task->task_state_lock, flags); |