All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Cc: netdev@vger.kernel.org, "David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Jason Wang <jasowang@redhat.com>,
	Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Jesper Dangaard Brouer <hawk@kernel.org>,
	John Fastabend <john.fastabend@gmail.com>,
	virtualization@lists.linux-foundation.org, bpf@vger.kernel.org
Subject: Re: [PATCH net-next v2 17/21] virtio_net: xsk: rx: skip dma unmap when rq is bind with AF_XDP
Date: Fri, 10 Nov 2023 00:33:27 -0500	[thread overview]
Message-ID: <20231110003305-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <1699580836.3647869-2-xuanzhuo@linux.alibaba.com>

On Fri, Nov 10, 2023 at 09:47:16AM +0800, Xuan Zhuo wrote:
> On Thu, 9 Nov 2023 07:00:51 -0500, "Michael S. Tsirkin" <mst@redhat.com> wrote:
> > On Thu, Nov 09, 2023 at 07:10:02PM +0800, Xuan Zhuo wrote:
> > > On Thu, 9 Nov 2023 03:15:03 -0500, "Michael S. Tsirkin" <mst@redhat.com> wrote:
> > > > On Tue, Nov 07, 2023 at 11:12:23AM +0800, Xuan Zhuo wrote:
> > > > > When rq is bound with AF_XDP, the buffer dma is managed
> > > > > by the AF_XDP APIs. So the buffer got from the virtio core should
> > > > > skip the dma unmap operation.
> > > > >
> > > > > Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
> > > >
> > > >
> > > > I don't get it - is this like a bugfix?
> > >
> > > I want focus on this. So let it as an independent commit.
> > >
> > > > And why do we need our own flag and checks?
> > > > Doesn't virtio core DTRT?
> > >
> > >
> > > struct vring_virtqueue {
> > > 	[....]
> > >
> > > 	/* Do DMA mapping by driver */
> > > 	bool premapped;
> > >
> > > We can not.
> > >
> > > So I add own flag.
> > >
> > > Thanks.
> >
> > Still don't get it. Why not check the premapped flag?
> 
> premapped is in the struct vring_virtqueue.
> 
> We can not access it from the driver.


If it's useful, move it.


> 
> >
> > >
> > > >
> > > > > ---
> > > > >  drivers/net/virtio/main.c       | 8 +++++---
> > > > >  drivers/net/virtio/virtio_net.h | 3 +++
> > > > >  drivers/net/virtio/xsk.c        | 1 +
> > > > >  3 files changed, 9 insertions(+), 3 deletions(-)
> > > > >
> > > > > diff --git a/drivers/net/virtio/main.c b/drivers/net/virtio/main.c
> > > > > index 15943a22e17d..a318b2533b94 100644
> > > > > --- a/drivers/net/virtio/main.c
> > > > > +++ b/drivers/net/virtio/main.c
> > > > > @@ -430,7 +430,7 @@ static void *virtnet_rq_get_buf(struct virtnet_rq *rq, u32 *len, void **ctx)
> > > > >  	void *buf;
> > > > >
> > > > >  	buf = virtqueue_get_buf_ctx(rq->vq, len, ctx);
> > > > > -	if (buf && rq->do_dma)
> > > > > +	if (buf && rq->do_dma_unmap)
> > > > >  		virtnet_rq_unmap(rq, buf, *len);
> > > > >
> > > > >  	return buf;
> > > > > @@ -561,8 +561,10 @@ static void virtnet_set_premapped(struct virtnet_info *vi)
> > > > >
> > > > >  		/* disable for big mode */
> > > > >  		if (vi->mergeable_rx_bufs || !vi->big_packets) {
> > > > > -			if (!virtqueue_set_dma_premapped(vi->rq[i].vq))
> > > > > +			if (!virtqueue_set_dma_premapped(vi->rq[i].vq)) {
> > > > >  				vi->rq[i].do_dma = true;
> > > > > +				vi->rq[i].do_dma_unmap = true;
> > > > > +			}
> > > > >  		}
> > > > >  	}
> > > > >  }
> > > > > @@ -3944,7 +3946,7 @@ void virtnet_rq_free_unused_buf(struct virtqueue *vq, void *buf)
> > > > >
> > > > >  	rq = &vi->rq[i];
> > > > >
> > > > > -	if (rq->do_dma)
> > > > > +	if (rq->do_dma_unmap)
> > > > >  		virtnet_rq_unmap(rq, buf, 0);
> > > > >
> > > > >  	virtnet_rq_free_buf(vi, rq, buf);
> > > > > diff --git a/drivers/net/virtio/virtio_net.h b/drivers/net/virtio/virtio_net.h
> > > > > index 1242785e311e..2005d0cd22e2 100644
> > > > > --- a/drivers/net/virtio/virtio_net.h
> > > > > +++ b/drivers/net/virtio/virtio_net.h
> > > > > @@ -135,6 +135,9 @@ struct virtnet_rq {
> > > > >  	/* Do dma by self */
> > > > >  	bool do_dma;
> > > > >
> > > > > +	/* Do dma unmap after getting buf from virtio core. */
> > > > > +	bool do_dma_unmap;
> > > > > +
> > > > >  	struct {
> > > > >  		struct xsk_buff_pool *pool;
> > > > >
> > > > > diff --git a/drivers/net/virtio/xsk.c b/drivers/net/virtio/xsk.c
> > > > > index e737c3353212..b09c473c29fb 100644
> > > > > --- a/drivers/net/virtio/xsk.c
> > > > > +++ b/drivers/net/virtio/xsk.c
> > > > > @@ -210,6 +210,7 @@ static int virtnet_rq_bind_xsk_pool(struct virtnet_info *vi, struct virtnet_rq *
> > > > >  		xdp_rxq_info_unreg(&rq->xsk.xdp_rxq);
> > > > >
> > > > >  	rq->xsk.pool = pool;
> > > > > +	rq->do_dma_unmap = !pool;
> > > > >
> > > > >  	virtnet_rx_resume(vi, rq);
> > > > >
> > > > > --
> > > > > 2.32.0.3.g01195cf9f
> > > >
> > > >
> >
> >


  reply	other threads:[~2023-11-10  6:13 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-07  3:12 [PATCH net-next v2 00/21] virtio-net: support AF_XDP zero copy Xuan Zhuo
2023-11-07  3:12 ` Xuan Zhuo
2023-11-07  3:12 ` [PATCH net-next v2 01/21] virtio_net: rename free_old_xmit_skbs to free_old_xmit Xuan Zhuo
2023-11-07  3:12   ` Xuan Zhuo
2023-11-07  3:12 ` [PATCH net-next v2 02/21] virtio_net: unify the code for recycling the xmit ptr Xuan Zhuo
2023-11-07  3:12   ` Xuan Zhuo
2023-11-07  3:12 ` [PATCH net-next v2 03/21] virtio_net: independent directory Xuan Zhuo
2023-11-07  3:12   ` Xuan Zhuo
2023-11-07  3:12 ` [PATCH net-next v2 04/21] virtio_net: move core structures to virtio_net.h Xuan Zhuo
2023-11-07  3:12   ` Xuan Zhuo
2023-11-09  6:03   ` Jason Wang
2023-11-07  3:12 ` [PATCH net-next v2 05/21] virtio_net: add prefix virtnet to all struct inside virtio_net.h Xuan Zhuo
2023-11-07  3:12   ` Xuan Zhuo
2023-11-09  6:04   ` Jason Wang
2023-11-07  3:12 ` [PATCH net-next v2 06/21] virtio_net: separate virtnet_rx_resize() Xuan Zhuo
2023-11-07  3:12   ` Xuan Zhuo
2023-11-07  3:12 ` [PATCH net-next v2 07/21] virtio_net: separate virtnet_tx_resize() Xuan Zhuo
2023-11-07  3:12   ` Xuan Zhuo
2023-11-07  3:12 ` [PATCH net-next v2 08/21] virtio_net: sq support premapped mode Xuan Zhuo
2023-11-07  3:12   ` Xuan Zhuo
2023-11-09  6:37   ` Jason Wang
2023-11-09 10:58     ` Xuan Zhuo
2023-11-14  3:26       ` Jason Wang
2023-11-14  3:28         ` Xuan Zhuo
2023-11-14  3:55           ` Jason Wang
2023-11-14  3:57             ` Xuan Zhuo
2023-11-14  4:27               ` Jason Wang
2023-11-14  4:45                 ` Xuan Zhuo
2023-11-07  3:12 ` [PATCH net-next v2 09/21] virtio_net: xsk: bind/unbind xsk Xuan Zhuo
2023-11-07  3:12   ` Xuan Zhuo
2023-11-07  3:12 ` [PATCH net-next v2 10/21] virtio_net: xsk: prevent disable tx napi Xuan Zhuo
2023-11-07  3:12   ` Xuan Zhuo
2023-11-07  3:12 ` [PATCH net-next v2 11/21] virtio_net: move some api to header Xuan Zhuo
2023-11-07  3:12   ` Xuan Zhuo
2023-11-07  3:12 ` [PATCH net-next v2 12/21] virtio_net: xsk: tx: support tx Xuan Zhuo
2023-11-07  3:12   ` Xuan Zhuo
2023-11-09  8:09   ` Michael S. Tsirkin
2023-11-09 11:06     ` Xuan Zhuo
2023-11-09 11:58       ` Michael S. Tsirkin
2023-11-10  1:51         ` Xuan Zhuo
2023-11-07  3:12 ` [PATCH net-next v2 13/21] virtio_net: xsk: tx: support wakeup Xuan Zhuo
2023-11-07  3:12   ` Xuan Zhuo
2023-11-07  3:12 ` [PATCH net-next v2 14/21] virtio_net: xsk: tx: virtnet_free_old_xmit() distinguishes xsk buffer Xuan Zhuo
2023-11-07  3:12   ` Xuan Zhuo
2023-11-09 11:11   ` Michael S. Tsirkin
2023-11-09 11:16     ` Xuan Zhuo
2023-11-09 11:59       ` Michael S. Tsirkin
2023-11-10  1:44         ` Xuan Zhuo
2023-11-10  5:32           ` Michael S. Tsirkin
2023-11-10  5:50             ` Xuan Zhuo
2023-11-07  3:12 ` [PATCH net-next v2 15/21] virtio_net: xsk: tx: virtnet_sq_free_unused_buf() check " Xuan Zhuo
2023-11-07  3:12   ` Xuan Zhuo
2023-11-07  3:12 ` [PATCH net-next v2 16/21] virtio_net: xsk: rx: introduce add_recvbuf_xsk() Xuan Zhuo
2023-11-07  3:12   ` Xuan Zhuo
2023-11-09  8:12   ` Michael S. Tsirkin
2023-11-09 11:11     ` Xuan Zhuo
2023-11-09 16:26       ` Maciej Fijalkowski
2023-11-10  2:38         ` Xuan Zhuo
2023-11-13 16:00           ` Maciej Fijalkowski
2023-11-14  3:16             ` Xuan Zhuo
2023-11-10  3:04     ` Xuan Zhuo
2023-11-07  3:12 ` [PATCH net-next v2 17/21] virtio_net: xsk: rx: skip dma unmap when rq is bind with AF_XDP Xuan Zhuo
2023-11-07  3:12   ` Xuan Zhuo
2023-11-09  8:15   ` Michael S. Tsirkin
2023-11-09 11:10     ` Xuan Zhuo
2023-11-09 12:00       ` Michael S. Tsirkin
2023-11-10  1:47         ` Xuan Zhuo
2023-11-10  5:33           ` Michael S. Tsirkin [this message]
2023-11-10  5:51             ` Xuan Zhuo
2023-11-07  3:12 ` [PATCH net-next v2 18/21] virtio_net: xsk: rx: introduce receive_xsk() to recv xsk buffer Xuan Zhuo
2023-11-07  3:12   ` Xuan Zhuo
2023-11-13 16:11   ` Maciej Fijalkowski
2023-11-14  3:43     ` Xuan Zhuo
2023-11-07  3:12 ` [PATCH net-next v2 19/21] virtio_net: xsk: rx: virtnet_rq_free_unused_buf() check " Xuan Zhuo
2023-11-07  3:12   ` Xuan Zhuo
2023-11-07  3:12 ` [PATCH net-next v2 20/21] virtio_net: update tx timeout record Xuan Zhuo
2023-11-07  3:12   ` Xuan Zhuo
2023-11-07  3:12 ` [PATCH net-next v2 21/21] virtio_net: xdp_features add NETDEV_XDP_ACT_XSK_ZEROCOPY Xuan Zhuo
2023-11-07  3:12   ` Xuan Zhuo
2023-11-07 18:01 ` [PATCH net-next v2 00/21] virtio-net: support AF_XDP zero copy Jakub Kicinski
2023-11-08  5:49   ` Xuan Zhuo
2023-11-09  8:19 ` Michael S. Tsirkin
2023-11-09 10:37   ` Xuan Zhuo

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=20231110003305-mutt-send-email-mst@kernel.org \
    --to=mst@redhat.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=netdev@vger.kernel.org \
    --cc=pabeni@redhat.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.