|
Hannes Reinecke |
23bd3a |
From: Bijan Mottahedeh <bijan.mottahedeh@oracle.com>
|
|
Hannes Reinecke |
23bd3a |
Date: Wed, 26 Feb 2020 18:53:43 -0800
|
|
Hannes Reinecke |
23bd3a |
Subject: [PATCH] nvme-pci: Hold cq_poll_lock while completing CQEs
|
|
Hannes Reinecke |
23bd3a |
Git-commit: 9515743bfb39c61aaf3d4f3219a645c8d1fe9a0e
|
|
Hannes Reinecke |
23bd3a |
Patch-mainline: v5.6-rc4
|
|
Hannes Reinecke |
23bd3a |
References: bsc#1169045
|
|
Hannes Reinecke |
23bd3a |
|
|
Hannes Reinecke |
23bd3a |
Completions need to consumed in the same order the controller submitted
|
|
Hannes Reinecke |
23bd3a |
them, otherwise future completion entries may overwrite ones we haven't
|
|
Hannes Reinecke |
23bd3a |
handled yet. Hold the nvme queue's poll lock while completing new CQEs to
|
|
Hannes Reinecke |
23bd3a |
prevent another thread from freeing command tags for reuse out-of-order.
|
|
Hannes Reinecke |
23bd3a |
|
|
Hannes Reinecke |
23bd3a |
Fixes: dabcefab45d3 ("nvme: provide optimized poll function for separate poll queues")
|
|
Hannes Reinecke |
23bd3a |
Signed-off-by: Bijan Mottahedeh <bijan.mottahedeh@oracle.com>
|
|
Hannes Reinecke |
23bd3a |
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
|
|
Hannes Reinecke |
23bd3a |
Reviewed-by: Jens Axboe <axboe@kernel.dk>
|
|
Hannes Reinecke |
23bd3a |
Signed-off-by: Keith Busch <kbusch@kernel.org>
|
|
Hannes Reinecke |
23bd3a |
Acked-by: Hannes Reinecke <hare@suse.com>
|
|
Hannes Reinecke |
23bd3a |
---
|
|
Hannes Reinecke |
23bd3a |
drivers/nvme/host/pci.c | 2 +-
|
|
Hannes Reinecke |
23bd3a |
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
Hannes Reinecke |
23bd3a |
|
|
Hannes Reinecke |
23bd3a |
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
|
|
Hannes Reinecke |
23bd3a |
index ace4dd9e953c..d3f23d6254e4 100644
|
|
Hannes Reinecke |
23bd3a |
--- a/drivers/nvme/host/pci.c
|
|
Hannes Reinecke |
23bd3a |
+++ b/drivers/nvme/host/pci.c
|
|
Hannes Reinecke |
23bd3a |
@@ -1078,9 +1078,9 @@ static int nvme_poll(struct blk_mq_hw_ctx *hctx)
|
|
Hannes Reinecke |
23bd3a |
|
|
Hannes Reinecke |
23bd3a |
spin_lock(&nvmeq->cq_poll_lock);
|
|
Hannes Reinecke |
23bd3a |
found = nvme_process_cq(nvmeq, &start, &end, -1);
|
|
Hannes Reinecke |
23bd3a |
+ nvme_complete_cqes(nvmeq, start, end);
|
|
Hannes Reinecke |
23bd3a |
spin_unlock(&nvmeq->cq_poll_lock);
|
|
Hannes Reinecke |
23bd3a |
|
|
Hannes Reinecke |
23bd3a |
- nvme_complete_cqes(nvmeq, start, end);
|
|
Hannes Reinecke |
23bd3a |
return found;
|
|
Hannes Reinecke |
23bd3a |
}
|
|
Hannes Reinecke |
23bd3a |
|
|
Hannes Reinecke |
23bd3a |
--
|
|
Hannes Reinecke |
23bd3a |
2.16.4
|
|
Hannes Reinecke |
23bd3a |
|