Re: [PATCH v14 bpf-next 03/18] net: mvneta: update mb bit before passing the xdp buffer to eBPF layer
From: Shay Agroskin <hidden>
Date: 2021-09-20 08:45:48
Also in:
netdev
Lorenzo Bianconi [off-list ref] writes:
quoted
Lorenzo Bianconi [off-list ref] writes:quoted
...diff --git a/drivers/net/ethernet/marvell/mvneta.cb/drivers/net/ethernet/marvell/mvneta.c index 9d460a270601..0c7b84ca6efc 100644--- a/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c...@@ -2320,8 +2325,12 @@ mvneta_swbm_build_skb(structmvneta_port *pp, struct page_pool *pool, struct xdp_buff *xdp, u32 desc_status) { struct skb_shared_info *sinfo = xdp_get_shared_info_from_buff(xdp); - int i, num_frags = sinfo->nr_frags; struct sk_buff *skb; + u8 num_frags; + int i; + + if (unlikely(xdp_buff_is_mb(xdp))) + num_frags = sinfo->nr_frags;Hi, nit, it seems that the num_frags assignment can be moved after the other 'if' condition you added (right before the 'for' for num_frags), or even be eliminated completely so that sinfo->nr_frags is used directly. Either way it looks like you can remove one 'if'. ShayHi Shay, we can't move nr_frags assignement after build_skb() since this field will be overwritten by that call. Regards, Lorenzo
Sorry, silly mistake of me. Guess this assignment can be done anyway since there doesn't seem to be new cache misses introduced by it. Anyway, nice catch, sorry for misleading you
quoted
quoted
skb = build_skb(xdp->data_hard_start, PAGE_SIZE); if (!skb)@@ -2333,6 +2342,9 @@ mvneta_swbm_build_skb(structmvneta_port *pp, struct page_pool *pool, skb_put(skb, xdp->data_end - xdp->data); skb->ip_summed = mvneta_rx_csum(pp, desc_status); + if (likely(!xdp_buff_is_mb(xdp))) + goto out; + for (i = 0; i < num_frags; i++) { skb_frag_t *frag = &sinfo->frags[i]; @@ -2341,6 +2353,7 @@ mvneta_swbm_build_skb(struct mvneta_port *pp, struct page_pool *pool, skb_frag_size(frag), PAGE_SIZE); } +out: return skb; }