Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9feaf909 authored by Xiang Chen's avatar Xiang Chen Committed by Martin K. Petersen
Browse files

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: default avatarXiang Chen <chenxiang66@hisilicon.com>
Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 302e0901
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -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);
+2 −0
Original line number Diff line number Diff line
@@ -2378,7 +2378,9 @@ slot_complete_v2_hw(struct hisi_hba *hisi_hba, struct hisi_sas_slot *slot)

	if (unlikely(aborted)) {
		ts->stat = SAS_ABORTED_TASK;
		spin_lock_irqsave(&hisi_hba->lock, flags);
		hisi_sas_slot_task_free(hisi_hba, task, slot);
		spin_unlock_irqrestore(&hisi_hba->lock, flags);
		return -1;
	}

+2 −0
Original line number Diff line number Diff line
@@ -1400,7 +1400,9 @@ slot_complete_v3_hw(struct hisi_hba *hisi_hba, struct hisi_sas_slot *slot)
	ts->resp = SAS_TASK_COMPLETE;
	if (unlikely(aborted)) {
		ts->stat = SAS_ABORTED_TASK;
		spin_lock_irqsave(&hisi_hba->lock, flags);
		hisi_sas_slot_task_free(hisi_hba, task, slot);
		spin_unlock_irqrestore(&hisi_hba->lock, flags);
		return -1;
	}