Skip to content

Commit

Permalink
vhost: Do not depend on !NULL VirtQueueElement on vhost_svq_flush
Browse files Browse the repository at this point in the history
Since QEMU will be able to inject new elements on CVQ to restore the
state, we need not to depend on a VirtQueueElement to know if a new
element has been used by the device or not. Instead of check that, check
if there are new elements only using used idx on vhost_svq_flush.

Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
  • Loading branch information
eugpermar authored and jasowang committed Sep 2, 2022
1 parent 9e193ce commit d368c0b
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions hw/virtio/vhost-shadow-virtqueue.c
Expand Up @@ -499,17 +499,20 @@ static void vhost_svq_flush(VhostShadowVirtqueue *svq,
size_t vhost_svq_poll(VhostShadowVirtqueue *svq)
{
int64_t start_us = g_get_monotonic_time();
uint32_t len;

do {
uint32_t len;
VirtQueueElement *elem = vhost_svq_get_buf(svq, &len);
if (elem) {
return len;
if (vhost_svq_more_used(svq)) {
break;
}

if (unlikely(g_get_monotonic_time() - start_us > 10e6)) {
return 0;
}
} while (true);

vhost_svq_get_buf(svq, &len);
return len;
}

/**
Expand Down

0 comments on commit d368c0b

Please sign in to comment.