|
@@ -296,8 +296,8 @@ static int hisi_sas_task_prep(struct sas_task *task,
|
|
|
struct device *dev = hisi_hba->dev;
|
|
|
int dlvry_queue_slot, dlvry_queue, rc, slot_idx;
|
|
|
int n_elem = 0, n_elem_req = 0, n_elem_resp = 0;
|
|
|
- unsigned long flags, flags_dq;
|
|
|
struct hisi_sas_dq *dq;
|
|
|
+ unsigned long flags;
|
|
|
int wr_q_index;
|
|
|
|
|
|
if (!sas_port) {
|
|
@@ -393,16 +393,17 @@ static int hisi_sas_task_prep(struct sas_task *task,
|
|
|
|
|
|
slot = &hisi_hba->slot_info[slot_idx];
|
|
|
|
|
|
- spin_lock_irqsave(&dq->lock, flags_dq);
|
|
|
+ spin_lock_irqsave(&dq->lock, flags);
|
|
|
wr_q_index = hisi_hba->hw->get_free_slot(hisi_hba, dq);
|
|
|
if (wr_q_index < 0) {
|
|
|
- spin_unlock_irqrestore(&dq->lock, flags_dq);
|
|
|
+ spin_unlock_irqrestore(&dq->lock, flags);
|
|
|
rc = -EAGAIN;
|
|
|
goto err_out_tag;
|
|
|
}
|
|
|
|
|
|
list_add_tail(&slot->delivery, &dq->list);
|
|
|
- spin_unlock_irqrestore(&dq->lock, flags_dq);
|
|
|
+ list_add_tail(&slot->entry, &sas_dev->list);
|
|
|
+ spin_unlock_irqrestore(&dq->lock, flags);
|
|
|
|
|
|
dlvry_queue = dq->id;
|
|
|
dlvry_queue_slot = wr_q_index;
|
|
@@ -440,9 +441,6 @@ static int hisi_sas_task_prep(struct sas_task *task,
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- spin_lock_irqsave(&dq->lock, flags);
|
|
|
- list_add_tail(&slot->entry, &sas_dev->list);
|
|
|
- spin_unlock_irqrestore(&dq->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);
|
|
@@ -818,7 +816,6 @@ static void hisi_sas_do_release_task(struct hisi_hba *hisi_hba, struct sas_task
|
|
|
hisi_sas_slot_task_free(hisi_hba, task, slot);
|
|
|
}
|
|
|
|
|
|
-/* hisi_hba.lock should be locked */
|
|
|
static void hisi_sas_release_task(struct hisi_hba *hisi_hba,
|
|
|
struct domain_device *device)
|
|
|
{
|