From: "Michael S. Tsirkin" <mst@redhat.com>
To: Eugenio Perez Martin <eperezma@redhat.com>
Cc: Wafer <wafer@jaguarmicro.com>,
jasowang@redhat.com, qemu-devel@nongnu.org,
angus.chen@jaguarmicro.com, Lei Yang <leiyang@redhat.com>
Subject: Re: [PATCH] hw/virtio: Fix obtain the buffer id from the last descriptor
Date: Wed, 8 May 2024 14:21:19 -0400 [thread overview]
Message-ID: <20240508141920-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <CAJaqyWcgMFJL8y7wXwFZa6dny34WKDRH+tuEaCdP8oFN4Qf5fQ@mail.gmail.com>
On Wed, May 08, 2024 at 02:56:11PM +0200, Eugenio Perez Martin wrote:
> On Mon, Apr 22, 2024 at 3:41 AM Wafer <wafer@jaguarmicro.com> wrote:
> >
> > 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.
> >
>
> This is actually trickier. While it is true the standard mandates it,
> both linux virtio_ring driver and QEMU trusts the ID will be the first
> descriptor of the chain. Does merging this change in QEMU without
> merging the corresponding one in the linux kernel break things? Or am
> I missing something?
>
> If it breaks I guess this requires more thinking. I didn't check DPDK,
> neither as driver nor as vhost-user device.
>
> Thanks!
I think that if the driver is out of spec we should for starters fix it ASAP.
> > Fixes: 86044b24e8 ("virtio: basic packed virtqueue support")
> >
> > Signed-off-by: Wafer <wafer@jaguarmicro.com>
> > ---
> > hw/virtio/virtio.c | 5 +++++
> > 1 file changed, 5 insertions(+)
> >
> > diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
> > index 871674f9be..f65d4b4161 100644
> > --- a/hw/virtio/virtio.c
> > +++ b/hw/virtio/virtio.c
> > @@ -1739,6 +1739,11 @@ static void *virtqueue_packed_pop(VirtQueue *vq, size_t sz)
> > goto err_undo_map;
> > }
> >
> > + if (desc_cache != &indirect_desc_cache) {
> > + /* Buffer ID is included in the last descriptor in the list. */
> > + id = desc.id;
> > + }
> > +
> > rc = virtqueue_packed_read_next_desc(vq, &desc, desc_cache, max, &i,
> > desc_cache ==
> > &indirect_desc_cache);
> > --
> > 2.27.0
> >
next prev parent reply other threads:[~2024-05-08 18:23 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-22 1:40 [PATCH] hw/virtio: Fix obtain the buffer id from the last descriptor Wafer
2024-05-08 4:00 ` Jason Wang
2024-05-09 4:32 ` Wafer
2024-05-09 5:45 ` Eugenio Perez Martin
2024-05-08 12:56 ` Eugenio Perez Martin
2024-05-08 18:21 ` Michael S. Tsirkin [this message]
2024-05-09 2:20 ` Wafer
2024-05-09 5:44 ` Eugenio Perez Martin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240508141920-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=angus.chen@jaguarmicro.com \
--cc=eperezma@redhat.com \
--cc=jasowang@redhat.com \
--cc=leiyang@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=wafer@jaguarmicro.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.