From: "Michael S. Tsirkin" <mst@redhat.com>
To: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Cc: "David S. Miller" <davem@davemloft.net>,
Tiwei Bie <tiwei.bie@intel.com>,
virtualization@lists.linux-foundation.org
Subject: Re: [PATCH v4 2/2] virtio_ring: check desc == NULL when using indirect with packed
Date: Wed, 20 Oct 2021 04:24:33 -0400 [thread overview]
Message-ID: <20211020042350-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <1634696386.1682892-1-xuanzhuo@linux.alibaba.com>
On Wed, Oct 20, 2021 at 10:19:46AM +0800, Xuan Zhuo wrote:
> On Tue, 19 Oct 2021 09:21:51 -0400, Michael S. Tsirkin <mst@redhat.com> wrote:
> > On Tue, Oct 19, 2021 at 07:52:35PM +0800, Xuan Zhuo wrote:
> > > When using indirect with packed, we don't check for allocation failures.
> > > This patch checks that and fall back on direct.
> > >
> > > Fixes: 1ce9e6055fa ("virtio_ring: introduce packed ring support")
> > > Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
> > > ---
> > > drivers/virtio/virtio_ring.c | 13 ++++++++++---
> > > 1 file changed, 10 insertions(+), 3 deletions(-)
> > >
> > > diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
> > > index 91a46c4da87d..44a03b6e4dc4 100644
> > > --- a/drivers/virtio/virtio_ring.c
> > > +++ b/drivers/virtio/virtio_ring.c
> > > @@ -1065,6 +1065,9 @@ static int virtqueue_add_indirect_packed(struct vring_virtqueue *vq,
> > >
> > > head = vq->packed.next_avail_idx;
> > > desc = alloc_indirect_packed(total_sg, gfp);
> > > + if (!desc)
> > > + /* fall back on direct */
> >
> > this comment belongs in virtqueue_add_packed right after
> > return.
> >
> > > + return -EAGAIN;
> > >
> >
> > -ENOMEM surely?
>
> virtqueue_add_indirect_packed() will return -ENOMEM when dma mmap fails, so we
> have to choose a different error code.
>
> Thanks.
That's exactly the point. Why would we want to recover from allocation
failure but not DMA map failure?
> >
> > > if (unlikely(vq->vq.num_free < 1)) {
> > > pr_debug("Can't add buf len 1 - avail = 0\n");
> > > @@ -1176,6 +1179,7 @@ static inline int virtqueue_add_packed(struct virtqueue *_vq,
> > > unsigned int i, n, c, descs_used, err_idx;
> > > __le16 head_flags, flags;
> > > u16 head, id, prev, curr, avail_used_flags;
> > > + int err;
> > >
> > > START_USE(vq);
> > >
> > > @@ -1191,9 +1195,12 @@ static inline int virtqueue_add_packed(struct virtqueue *_vq,
> > >
> > > BUG_ON(total_sg == 0);
> > >
> > > - if (virtqueue_use_indirect(_vq, total_sg))
> > > - return virtqueue_add_indirect_packed(vq, sgs, total_sg,
> > > - out_sgs, in_sgs, data, gfp);
> > > + if (virtqueue_use_indirect(_vq, total_sg)) {
> > > + err = virtqueue_add_indirect_packed(vq, sgs, total_sg, out_sgs,
> > > + in_sgs, data, gfp);
> > > + if (err != -EAGAIN)
> > > + return err;
> > > + }
> > >
> > > head = vq->packed.next_avail_idx;
> > > avail_used_flags = vq->packed.avail_used_flags;
> > > --
> > > 2.31.0
> >
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
next prev parent reply other threads:[~2021-10-20 8:24 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-19 11:52 [PATCH v4 0/2] virtio_ring: check desc == NULL when packed and indirect Xuan Zhuo
2021-10-19 11:52 ` [PATCH v4 1/2] virtio_ring: fix style of virtqueue_add_indirect_packed Xuan Zhuo
2021-10-19 13:22 ` Michael S. Tsirkin
2021-10-19 11:52 ` [PATCH v4 2/2] virtio_ring: check desc == NULL when using indirect with packed Xuan Zhuo
2021-10-19 13:21 ` Michael S. Tsirkin
2021-10-20 2:19 ` Xuan Zhuo
2021-10-20 8:24 ` Michael S. Tsirkin [this message]
2021-10-20 11:07 ` Xuan Zhuo
2021-10-20 14:52 ` Michael S. Tsirkin
2021-10-21 1:54 ` Xuan Zhuo
2021-10-19 13:24 ` Michael S. Tsirkin
2021-10-19 13:23 ` [PATCH v4 0/2] virtio_ring: check desc == NULL when packed and indirect Michael S. Tsirkin
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=20211020042350-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=davem@davemloft.net \
--cc=tiwei.bie@intel.com \
--cc=virtualization@lists.linux-foundation.org \
--cc=xuanzhuo@linux.alibaba.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.