Message ID | 20220804182852.703398-3-eperezma@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | NIC vhost-vdpa state restore via Shadow CVQ | expand |
On Fri, Aug 5, 2022 at 2:29 AM Eugenio Pérez <eperezma@redhat.com> wrote: > > 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> > hw/virtio/vhost-shadow-virtqueue.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/hw/virtio/vhost-shadow-virtqueue.c b/hw/virtio/vhost-shadow-virtqueue.c > index ffd2b2c972..e6eebd0e8d 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; > -- > 2.31.1 >
diff --git a/hw/virtio/vhost-shadow-virtqueue.c b/hw/virtio/vhost-shadow-virtqueue.c index ffd2b2c972..e6eebd0e8d 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;
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> --- hw/virtio/vhost-shadow-virtqueue.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)