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 14/21] virtio_net: xsk: tx: virtnet_free_old_xmit() distinguishes xsk buffer
Date: Fri, 10 Nov 2023 00:32:50 -0500 [thread overview]
Message-ID: <20231110003159-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <1699580672.387567-1-xuanzhuo@linux.alibaba.com>
On Fri, Nov 10, 2023 at 09:44:32AM +0800, Xuan Zhuo wrote:
> On Thu, 9 Nov 2023 06:59:48 -0500, "Michael S. Tsirkin" <mst@redhat.com> wrote:
> > On Thu, Nov 09, 2023 at 07:16:08PM +0800, Xuan Zhuo wrote:
> > > On Thu, 9 Nov 2023 06:11:49 -0500, "Michael S. Tsirkin" <mst@redhat.com> wrote:
> > > > On Tue, Nov 07, 2023 at 11:12:20AM +0800, Xuan Zhuo wrote:
> > > > > virtnet_free_old_xmit distinguishes three type ptr(skb, xdp frame, xsk
> > > > > buffer) by the last bits of the pointer.
> > > > >
> > > > > Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
> > > > > ---
> > > > > drivers/net/virtio/virtio_net.h | 18 ++++++++++++++++--
> > > > > drivers/net/virtio/xsk.h | 5 +++++
> > > > > 2 files changed, 21 insertions(+), 2 deletions(-)
> > > > >
> > > > > diff --git a/drivers/net/virtio/virtio_net.h b/drivers/net/virtio/virtio_net.h
> > > > > index a431a2c1ee47..a13d6d301fdb 100644
> > > > > --- a/drivers/net/virtio/virtio_net.h
> > > > > +++ b/drivers/net/virtio/virtio_net.h
> > > > > @@ -225,6 +225,11 @@ struct virtnet_info {
> > > > > struct failover *failover;
> > > > > };
> > > > >
> > > > > +static inline bool virtnet_is_skb_ptr(void *ptr)
> > > > > +{
> > > > > + return !((unsigned long)ptr & VIRTIO_XMIT_DATA_MASK);
> > > > > +}
> > > > > +
> > > > > static inline bool virtnet_is_xdp_frame(void *ptr)
> > > > > {
> > > > > return (unsigned long)ptr & VIRTIO_XDP_FLAG;
> > > > > @@ -235,6 +240,8 @@ static inline struct xdp_frame *virtnet_ptr_to_xdp(void *ptr)
> > > > > return (struct xdp_frame *)((unsigned long)ptr & ~VIRTIO_XDP_FLAG);
> > > > > }
> > > > >
> > > > > +static inline u32 virtnet_ptr_to_xsk(void *ptr);
> > > > > +
> > > >
> > > > I don't understand why you need this here.
> > >
> > > The below function virtnet_free_old_xmit needs this.
> > >
> > > Thanks.
> >
> > I don't understand why is virtnet_free_old_xmit inline, either.
>
> That is in the header file.
>
It does not belong there.
> >
> > > >
> > > >
> > > > > static inline void *virtnet_sq_unmap(struct virtnet_sq *sq, void *data)
> > > > > {
> > > > > struct virtnet_sq_dma *next, *head;
> > > > > @@ -261,11 +268,12 @@ static inline void *virtnet_sq_unmap(struct virtnet_sq *sq, void *data)
> > > > > static inline void virtnet_free_old_xmit(struct virtnet_sq *sq, bool in_napi,
> > > > > u64 *bytes, u64 *packets)
> > > > > {
> > > > > + unsigned int xsknum = 0;
> > > > > unsigned int len;
> > > > > void *ptr;
> > > > >
> > > > > while ((ptr = virtqueue_get_buf(sq->vq, &len)) != NULL) {
> > > > > - if (!virtnet_is_xdp_frame(ptr)) {
> > > > > + if (virtnet_is_skb_ptr(ptr)) {
> > > > > struct sk_buff *skb;
> > > > >
> > > > > if (sq->do_dma)
> > > > > @@ -277,7 +285,7 @@ static inline void virtnet_free_old_xmit(struct virtnet_sq *sq, bool in_napi,
> > > > >
> > > > > *bytes += skb->len;
> > > > > napi_consume_skb(skb, in_napi);
> > > > > - } else {
> > > > > + } else if (virtnet_is_xdp_frame(ptr)) {
> > > > > struct xdp_frame *frame;
> > > > >
> > > > > if (sq->do_dma)
> > > > > @@ -287,9 +295,15 @@ static inline void virtnet_free_old_xmit(struct virtnet_sq *sq, bool in_napi,
> > > > >
> > > > > *bytes += xdp_get_frame_len(frame);
> > > > > xdp_return_frame(frame);
> > > > > + } else {
> > > > > + *bytes += virtnet_ptr_to_xsk(ptr);
> > > > > + ++xsknum;
> > > > > }
> > > > > (*packets)++;
> > > > > }
> > > > > +
> > > > > + if (xsknum)
> > > > > + xsk_tx_completed(sq->xsk.pool, xsknum);
> > > > > }
> > > > >
> > > > > static inline bool virtnet_is_xdp_raw_buffer_queue(struct virtnet_info *vi, int q)
> > > > > diff --git a/drivers/net/virtio/xsk.h b/drivers/net/virtio/xsk.h
> > > > > index 1bd19dcda649..7ebc9bda7aee 100644
> > > > > --- a/drivers/net/virtio/xsk.h
> > > > > +++ b/drivers/net/virtio/xsk.h
> > > > > @@ -14,6 +14,11 @@ static inline void *virtnet_xsk_to_ptr(u32 len)
> > > > > return (void *)(p | VIRTIO_XSK_FLAG);
> > > > > }
> > > > >
> > > > > +static inline u32 virtnet_ptr_to_xsk(void *ptr)
> > > > > +{
> > > > > + return ((unsigned long)ptr) >> VIRTIO_XSK_FLAG_OFFSET;
> > > > > +}
> > > > > +
> > > > > int virtnet_xsk_pool_setup(struct net_device *dev, struct netdev_bpf *xdp);
> > > > > bool virtnet_xsk_xmit(struct virtnet_sq *sq, struct xsk_buff_pool *pool,
> > > > > int budget);
> > > > > --
> > > > > 2.32.0.3.g01195cf9f
> > > >
> > > >
> >
next prev parent reply other threads:[~2023-11-10 6:11 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 [this message]
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
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=20231110003159-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.