NVMe: Need to lock queue during interrupt handling
authorMatthew Wilcox <matthew.r.wilcox@intel.com>
Sun, 6 Feb 2011 14:01:00 +0000 (09:01 -0500)
committerMatthew Wilcox <matthew.r.wilcox@intel.com>
Fri, 4 Nov 2011 19:52:56 +0000 (15:52 -0400)
If we're sharing a queue between multiple CPUs and we cancel a sync I/O,
we must have the queue locked to avoid corrupting the stack of the thread
that submitted the I/O.  It turns out this is the same locking that's needed
for the threaded irq handler, so share that code.

Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com>
drivers/block/nvme.c

index f4085d4fe0f211ce326e110cd94319a01e852521..139e6fc1e2a8aae467508f981faf01579fc242ff 100644 (file)
@@ -476,11 +476,6 @@ static irqreturn_t nvme_process_cq(struct nvme_queue *nvmeq)
 }
 
 static irqreturn_t nvme_irq(int irq, void *data)
-{
-       return nvme_process_cq(data);
-}
-
-static irqreturn_t nvme_irq_thread(int irq, void *data)
 {
        irqreturn_t result;
        struct nvme_queue *nvmeq = data;
@@ -676,7 +671,7 @@ static int queue_request_irq(struct nvme_dev *dev, struct nvme_queue *nvmeq,
 {
        if (use_threaded_interrupts)
                return request_threaded_irq(dev->entry[nvmeq->cq_vector].vector,
-                                       nvme_irq_check, nvme_irq_thread,
+                                       nvme_irq_check, nvme_irq,
                                        IRQF_DISABLED | IRQF_SHARED,
                                        name, nvmeq);
        return request_irq(dev->entry[nvmeq->cq_vector].vector, nvme_irq,
This page took 0.02565 seconds and 5 git commands to generate.