Ping :) > -----Original Message----- > From: Wafer > Sent: 2024/05/10 15:29 > To: epere...@redhat.com; m...@redhat.com; jasow...@redhat.com > Cc: qemu-devel@nongnu.org; Angus Chen <angus.c...@jaguarmicro.com>; > Wafer <wa...@jaguarmicro.com> > Subject: [PATCH v3] hw/virtio: Fix obtain the buffer id from the last > descriptor > > The virtio-1.3 specification > <https://docs.oasis-open.org/virtio/virtio/v1.3/virtio-v1.3.html> writes: > 2.8.6 Next Flag: Descriptor Chaining > Buffer ID is included in the last descriptor in the list. > > If the feature (_F_INDIRECT_DESC) has been negotiated, install only one > descriptor in the virtqueue. > Therefor the buffer id should be obtained from the first descriptor. > > In descriptor chaining scenarios, the buffer id should be obtained from the > last descriptor. > > Fixes: 86044b24e8 ("virtio: basic packed virtqueue support") > > Signed-off-by: Wafer <wa...@jaguarmicro.com> > Reviewed-by: Jason Wang <jasow...@redhat.com> > Reviewed-by: Eugenio Pérez <epere...@redhat.com> > Acked-by: Jason Wang <jasow...@redhat.com> > > -- > Changes in v3: > - Add Acked-by Jason Wang > > Changes in v2: > - Use Jason suggestion: Move the code out of the loop. > --- > hw/virtio/virtio.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index > 871674f9be..e9e8447878 100644 > --- a/hw/virtio/virtio.c > +++ b/hw/virtio/virtio.c > @@ -1744,6 +1744,11 @@ static void *virtqueue_packed_pop(VirtQueue > *vq, size_t sz) > &indirect_desc_cache); > } while (rc == VIRTQUEUE_READ_DESC_MORE); > > + if (desc_cache != &indirect_desc_cache) { > + /* Buffer ID is included in the last descriptor in the list. */ > + id = desc.id; > + } > + > /* Now copy what we have collected and mapped */ > elem = virtqueue_alloc_element(sz, out_num, in_num); > for (i = 0; i < out_num; i++) { > -- > 2.27.0