]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
scsi: hisi_sas: Tidy hisi_sas_task_prep()
authorXiang Chen <chenxiang66@hisilicon.com>
Wed, 18 Jul 2018 14:14:31 +0000 (22:14 +0800)
committerStefan Bader <stefan.bader@canonical.com>
Mon, 1 Oct 2018 16:23:18 +0000 (18:23 +0200)
BugLink: https://bugs.launchpad.net/bugs/1794165
To decrease the usage of spinlock during delivery IO, relocate some code in
hisi_sas_task_prep().

Also an invalid comment is removed.

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>
(cherry picked from commit 6cca51ee0aa2540d648ff8698c3889330d897f27)
Signed-off-by: dann frazier <dann.frazier@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
Acked-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
drivers/scsi/hisi_sas/hisi_sas_main.c

index facd712b77027ae8644776aa526da662ed64e1a8..1385657ba1dcbe329bf8dcb3723776e3a5db481b 100644 (file)
@@ -329,8 +329,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) {
@@ -426,16 +426,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;
@@ -474,9 +475,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);
@@ -854,7 +852,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)
 {