On Tue, Apr 18, 2023 at 2:53 PM Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx> wrote: > > Now, the logic of merge xdp process is simple, we can remove the > skip_xdp. > > Signed-off-by: Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx> Acked-by: Jason Wang <jasowang@xxxxxxxxxx> Thanks > --- > drivers/net/virtio_net.c | 23 ++++++++++------------- > 1 file changed, 10 insertions(+), 13 deletions(-) > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > index 42e9927e316b..a4bb25f39f12 100644 > --- a/drivers/net/virtio_net.c > +++ b/drivers/net/virtio_net.c > @@ -1390,7 +1390,6 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, > struct page *page = virt_to_head_page(buf); > int offset = buf - page_address(page); > struct sk_buff *head_skb, *curr_skb; > - struct bpf_prog *xdp_prog; > unsigned int truesize = mergeable_ctx_to_truesize(ctx); > unsigned int headroom = mergeable_ctx_to_headroom(ctx); > unsigned int tailroom = headroom ? sizeof(struct skb_shared_info) : 0; > @@ -1406,22 +1405,20 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, > goto err_skb; > } > > - 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) { > - head_skb = receive_mergeable_xdp(dev, vi, rq, xdp_prog, buf, ctx, > - len, xdp_xmit, stats); > + rcu_read_lock(); > + xdp_prog = rcu_dereference(rq->xdp_prog); > + if (xdp_prog) { > + head_skb = receive_mergeable_xdp(dev, vi, rq, xdp_prog, buf, ctx, > + len, xdp_xmit, stats); > + rcu_read_unlock(); > + return head_skb; > + } > rcu_read_unlock(); > - return head_skb; > } > - rcu_read_unlock(); > > -skip_xdp: > head_skb = page_to_skb(vi, rq, page, offset, len, truesize, headroom); > curr_skb = head_skb; > > -- > 2.32.0.3.g01195cf9f >