All of lore.kernel.org
 help / color / mirror / Atom feed
From: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
To: Jason Wang <jasowang@redhat.com>
Cc: Jesper Dangaard Brouer <hawk@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	netdev@vger.kernel.org, John Fastabend <john.fastabend@gmail.com>,
	Alexei Starovoitov <ast@kernel.org>,
	virtualization@lists.linux-foundation.org,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>,
	bpf@vger.kernel.org, Paolo Abeni <pabeni@redhat.com>,
	"David S. Miller" <davem@davemloft.net>
Subject: Re: [PATCH vhost v10 04/10] virtio_ring: packed: support add premapped buf
Date: Tue, 27 Jun 2023 17:05:38 +0800	[thread overview]
Message-ID: <1687856738.178093-6-xuanzhuo@linux.alibaba.com> (raw)
In-Reply-To: <CACGkMEuoBtQ+=kJJk84Vs2sk7WAdh8O3d2wJLM-yBFAtkgLEUA@mail.gmail.com>

On Tue, 27 Jun 2023 16:03:29 +0800, Jason Wang <jasowang@redhat.com> wrote:
> On Fri, Jun 2, 2023 at 5:22 PM Xuan Zhuo <xuanzhuo@linux.alibaba.com> wrote:
> >
> > If the vq is the premapped mode, use the sg_dma_address() directly.
> >
> > Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
> > ---
> >  drivers/virtio/virtio_ring.c | 36 ++++++++++++++++++++++++++----------
> >  1 file changed, 26 insertions(+), 10 deletions(-)
> >
> > diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
> > index 18212c3e056b..dc109fbc05a5 100644
> > --- a/drivers/virtio/virtio_ring.c
> > +++ b/drivers/virtio/virtio_ring.c
> > @@ -1299,9 +1299,13 @@ static int virtqueue_add_indirect_packed(struct vring_virtqueue *vq,
> >
> >         for (n = 0; n < out_sgs + in_sgs; n++) {
> >                 for (sg = sgs[n]; sg; sg = sg_next(sg)) {
> > -                       if (vring_map_one_sg(vq, sg, n < out_sgs ?
> > -                                            DMA_TO_DEVICE : DMA_FROM_DEVICE, &addr))
> > -                               goto unmap_release;
> > +                       if (vq->premapped) {
> > +                               addr = sg_dma_address(sg);
> > +                       } else {
> > +                               if (vring_map_one_sg(vq, sg, n < out_sgs ?
> > +                                                    DMA_TO_DEVICE : DMA_FROM_DEVICE, &addr))
> > +                                       goto unmap_release;
> > +                       }
> >
> >                         desc[i].flags = cpu_to_le16(n < out_sgs ?
> >                                                 0 : VRING_DESC_F_WRITE);
> > @@ -1369,10 +1373,12 @@ static int virtqueue_add_indirect_packed(struct vring_virtqueue *vq,
> >         return 0;
> >
> >  unmap_release:
> > -       err_idx = i;
> > +       if (!vq->premapped) {
> > +               err_idx = i;
> >
> > -       for (i = 0; i < err_idx; i++)
> > -               vring_unmap_desc_packed(vq, &desc[i]);
> > +               for (i = 0; i < err_idx; i++)
> > +                       vring_unmap_desc_packed(vq, &desc[i]);
> > +       }
> >
> >         kfree(desc);
> >
> > @@ -1447,9 +1453,13 @@ static inline int virtqueue_add_packed(struct virtqueue *_vq,
> >                 for (sg = sgs[n]; sg; sg = sg_next(sg)) {
> >                         dma_addr_t addr;
> >
> > -                       if (vring_map_one_sg(vq, sg, n < out_sgs ?
> > -                                            DMA_TO_DEVICE : DMA_FROM_DEVICE, &addr))
> > -                               goto unmap_release;
> > +                       if (vq->premapped) {
> > +                               addr = sg_dma_address(sg);
> > +                       } else {
> > +                               if (vring_map_one_sg(vq, sg, n < out_sgs ?
> > +                                                    DMA_TO_DEVICE : DMA_FROM_DEVICE, &addr))
> > +                                       goto unmap_release;
> > +                       }
> >
> >                         flags = cpu_to_le16(vq->packed.avail_used_flags |
> >                                     (++c == total_sg ? 0 : VRING_DESC_F_NEXT) |
> > @@ -1512,11 +1522,17 @@ static inline int virtqueue_add_packed(struct virtqueue *_vq,
> >         return 0;
> >
> >  unmap_release:
> > +       vq->packed.avail_used_flags = avail_used_flags;
> > +
> > +       if (vq->premapped) {
>
> Similar to the split path, I think we can't hit vq->premapped here.


YES, similar to the above reply, we can have a better way.

But, we can hit vq->premapped, when we fail doing dma for the indirect desc
array.

Thanks.




>
> Thanks
>
>
> > +               END_USE(vq);
> > +               return -EIO;
> > +       }
> > +
> >         err_idx = i;
> >         i = head;
> >         curr = vq->free_head;
> >
> > -       vq->packed.avail_used_flags = avail_used_flags;
> >
> >         for (n = 0; n < total_sg; n++) {
> >                 if (i == err_idx)
> > --
> > 2.32.0.3.g01195cf9f
> >
>
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

WARNING: multiple messages have this Message-ID (diff)
From: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
To: Jason Wang <jasowang@redhat.com>
Cc: virtualization@lists.linux-foundation.org,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Jesper Dangaard Brouer <hawk@kernel.org>,
	John Fastabend <john.fastabend@gmail.com>,
	netdev@vger.kernel.org, bpf@vger.kernel.org
Subject: Re: [PATCH vhost v10 04/10] virtio_ring: packed: support add premapped buf
Date: Tue, 27 Jun 2023 17:05:38 +0800	[thread overview]
Message-ID: <1687856738.178093-6-xuanzhuo@linux.alibaba.com> (raw)
In-Reply-To: <CACGkMEuoBtQ+=kJJk84Vs2sk7WAdh8O3d2wJLM-yBFAtkgLEUA@mail.gmail.com>

On Tue, 27 Jun 2023 16:03:29 +0800, Jason Wang <jasowang@redhat.com> wrote:
> On Fri, Jun 2, 2023 at 5:22 PM Xuan Zhuo <xuanzhuo@linux.alibaba.com> wrote:
> >
> > If the vq is the premapped mode, use the sg_dma_address() directly.
> >
> > Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
> > ---
> >  drivers/virtio/virtio_ring.c | 36 ++++++++++++++++++++++++++----------
> >  1 file changed, 26 insertions(+), 10 deletions(-)
> >
> > diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
> > index 18212c3e056b..dc109fbc05a5 100644
> > --- a/drivers/virtio/virtio_ring.c
> > +++ b/drivers/virtio/virtio_ring.c
> > @@ -1299,9 +1299,13 @@ static int virtqueue_add_indirect_packed(struct vring_virtqueue *vq,
> >
> >         for (n = 0; n < out_sgs + in_sgs; n++) {
> >                 for (sg = sgs[n]; sg; sg = sg_next(sg)) {
> > -                       if (vring_map_one_sg(vq, sg, n < out_sgs ?
> > -                                            DMA_TO_DEVICE : DMA_FROM_DEVICE, &addr))
> > -                               goto unmap_release;
> > +                       if (vq->premapped) {
> > +                               addr = sg_dma_address(sg);
> > +                       } else {
> > +                               if (vring_map_one_sg(vq, sg, n < out_sgs ?
> > +                                                    DMA_TO_DEVICE : DMA_FROM_DEVICE, &addr))
> > +                                       goto unmap_release;
> > +                       }
> >
> >                         desc[i].flags = cpu_to_le16(n < out_sgs ?
> >                                                 0 : VRING_DESC_F_WRITE);
> > @@ -1369,10 +1373,12 @@ static int virtqueue_add_indirect_packed(struct vring_virtqueue *vq,
> >         return 0;
> >
> >  unmap_release:
> > -       err_idx = i;
> > +       if (!vq->premapped) {
> > +               err_idx = i;
> >
> > -       for (i = 0; i < err_idx; i++)
> > -               vring_unmap_desc_packed(vq, &desc[i]);
> > +               for (i = 0; i < err_idx; i++)
> > +                       vring_unmap_desc_packed(vq, &desc[i]);
> > +       }
> >
> >         kfree(desc);
> >
> > @@ -1447,9 +1453,13 @@ static inline int virtqueue_add_packed(struct virtqueue *_vq,
> >                 for (sg = sgs[n]; sg; sg = sg_next(sg)) {
> >                         dma_addr_t addr;
> >
> > -                       if (vring_map_one_sg(vq, sg, n < out_sgs ?
> > -                                            DMA_TO_DEVICE : DMA_FROM_DEVICE, &addr))
> > -                               goto unmap_release;
> > +                       if (vq->premapped) {
> > +                               addr = sg_dma_address(sg);
> > +                       } else {
> > +                               if (vring_map_one_sg(vq, sg, n < out_sgs ?
> > +                                                    DMA_TO_DEVICE : DMA_FROM_DEVICE, &addr))
> > +                                       goto unmap_release;
> > +                       }
> >
> >                         flags = cpu_to_le16(vq->packed.avail_used_flags |
> >                                     (++c == total_sg ? 0 : VRING_DESC_F_NEXT) |
> > @@ -1512,11 +1522,17 @@ static inline int virtqueue_add_packed(struct virtqueue *_vq,
> >         return 0;
> >
> >  unmap_release:
> > +       vq->packed.avail_used_flags = avail_used_flags;
> > +
> > +       if (vq->premapped) {
>
> Similar to the split path, I think we can't hit vq->premapped here.


YES, similar to the above reply, we can have a better way.

But, we can hit vq->premapped, when we fail doing dma for the indirect desc
array.

Thanks.




>
> Thanks
>
>
> > +               END_USE(vq);
> > +               return -EIO;
> > +       }
> > +
> >         err_idx = i;
> >         i = head;
> >         curr = vq->free_head;
> >
> > -       vq->packed.avail_used_flags = avail_used_flags;
> >
> >         for (n = 0; n < total_sg; n++) {
> >                 if (i == err_idx)
> > --
> > 2.32.0.3.g01195cf9f
> >
>

  reply	other threads:[~2023-06-27  9:08 UTC|newest]

Thread overview: 91+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-02  9:21 [PATCH vhost v10 00/10] virtio core prepares for AF_XDP Xuan Zhuo
2023-06-02  9:21 ` Xuan Zhuo
2023-06-02  9:21 ` [PATCH vhost v10 01/10] virtio_ring: put mapping error check in vring_map_one_sg Xuan Zhuo
2023-06-02  9:21   ` Xuan Zhuo
2023-06-27  8:03   ` Jason Wang
2023-06-27  8:03     ` Jason Wang
2023-06-02  9:21 ` [PATCH vhost v10 02/10] virtio_ring: introduce virtqueue_set_premapped() Xuan Zhuo
2023-06-02  9:21   ` Xuan Zhuo
2023-06-27  8:03   ` Jason Wang
2023-06-27  8:03     ` Jason Wang
2023-06-27  8:50     ` Xuan Zhuo
2023-06-27  8:50       ` Xuan Zhuo
2023-06-27 14:56       ` Michael S. Tsirkin
2023-06-27 14:56         ` Michael S. Tsirkin
2023-06-28  1:34         ` Xuan Zhuo
2023-06-28  1:34           ` Xuan Zhuo
2023-06-02  9:21 ` [PATCH vhost v10 03/10] virtio_ring: split: support add premapped buf Xuan Zhuo
2023-06-02  9:21   ` Xuan Zhuo
2023-06-27  8:03   ` Jason Wang
2023-06-27  8:03     ` Jason Wang
2023-06-27  9:01     ` Xuan Zhuo
2023-06-27  9:01       ` Xuan Zhuo
2023-06-28  4:07       ` Jason Wang
2023-06-28  6:00         ` Xuan Zhuo
2023-06-28  6:51           ` Jason Wang
2023-06-02  9:22 ` [PATCH vhost v10 04/10] virtio_ring: packed: " Xuan Zhuo
2023-06-02  9:22   ` Xuan Zhuo
2023-06-27  8:03   ` Jason Wang
2023-06-27  8:03     ` Jason Wang
2023-06-27  9:05     ` Xuan Zhuo [this message]
2023-06-27  9:05       ` Xuan Zhuo
2023-06-02  9:22 ` [PATCH vhost v10 05/10] virtio_ring: split-detach: support return dma info to driver Xuan Zhuo
2023-06-02  9:22   ` Xuan Zhuo
2023-06-22 19:36   ` Michael S. Tsirkin
2023-06-22 19:36     ` Michael S. Tsirkin
2023-06-25  2:10     ` Xuan Zhuo
2023-06-25  2:10       ` Xuan Zhuo
2023-06-27  8:03   ` Jason Wang
2023-06-27  8:03     ` Jason Wang
2023-06-27  9:21     ` Xuan Zhuo
2023-06-27  9:21       ` Xuan Zhuo
2023-06-02  9:22 ` [PATCH vhost v10 06/10] virtio_ring: packed-detach: " Xuan Zhuo
2023-06-02  9:22   ` Xuan Zhuo
2023-06-02 11:40   ` Michael S. Tsirkin
2023-06-02 11:40     ` Michael S. Tsirkin
2023-06-02  9:22 ` [PATCH vhost v10 07/10] virtio_ring: introduce helpers for premapped Xuan Zhuo
2023-06-02  9:22   ` Xuan Zhuo
2023-06-04 13:45   ` Michael S. Tsirkin
2023-06-04 13:45     ` Michael S. Tsirkin
2023-06-05  2:06     ` Xuan Zhuo
2023-06-05  2:06       ` Xuan Zhuo
2023-06-05  5:38       ` Michael S. Tsirkin
2023-06-05  5:38         ` Michael S. Tsirkin
2023-06-06  2:01         ` Xuan Zhuo
2023-06-06  2:01           ` Xuan Zhuo
2023-06-22 19:29   ` Michael S. Tsirkin
2023-06-22 19:29     ` Michael S. Tsirkin
2023-06-02  9:22 ` [PATCH vhost v10 08/10] virtio_ring: introduce virtqueue_dma_dev() Xuan Zhuo
2023-06-02  9:22   ` Xuan Zhuo
2023-06-02  9:22 ` [PATCH vhost v10 09/10] virtio_ring: introduce virtqueue_add_sg() Xuan Zhuo
2023-06-02  9:22   ` Xuan Zhuo
2023-06-02  9:22 ` [PATCH vhost v10 10/10] virtio_net: support dma premapped Xuan Zhuo
2023-06-02  9:22   ` Xuan Zhuo
2023-06-03  6:31   ` Jakub Kicinski
2023-06-05  2:10     ` Xuan Zhuo
2023-06-05  2:10       ` Xuan Zhuo
2023-06-05  5:44       ` Michael S. Tsirkin
2023-06-05  5:44         ` Michael S. Tsirkin
2023-06-06  2:11         ` Xuan Zhuo
2023-06-06  2:11           ` Xuan Zhuo
2023-06-22 12:15   ` Michael S. Tsirkin
2023-06-22 12:15     ` Michael S. Tsirkin
2023-06-25  2:43     ` Xuan Zhuo
2023-06-25  2:43       ` Xuan Zhuo
2023-06-27  8:03   ` Jason Wang
2023-06-27  8:03     ` Jason Wang
2023-06-27  9:23     ` Xuan Zhuo
2023-06-27  9:23       ` Xuan Zhuo
2023-06-03  6:29 ` [PATCH vhost v10 00/10] virtio core prepares for AF_XDP Jakub Kicinski
2023-06-05  1:58   ` Xuan Zhuo
2023-06-05  1:58     ` Xuan Zhuo
2023-06-07 14:05     ` Christoph Hellwig
2023-06-07 14:05       ` Christoph Hellwig
2023-06-07 20:15       ` Michael S. Tsirkin
2023-06-07 20:15         ` Michael S. Tsirkin
2023-06-21  6:42 ` Xuan Zhuo
2023-06-21  6:42   ` Xuan Zhuo
2023-06-25  7:19   ` Jason Wang
2023-06-25  7:19     ` Jason Wang
2023-06-22 19:38 ` Michael S. Tsirkin
2023-06-22 19:38   ` 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=1687856738.178093-6-xuanzhuo@linux.alibaba.com \
    --to=xuanzhuo@linux.alibaba.com \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=hawk@kernel.org \
    --cc=jasowang@redhat.com \
    --cc=john.fastabend@gmail.com \
    --cc=kuba@kernel.org \
    --cc=mst@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=virtualization@lists.linux-foundation.org \
    /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.