diff options
author | Eugenio Pérez <eperezma@redhat.com> | 2022-08-23 20:30:27 +0200 |
---|---|---|
committer | Jason Wang <jasowang@redhat.com> | 2022-09-02 10:22:39 +0800 |
commit | 86f5f2546f03a3dfde421c715187b262e29b2848 (patch) | |
tree | 20e80eb5c114e1cc8ede413db7e37e53cf19cb7c | |
parent | 9c2ab2f1ec333be8614cc12272d4b91960704dbe (diff) | |
download | qemu-86f5f2546f03a3dfde421c715187b262e29b2848.zip qemu-86f5f2546f03a3dfde421c715187b262e29b2848.tar.gz qemu-86f5f2546f03a3dfde421c715187b262e29b2848.tar.bz2 |
vhost: use SVQ element ndescs instead of opaque data for desc validation
Since we're going to allow SVQ to add elements without the guest's
knowledge and without its own VirtQueueElement, it's easier to check if
an element is a valid head checking a different thing than the
VirtQueueElement.
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
-rw-r--r-- | hw/virtio/vhost-shadow-virtqueue.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/hw/virtio/vhost-shadow-virtqueue.c b/hw/virtio/vhost-shadow-virtqueue.c index a1261d4..b35aeef 100644 --- a/hw/virtio/vhost-shadow-virtqueue.c +++ b/hw/virtio/vhost-shadow-virtqueue.c @@ -414,7 +414,7 @@ static VirtQueueElement *vhost_svq_get_buf(VhostShadowVirtqueue *svq, return NULL; } - if (unlikely(!svq->desc_state[used_elem.id].elem)) { + if (unlikely(!svq->desc_state[used_elem.id].ndescs)) { qemu_log_mask(LOG_GUEST_ERROR, "Device %s says index %u is used, but it was not available", svq->vdev->name, used_elem.id); @@ -422,6 +422,7 @@ static VirtQueueElement *vhost_svq_get_buf(VhostShadowVirtqueue *svq, } num = svq->desc_state[used_elem.id].ndescs; + svq->desc_state[used_elem.id].ndescs = 0; last_used_chain = vhost_svq_last_desc_of_chain(svq, num, used_elem.id); svq->desc_next[last_used_chain] = svq->free_head; svq->free_head = used_elem.id; |