virtualization.lists.linux-foundation.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] virtio_blk: always post notifications under the lock
@ 2025-01-07 18:25 Andrew Boyer
  2025-01-08  2:02 ` Jason Wang
                   ` (2 more replies)
  0 siblings, 3 replies; 24+ messages in thread
From: Andrew Boyer @ 2025-01-07 18:25 UTC (permalink / raw)
  To: andrew.boyer
  Cc: Viktor Prutyanov, Michael S . Tsirkin, Jason Wang, Paolo Bonzini,
	Stefan Hajnoczi, Eugenio Perez, Xuan Zhuo, Jens Axboe,
	virtualization, linux-block

Commit af8ececda185 ("virtio: add VIRTIO_F_NOTIFICATION_DATA feature
support") added notification data support to the core virtio driver
code. When this feature is enabled, the notification includes the
updated producer index for the queue. Thus it is now critical that
notifications arrive in order.

The virtio_blk driver has historically not worried about notification
ordering. Modify it so that the prepare and kick steps are both done
under the vq lock.

Signed-off-by: Andrew Boyer <andrew.boyer@amd.com>
Reviewed-by: Brett Creeley <brett.creeley@amd.com>
Fixes: af8ececda185 ("virtio: add VIRTIO_F_NOTIFICATION_DATA feature support")
Cc: Viktor Prutyanov <viktor@daynix.com>
Cc: virtualization@lists.linux.dev
Cc: linux-block@vger.kernel.org
---
 drivers/block/virtio_blk.c | 19 ++++---------------
 1 file changed, 4 insertions(+), 15 deletions(-)

diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
index 3efe378f1386..14d9e66bb844 100644
--- a/drivers/block/virtio_blk.c
+++ b/drivers/block/virtio_blk.c
@@ -379,14 +379,10 @@ static void virtio_commit_rqs(struct blk_mq_hw_ctx *hctx)
 {
 	struct virtio_blk *vblk = hctx->queue->queuedata;
 	struct virtio_blk_vq *vq = &vblk->vqs[hctx->queue_num];
-	bool kick;
 
 	spin_lock_irq(&vq->lock);
-	kick = virtqueue_kick_prepare(vq->vq);
+	virtqueue_kick(vq->vq);
 	spin_unlock_irq(&vq->lock);
-
-	if (kick)
-		virtqueue_notify(vq->vq);
 }
 
 static blk_status_t virtblk_fail_to_queue(struct request *req, int rc)
@@ -432,7 +428,6 @@ static blk_status_t virtio_queue_rq(struct blk_mq_hw_ctx *hctx,
 	struct virtblk_req *vbr = blk_mq_rq_to_pdu(req);
 	unsigned long flags;
 	int qid = hctx->queue_num;
-	bool notify = false;
 	blk_status_t status;
 	int err;
 
@@ -454,12 +449,10 @@ static blk_status_t virtio_queue_rq(struct blk_mq_hw_ctx *hctx,
 		return virtblk_fail_to_queue(req, err);
 	}
 
-	if (bd->last && virtqueue_kick_prepare(vblk->vqs[qid].vq))
-		notify = true;
+	if (bd->last)
+		virtqueue_kick(vblk->vqs[qid].vq);
 	spin_unlock_irqrestore(&vblk->vqs[qid].lock, flags);
 
-	if (notify)
-		virtqueue_notify(vblk->vqs[qid].vq);
 	return BLK_STS_OK;
 }
 
@@ -476,7 +469,6 @@ static void virtblk_add_req_batch(struct virtio_blk_vq *vq,
 {
 	struct request *req;
 	unsigned long flags;
-	bool kick;
 
 	spin_lock_irqsave(&vq->lock, flags);
 
@@ -492,11 +484,8 @@ static void virtblk_add_req_batch(struct virtio_blk_vq *vq,
 		}
 	}
 
-	kick = virtqueue_kick_prepare(vq->vq);
+	virtqueue_kick(vq->vq);
 	spin_unlock_irqrestore(&vq->lock, flags);
-
-	if (kick)
-		virtqueue_notify(vq->vq);
 }
 
 static void virtio_queue_rqs(struct rq_list *rqlist)
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2025-02-24 21:37 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-07 18:25 [PATCH] virtio_blk: always post notifications under the lock Andrew Boyer
2025-01-08  2:02 ` Jason Wang
2025-01-09 10:19 ` Michael S. Tsirkin
2025-01-09 12:01 ` Christian Borntraeger
2025-01-09 13:42   ` Michael S. Tsirkin
2025-01-22 14:48     ` Boyer, Andrew
     [not found]     ` <FE77DD4F-AB39-4781-9D24-06F171F47FED@amd.com>
2025-01-22 15:13       ` Michael S. Tsirkin
2025-01-22 17:45         ` Boyer, Andrew
2025-01-23  6:53           ` Michael S. Tsirkin
2025-01-22 15:15       ` (repost) " Michael S. Tsirkin
2025-01-22 17:33       ` Christian Borntraeger
2025-01-22 17:49         ` Boyer, Andrew
2025-01-23  7:03           ` Michael S. Tsirkin
2025-01-22 22:07         ` Michael S. Tsirkin
2025-01-22 22:14           ` Boyer, Andrew
2025-01-22 22:25             ` Michael S. Tsirkin
2025-01-22 22:34               ` Boyer, Andrew
2025-01-23  1:47                 ` Jason Wang
2025-01-23  6:51                   ` Michael S. Tsirkin
2025-01-23  7:23                 ` Michael S. Tsirkin
2025-01-23  8:39           ` Christian Borntraeger
2025-02-24 21:03             ` Michael S. Tsirkin
2025-02-24 21:31               ` Boyer, Andrew
2025-02-24 21:37                 ` Michael S. Tsirkin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).