Message ID | 20230423105736.56918-14-xuanzhuo@linux.alibaba.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | virtio_net: refactor xdp codes | expand |
Context | Check | Description |
---|---|---|
netdev/series_format | success | Posting correctly formatted |
netdev/tree_selection | success | Clearly marked for net-next |
netdev/fixes_present | success | Fixes tag not required for -next series |
netdev/header_inline | success | No static functions without inline keyword in header files |
netdev/build_32bit | success | Errors and warnings before: 8 this patch: 8 |
netdev/cc_maintainers | success | CCed 13 of 13 maintainers |
netdev/build_clang | fail | Errors and warnings before: 13 this patch: 13 |
netdev/verify_signedoff | success | Signed-off-by tag matches author and committer |
netdev/deprecated_api | success | None detected |
netdev/check_selftest | success | No net selftest shell script |
netdev/verify_fixes | success | No Fixes tag |
netdev/build_allmodconfig_warn | fail | Errors and warnings before: 14 this patch: 14 |
netdev/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 47 lines checked |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/source_inline | success | Was 0 now: 0 |
On Sun, Apr 23, 2023 at 6:58 PM Xuan Zhuo <xuanzhuo@linux.alibaba.com> wrote: > > now, the process of xdp is simple, we can remove the skip_xdp. I would say the reason why xdp is simple, I think it is because the skb build path is not shared between XDP and non-XDP case. Other than this Acked-by: Jason Wang <jasowang@redhat.com> Thanks > > Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> > --- > drivers/net/virtio_net.c | 26 ++++++++++++-------------- > 1 file changed, 12 insertions(+), 14 deletions(-) > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > index 601c0e7fc32b..d2973c8fa48c 100644 > --- a/drivers/net/virtio_net.c > +++ b/drivers/net/virtio_net.c > @@ -1028,13 +1028,12 @@ static struct sk_buff *receive_small(struct net_device *dev, > unsigned int *xdp_xmit, > struct virtnet_rq_stats *stats) > { > - struct sk_buff *skb; > - struct bpf_prog *xdp_prog; > unsigned int xdp_headroom = (unsigned long)ctx; > struct page *page = virt_to_head_page(buf); > unsigned int header_offset; > unsigned int headroom; > unsigned int buflen; > + struct sk_buff *skb; > > len -= vi->hdr_len; > stats->bytes += len; > @@ -1046,22 +1045,21 @@ static struct sk_buff *receive_small(struct net_device *dev, > goto err; > } > > - if (likely(!vi->xdp_enabled)) { > - xdp_prog = NULL; > - goto skip_xdp; > - } > + if (unlikely(vi->xdp_enabled)) { > + struct bpf_prog *xdp_prog; > > - rcu_read_lock(); > - xdp_prog = rcu_dereference(rq->xdp_prog); > - if (xdp_prog) { > - skb = receive_small_xdp(dev, vi, rq, xdp_prog, buf, xdp_headroom, > - len, xdp_xmit, stats); > + rcu_read_lock(); > + xdp_prog = rcu_dereference(rq->xdp_prog); > + if (xdp_prog) { > + skb = receive_small_xdp(dev, vi, rq, xdp_prog, buf, > + xdp_headroom, len, xdp_xmit, > + stats); > + rcu_read_unlock(); > + return skb; > + } > rcu_read_unlock(); > - return skb; > } > - rcu_read_unlock(); > > -skip_xdp: > header_offset = VIRTNET_RX_PAD + xdp_headroom; > headroom = vi->hdr_len + header_offset; > buflen = SKB_DATA_ALIGN(GOOD_PACKET_LEN + headroom) + > -- > 2.32.0.3.g01195cf9f >
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 601c0e7fc32b..d2973c8fa48c 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -1028,13 +1028,12 @@ static struct sk_buff *receive_small(struct net_device *dev, unsigned int *xdp_xmit, struct virtnet_rq_stats *stats) { - struct sk_buff *skb; - struct bpf_prog *xdp_prog; unsigned int xdp_headroom = (unsigned long)ctx; struct page *page = virt_to_head_page(buf); unsigned int header_offset; unsigned int headroom; unsigned int buflen; + struct sk_buff *skb; len -= vi->hdr_len; stats->bytes += len; @@ -1046,22 +1045,21 @@ static struct sk_buff *receive_small(struct net_device *dev, goto err; } - if (likely(!vi->xdp_enabled)) { - xdp_prog = NULL; - goto skip_xdp; - } + if (unlikely(vi->xdp_enabled)) { + struct bpf_prog *xdp_prog; - rcu_read_lock(); - xdp_prog = rcu_dereference(rq->xdp_prog); - if (xdp_prog) { - skb = receive_small_xdp(dev, vi, rq, xdp_prog, buf, xdp_headroom, - len, xdp_xmit, stats); + rcu_read_lock(); + xdp_prog = rcu_dereference(rq->xdp_prog); + if (xdp_prog) { + skb = receive_small_xdp(dev, vi, rq, xdp_prog, buf, + xdp_headroom, len, xdp_xmit, + stats); + rcu_read_unlock(); + return skb; + } rcu_read_unlock(); - return skb; } - rcu_read_unlock(); -skip_xdp: header_offset = VIRTNET_RX_PAD + xdp_headroom; headroom = vi->hdr_len + header_offset; buflen = SKB_DATA_ALIGN(GOOD_PACKET_LEN + headroom) +
now, the process of xdp is simple, we can remove the skip_xdp. Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> --- drivers/net/virtio_net.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-)