[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] vhost: Return earlier if used buffers overrun SVQ flush
From: |
Eugenio Pérez |
Subject: |
[PATCH] vhost: Return earlier if used buffers overrun SVQ flush |
Date: |
Tue, 12 Jul 2022 09:08:04 +0200 |
Previous function misses the just picked avail buffer from the queue.
This way keeps blocking the used queue until queue reset, but is cleaner
to check before calling to vhost_svq_get_buf.
Fixes: 100890f7cad50 ("vhost: Shadow virtqueue buffers forwarding")
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
---
hw/virtio/vhost-shadow-virtqueue.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/hw/virtio/vhost-shadow-virtqueue.c
b/hw/virtio/vhost-shadow-virtqueue.c
index 56c96ebd13..9280285435 100644
--- a/hw/virtio/vhost-shadow-virtqueue.c
+++ b/hw/virtio/vhost-shadow-virtqueue.c
@@ -405,19 +405,21 @@ static void vhost_svq_flush(VhostShadowVirtqueue *svq,
vhost_svq_disable_notification(svq);
while (true) {
uint32_t len;
- g_autofree VirtQueueElement *elem = vhost_svq_get_buf(svq, &len);
- if (!elem) {
- break;
- }
+ g_autofree VirtQueueElement *elem = NULL;
if (unlikely(i >= svq->vring.num)) {
qemu_log_mask(LOG_GUEST_ERROR,
"More than %u used buffers obtained in a %u size SVQ",
i, svq->vring.num);
- virtqueue_fill(vq, elem, len, i);
- virtqueue_flush(vq, i);
+ virtqueue_flush(vq, svq->vring.num);
return;
}
+
+ elem = vhost_svq_get_buf(svq, &len);
+ if (!elem) {
+ break;
+ }
+
virtqueue_fill(vq, elem, len, i++);
}
--
2.31.1
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] vhost: Return earlier if used buffers overrun SVQ flush,
Eugenio Pérez <=