Thread (58 messages) 58 messages, 11 authors, 2021-10-06

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.c
b/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(struct 
mvneta_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'.

Shay
Hi 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(struct 
mvneta_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;
 }
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help