NVMe: Memory barrier before queue_count is incremented
Subsystems (2)
PATCH 1/1 NVMe: Memory barrier before queue_count is incremented
Protects against reordering and/or preempting which would allow the kthread to access the queue descriptor before it is set up
--- drivers/block/nvme-core.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/block/nvme-core.c +4 -1
@@ -1463,9 +1463,12 @@ static struct nvme_queue *nvme_alloc_queue(struct nvme_dev *dev, int qid, nvmeq->q_db = &dev->dbs[qid *2 * dev->db_stride]; nvmeq->q_depth = depth; nvmeq->qid = qid; - dev->queue_count++; dev->queues[qid] = nvmeq; +/* make sure queue descriptor is set before queue count, for kthread */ +mb (); + dev->queue_count++; +return nvmeq; free_cqdma:
Signature · 1 line
2.1.4
PATCH 1/1 NVMe: Memory barrier before queue_count is incremented
Quoted 2 lines · Jon Derrick
Protects against reordering and/or preempting which would allow the kthread to access the queue descriptor before it is set up
Looks good to me.
Quoted 27 lines
Signed-off-by Jon Derrick <jonathan.derrick at intel.com>---
drivers/block/nvme-core.c| 5 ++++-1 file changed, 4 insertions(+), 1 deletion(-)drivers/block/nvme-core.c +4
-1@@ -1463,9 +1463,12 @@ static struct nvme_queue *nvme_alloc_queue(struct nvme_dev *dev, int qid, nvmeq->q_db = &dev->dbs[qid *2 * dev->db_stride]; nvmeq->q_depth = depth; nvmeq->qid = qid; - dev->queue_count++; dev->queues[qid] = nvmeq; +/* make sure queue descriptor is set before queue count, for kthread */ +mb (); + dev->queue_count++; +return nvmeq; free_cqdma:Signature · 1 line
2.1.4
Jens Axboe
maintainerPATCH 1/1 NVMe: Memory barrier before queue_count is incremented
Quoted 7 lines · Keith Busch
Quoted 2 lines · Jon Derrick
Protects against reordering and/or preempting which would allow the kthread to access the queue descriptor before it is set up
Looks good to me.
Acked-by Keith Busch <keith.busch at intel.com>
Ditto, merged.
Signature · 1 line
Jens Axboe
PATCH 1/1 NVMe: Memory barrier before queue_count is incremented
In reply to Jon DerrickPing?
Quoted 29 lines · Jon Derrick
Protects against reordering and/or preempting which would allow the kthread to access the queue descriptor before it is set up
Signed-off-by Jon Derrick <jonathan.derrick at intel.com>--- drivers/block/nvme-core.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)drivers/block/nvme-core.c +4
-1@@ -1463,9 +1463,12 @@ static struct nvme_queue *nvme_alloc_queue(struct nvme_dev *dev, int qid, nvmeq->q_db = &dev->dbs[qid *2 * dev->db_stride]; nvmeq->q_depth = depth; nvmeq->qid = qid; - dev->queue_count++; dev->queues[qid] = nvmeq; +/* make sure queue descriptor is set before queue count, for kthread */ +mb (); + dev->queue_count++; +return nvmeq; free_cqdma:Signature · 1 line
2.1.4