From: "Michael S. Tsirkin" <mst@redhat.com>
To: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Cc: netdev@vger.kernel.org, Jason Wang <jasowang@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>,
virtualization@lists.linux-foundation.org, bpf@vger.kernel.org
Subject: Re: [PATCH net-next v2 05/14] virtio_net: introduce xdp res enums
Date: Fri, 21 Apr 2023 07:54:11 -0400 [thread overview]
Message-ID: <20230421075119-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <1682061840.4864874-1-xuanzhuo@linux.alibaba.com>
On Fri, Apr 21, 2023 at 03:24:00PM +0800, Xuan Zhuo wrote:
> On Fri, 21 Apr 2023 03:00:15 -0400, "Michael S. Tsirkin" <mst@redhat.com> wrote:
> > On Tue, Apr 18, 2023 at 02:53:18PM +0800, Xuan Zhuo wrote:
> > > virtnet_xdp_handler() is to process all the logic related to XDP. The
> > > caller only needs to care about how to deal with the buf. So this commit
> > > introduces new enums:
> > >
> > > 1. VIRTNET_XDP_RES_PASS: make skb by the buf
> > > 2. VIRTNET_XDP_RES_DROP: xdp return drop action or some error, caller
> > > should release the buf
> > > 3. VIRTNET_XDP_RES_CONSUMED: xdp consumed the buf, the caller doesnot to
> > > do anything
> > >
> > > Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
> >
> >
> > I am not excited about using virtio specific enums then translating
> > to standard ones.
>
>
> My fault, my expression is not very complete.
>
> This is not a replacement, but just want to say, there are only three cases of
> virtnet_xdp_handler. Caller only needs to handle this three cases. Instead
> of paying attention to the detailed return results of XDP.
>
> In addition, virtnet_xdp_handler returns XDP_TX, but in fact, the work of XDP_TX
> is already done in Virtnet_xdp_handler. Caller does not need to do anything for
> XDP_TX, giving people a feeling, XDP_TX does not need to be processed. I think
> it is not good.
>
> Thanks.
I don't really get it, sorry. If it's possible to stick to
XDP return codes, that is preferable.
>
>
> >
> > > ---
> > > drivers/net/virtio_net.c | 42 ++++++++++++++++++++++++++--------------
> > > 1 file changed, 27 insertions(+), 15 deletions(-)
> > >
> > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
> > > index 0fa64c314ea7..4dfdc211d355 100644
> > > --- a/drivers/net/virtio_net.c
> > > +++ b/drivers/net/virtio_net.c
> > > @@ -301,6 +301,15 @@ struct padded_vnet_hdr {
> > > char padding[12];
> > > };
> > >
> > > +enum {
> > > + /* xdp pass */
> > > + VIRTNET_XDP_RES_PASS,
> > > + /* drop packet. the caller needs to release the page. */
> > > + VIRTNET_XDP_RES_DROP,
> > > + /* packet is consumed by xdp. the caller needs to do nothing. */
> > > + VIRTNET_XDP_RES_CONSUMED,
> > > +};
> > > +
> > > static void virtnet_rq_free_unused_buf(struct virtqueue *vq, void *buf);
> > > static void virtnet_sq_free_unused_buf(struct virtqueue *vq, void *buf);
> > >
> > > @@ -803,14 +812,14 @@ static int virtnet_xdp_handler(struct bpf_prog *xdp_prog, struct xdp_buff *xdp,
> > >
> > > switch (act) {
> > > case XDP_PASS:
> > > - return act;
> > > + return VIRTNET_XDP_RES_PASS;
> > >
> > > case XDP_TX:
> > > stats->xdp_tx++;
> > > xdpf = xdp_convert_buff_to_frame(xdp);
> > > if (unlikely(!xdpf)) {
> > > netdev_dbg(dev, "convert buff to frame failed for xdp\n");
> > > - return XDP_DROP;
> > > + return VIRTNET_XDP_RES_DROP;
> > > }
> > >
> > > err = virtnet_xdp_xmit(dev, 1, &xdpf, 0);
> > > @@ -818,19 +827,20 @@ static int virtnet_xdp_handler(struct bpf_prog *xdp_prog, struct xdp_buff *xdp,
> > > xdp_return_frame_rx_napi(xdpf);
> > > } else if (unlikely(err < 0)) {
> > > trace_xdp_exception(dev, xdp_prog, act);
> > > - return XDP_DROP;
> > > + return VIRTNET_XDP_RES_DROP;
> > > }
> > > +
> > > *xdp_xmit |= VIRTIO_XDP_TX;
> > > - return act;
> > > + return VIRTNET_XDP_RES_CONSUMED;
> > >
> > > case XDP_REDIRECT:
> > > stats->xdp_redirects++;
> > > err = xdp_do_redirect(dev, xdp, xdp_prog);
> > > if (err)
> > > - return XDP_DROP;
> > > + return VIRTNET_XDP_RES_DROP;
> > >
> > > *xdp_xmit |= VIRTIO_XDP_REDIR;
> > > - return act;
> > > + return VIRTNET_XDP_RES_CONSUMED;
> > >
> > > default:
> > > bpf_warn_invalid_xdp_action(dev, xdp_prog, act);
> > > @@ -839,7 +849,7 @@ static int virtnet_xdp_handler(struct bpf_prog *xdp_prog, struct xdp_buff *xdp,
> > > trace_xdp_exception(dev, xdp_prog, act);
> > > fallthrough;
> > > case XDP_DROP:
> > > - return XDP_DROP;
> > > + return VIRTNET_XDP_RES_DROP;
> > > }
> > > }
> > >
> > > @@ -987,17 +997,18 @@ static struct sk_buff *receive_small(struct net_device *dev,
> > > act = virtnet_xdp_handler(xdp_prog, &xdp, dev, xdp_xmit, stats);
> > >
> > > switch (act) {
> > > - case XDP_PASS:
> > > + case VIRTNET_XDP_RES_PASS:
> > > /* Recalculate length in case bpf program changed it */
> > > delta = orig_data - xdp.data;
> > > len = xdp.data_end - xdp.data;
> > > metasize = xdp.data - xdp.data_meta;
> > > break;
> > > - case XDP_TX:
> > > - case XDP_REDIRECT:
> > > +
> > > + case VIRTNET_XDP_RES_CONSUMED:
> > > rcu_read_unlock();
> > > goto xdp_xmit;
> > > - default:
> > > +
> > > + case VIRTNET_XDP_RES_DROP:
> > > goto err_xdp;
> > > }
> > > }
> > > @@ -1324,18 +1335,19 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
> > > act = virtnet_xdp_handler(xdp_prog, &xdp, dev, xdp_xmit, stats);
> > >
> > > switch (act) {
> > > - case XDP_PASS:
> > > + case VIRTNET_XDP_RES_PASS:
> > > head_skb = build_skb_from_xdp_buff(dev, vi, &xdp, xdp_frags_truesz);
> > > if (unlikely(!head_skb))
> > > goto err_xdp_frags;
> > >
> > > rcu_read_unlock();
> > > return head_skb;
> > > - case XDP_TX:
> > > - case XDP_REDIRECT:
> > > +
> > > + case VIRTNET_XDP_RES_CONSUMED:
> > > rcu_read_unlock();
> > > goto xdp_xmit;
> > > - default:
> > > +
> > > + case VIRTNET_XDP_RES_DROP:
> > > break;
> > > }
> > > err_xdp_frags:
> > > --
> > > 2.32.0.3.g01195cf9f
> >
WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Cc: Jesper Dangaard Brouer <hawk@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
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 net-next v2 05/14] virtio_net: introduce xdp res enums
Date: Fri, 21 Apr 2023 07:54:11 -0400 [thread overview]
Message-ID: <20230421075119-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <1682061840.4864874-1-xuanzhuo@linux.alibaba.com>
On Fri, Apr 21, 2023 at 03:24:00PM +0800, Xuan Zhuo wrote:
> On Fri, 21 Apr 2023 03:00:15 -0400, "Michael S. Tsirkin" <mst@redhat.com> wrote:
> > On Tue, Apr 18, 2023 at 02:53:18PM +0800, Xuan Zhuo wrote:
> > > virtnet_xdp_handler() is to process all the logic related to XDP. The
> > > caller only needs to care about how to deal with the buf. So this commit
> > > introduces new enums:
> > >
> > > 1. VIRTNET_XDP_RES_PASS: make skb by the buf
> > > 2. VIRTNET_XDP_RES_DROP: xdp return drop action or some error, caller
> > > should release the buf
> > > 3. VIRTNET_XDP_RES_CONSUMED: xdp consumed the buf, the caller doesnot to
> > > do anything
> > >
> > > Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
> >
> >
> > I am not excited about using virtio specific enums then translating
> > to standard ones.
>
>
> My fault, my expression is not very complete.
>
> This is not a replacement, but just want to say, there are only three cases of
> virtnet_xdp_handler. Caller only needs to handle this three cases. Instead
> of paying attention to the detailed return results of XDP.
>
> In addition, virtnet_xdp_handler returns XDP_TX, but in fact, the work of XDP_TX
> is already done in Virtnet_xdp_handler. Caller does not need to do anything for
> XDP_TX, giving people a feeling, XDP_TX does not need to be processed. I think
> it is not good.
>
> Thanks.
I don't really get it, sorry. If it's possible to stick to
XDP return codes, that is preferable.
>
>
> >
> > > ---
> > > drivers/net/virtio_net.c | 42 ++++++++++++++++++++++++++--------------
> > > 1 file changed, 27 insertions(+), 15 deletions(-)
> > >
> > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
> > > index 0fa64c314ea7..4dfdc211d355 100644
> > > --- a/drivers/net/virtio_net.c
> > > +++ b/drivers/net/virtio_net.c
> > > @@ -301,6 +301,15 @@ struct padded_vnet_hdr {
> > > char padding[12];
> > > };
> > >
> > > +enum {
> > > + /* xdp pass */
> > > + VIRTNET_XDP_RES_PASS,
> > > + /* drop packet. the caller needs to release the page. */
> > > + VIRTNET_XDP_RES_DROP,
> > > + /* packet is consumed by xdp. the caller needs to do nothing. */
> > > + VIRTNET_XDP_RES_CONSUMED,
> > > +};
> > > +
> > > static void virtnet_rq_free_unused_buf(struct virtqueue *vq, void *buf);
> > > static void virtnet_sq_free_unused_buf(struct virtqueue *vq, void *buf);
> > >
> > > @@ -803,14 +812,14 @@ static int virtnet_xdp_handler(struct bpf_prog *xdp_prog, struct xdp_buff *xdp,
> > >
> > > switch (act) {
> > > case XDP_PASS:
> > > - return act;
> > > + return VIRTNET_XDP_RES_PASS;
> > >
> > > case XDP_TX:
> > > stats->xdp_tx++;
> > > xdpf = xdp_convert_buff_to_frame(xdp);
> > > if (unlikely(!xdpf)) {
> > > netdev_dbg(dev, "convert buff to frame failed for xdp\n");
> > > - return XDP_DROP;
> > > + return VIRTNET_XDP_RES_DROP;
> > > }
> > >
> > > err = virtnet_xdp_xmit(dev, 1, &xdpf, 0);
> > > @@ -818,19 +827,20 @@ static int virtnet_xdp_handler(struct bpf_prog *xdp_prog, struct xdp_buff *xdp,
> > > xdp_return_frame_rx_napi(xdpf);
> > > } else if (unlikely(err < 0)) {
> > > trace_xdp_exception(dev, xdp_prog, act);
> > > - return XDP_DROP;
> > > + return VIRTNET_XDP_RES_DROP;
> > > }
> > > +
> > > *xdp_xmit |= VIRTIO_XDP_TX;
> > > - return act;
> > > + return VIRTNET_XDP_RES_CONSUMED;
> > >
> > > case XDP_REDIRECT:
> > > stats->xdp_redirects++;
> > > err = xdp_do_redirect(dev, xdp, xdp_prog);
> > > if (err)
> > > - return XDP_DROP;
> > > + return VIRTNET_XDP_RES_DROP;
> > >
> > > *xdp_xmit |= VIRTIO_XDP_REDIR;
> > > - return act;
> > > + return VIRTNET_XDP_RES_CONSUMED;
> > >
> > > default:
> > > bpf_warn_invalid_xdp_action(dev, xdp_prog, act);
> > > @@ -839,7 +849,7 @@ static int virtnet_xdp_handler(struct bpf_prog *xdp_prog, struct xdp_buff *xdp,
> > > trace_xdp_exception(dev, xdp_prog, act);
> > > fallthrough;
> > > case XDP_DROP:
> > > - return XDP_DROP;
> > > + return VIRTNET_XDP_RES_DROP;
> > > }
> > > }
> > >
> > > @@ -987,17 +997,18 @@ static struct sk_buff *receive_small(struct net_device *dev,
> > > act = virtnet_xdp_handler(xdp_prog, &xdp, dev, xdp_xmit, stats);
> > >
> > > switch (act) {
> > > - case XDP_PASS:
> > > + case VIRTNET_XDP_RES_PASS:
> > > /* Recalculate length in case bpf program changed it */
> > > delta = orig_data - xdp.data;
> > > len = xdp.data_end - xdp.data;
> > > metasize = xdp.data - xdp.data_meta;
> > > break;
> > > - case XDP_TX:
> > > - case XDP_REDIRECT:
> > > +
> > > + case VIRTNET_XDP_RES_CONSUMED:
> > > rcu_read_unlock();
> > > goto xdp_xmit;
> > > - default:
> > > +
> > > + case VIRTNET_XDP_RES_DROP:
> > > goto err_xdp;
> > > }
> > > }
> > > @@ -1324,18 +1335,19 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
> > > act = virtnet_xdp_handler(xdp_prog, &xdp, dev, xdp_xmit, stats);
> > >
> > > switch (act) {
> > > - case XDP_PASS:
> > > + case VIRTNET_XDP_RES_PASS:
> > > head_skb = build_skb_from_xdp_buff(dev, vi, &xdp, xdp_frags_truesz);
> > > if (unlikely(!head_skb))
> > > goto err_xdp_frags;
> > >
> > > rcu_read_unlock();
> > > return head_skb;
> > > - case XDP_TX:
> > > - case XDP_REDIRECT:
> > > +
> > > + case VIRTNET_XDP_RES_CONSUMED:
> > > rcu_read_unlock();
> > > goto xdp_xmit;
> > > - default:
> > > +
> > > + case VIRTNET_XDP_RES_DROP:
> > > break;
> > > }
> > > err_xdp_frags:
> > > --
> > > 2.32.0.3.g01195cf9f
> >
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
next prev parent reply other threads:[~2023-04-21 11:55 UTC|newest]
Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-18 6:53 [PATCH net-next v2 00/14] virtio_net: refactor xdp codes Xuan Zhuo
2023-04-18 6:53 ` Xuan Zhuo
2023-04-18 6:53 ` [PATCH net-next v2 01/14] virtio_net: mergeable xdp: put old page immediately Xuan Zhuo
2023-04-18 6:53 ` Xuan Zhuo
2023-04-20 5:58 ` Jason Wang
2023-04-20 5:58 ` Jason Wang
2023-04-18 6:53 ` [PATCH net-next v2 02/14] virtio_net: introduce mergeable_xdp_prepare() Xuan Zhuo
2023-04-18 6:53 ` Xuan Zhuo
2023-04-20 5:58 ` Jason Wang
2023-04-20 5:58 ` Jason Wang
2023-04-18 6:53 ` [PATCH net-next v2 03/14] virtio_net: optimize mergeable_xdp_prepare() Xuan Zhuo
2023-04-18 6:53 ` Xuan Zhuo
2023-04-20 5:59 ` Jason Wang
2023-04-20 5:59 ` Jason Wang
2023-04-18 6:53 ` [PATCH net-next v2 04/14] virtio_net: introduce virtnet_xdp_handler() to seprate the logic of run xdp Xuan Zhuo
2023-04-18 6:53 ` Xuan Zhuo
2023-04-20 5:59 ` Jason Wang
2023-04-20 5:59 ` Jason Wang
2023-04-18 6:53 ` [PATCH net-next v2 05/14] virtio_net: introduce xdp res enums Xuan Zhuo
2023-04-18 6:53 ` Xuan Zhuo
2023-04-20 5:59 ` Jason Wang
2023-04-20 5:59 ` Jason Wang
2023-04-21 7:00 ` Michael S. Tsirkin
2023-04-21 7:00 ` Michael S. Tsirkin
2023-04-21 7:24 ` Xuan Zhuo
2023-04-21 7:24 ` Xuan Zhuo
2023-04-21 11:54 ` Michael S. Tsirkin [this message]
2023-04-21 11:54 ` Michael S. Tsirkin
2023-04-23 1:57 ` Xuan Zhuo
2023-04-23 1:57 ` Xuan Zhuo
2023-04-23 5:28 ` Jason Wang
2023-04-23 5:28 ` Jason Wang
2023-04-23 6:27 ` Xuan Zhuo
2023-04-23 6:27 ` Xuan Zhuo
2023-04-18 6:53 ` [PATCH net-next v2 06/14] virtio_net: separate the logic of freeing xdp shinfo Xuan Zhuo
2023-04-18 6:53 ` Xuan Zhuo
2023-04-18 6:53 ` [PATCH net-next v2 07/14] virtio_net: separate the logic of freeing the rest mergeable buf Xuan Zhuo
2023-04-18 6:53 ` Xuan Zhuo
2023-04-18 6:53 ` [PATCH net-next v2 08/14] virtio_net: auto release xdp shinfo Xuan Zhuo
2023-04-18 6:53 ` Xuan Zhuo
2023-04-20 5:59 ` Jason Wang
2023-04-20 5:59 ` Jason Wang
2023-04-20 9:10 ` Xuan Zhuo
2023-04-20 9:10 ` Xuan Zhuo
2023-04-18 6:53 ` [PATCH net-next v2 09/14] virtio_net: introduce receive_mergeable_xdp() Xuan Zhuo
2023-04-18 6:53 ` Xuan Zhuo
2023-04-20 6:01 ` Jason Wang
2023-04-20 6:01 ` Jason Wang
2023-04-18 6:53 ` [PATCH net-next v2 10/14] virtio_net: merge: remove skip_xdp Xuan Zhuo
2023-04-18 6:53 ` Xuan Zhuo
2023-04-20 6:10 ` Jason Wang
2023-04-20 6:10 ` Jason Wang
2023-04-18 6:53 ` [PATCH net-next v2 11/14] virtio_net: introduce receive_small_xdp() Xuan Zhuo
2023-04-18 6:53 ` Xuan Zhuo
2023-04-20 6:23 ` Jason Wang
2023-04-20 6:23 ` Jason Wang
2023-04-18 6:53 ` [PATCH net-next v2 12/14] virtio_net: small: optimize code Xuan Zhuo
2023-04-18 6:53 ` Xuan Zhuo
2023-04-20 6:28 ` Jason Wang
2023-04-20 6:28 ` Jason Wang
2023-04-18 6:53 ` [PATCH net-next v2 13/14] " Xuan Zhuo
2023-04-18 6:53 ` Xuan Zhuo
2023-04-20 6:32 ` Jason Wang
2023-04-20 6:32 ` Jason Wang
2023-04-20 8:56 ` Xuan Zhuo
2023-04-20 8:56 ` Xuan Zhuo
2023-04-18 6:53 ` [PATCH net-next v2 14/14] virtio_net: small: remove skip_xdp Xuan Zhuo
2023-04-18 6:53 ` Xuan Zhuo
2023-04-18 11:49 ` [PATCH net-next v2 00/14] virtio_net: refactor xdp codes Michael S. Tsirkin
2023-04-18 11:49 ` 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=20230421075119-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.