OSDN Git Service

nvme-pci: refactor nvme_poll_irqdisable to make sparse happy
authorChristoph Hellwig <hch@lst.de>
Thu, 13 Dec 2018 08:48:00 +0000 (09:48 +0100)
committerChristoph Hellwig <hch@lst.de>
Tue, 18 Dec 2018 16:50:45 +0000 (17:50 +0100)
By duplicating the nvme_process_cq in both branches we keep the
sparse lock context checking happy, so do it.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
drivers/nvme/host/pci.c

index a3e0b93..452b281 100644 (file)
@@ -1089,15 +1089,15 @@ static int nvme_poll_irqdisable(struct nvme_queue *nvmeq, unsigned int tag)
         * using the CQ lock.  For normal interrupt driven threads we have
         * to disable the interrupt to avoid racing with it.
         */
-       if (nvmeq->cq_vector == -1)
+       if (nvmeq->cq_vector == -1) {
                spin_lock(&nvmeq->cq_poll_lock);
-       else
-               disable_irq(pci_irq_vector(pdev, nvmeq->cq_vector));
-       found = nvme_process_cq(nvmeq, &start, &end, tag);
-       if (nvmeq->cq_vector == -1)
+               found = nvme_process_cq(nvmeq, &start, &end, tag);
                spin_unlock(&nvmeq->cq_poll_lock);
-       else
+       } else {
+               disable_irq(pci_irq_vector(pdev, nvmeq->cq_vector));
+               found = nvme_process_cq(nvmeq, &start, &end, tag);
                enable_irq(pci_irq_vector(pdev, nvmeq->cq_vector));
+       }
 
        nvme_complete_cqes(nvmeq, start, end);
        return found;