Re: [PATCH v14 bpf-next 03/18] net: mvneta: update mb bit before passing the xdp buffer to eBPF layer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




Lorenzo Bianconi <lorenzo.bianconi@xxxxxxxxxx> writes:


Lorenzo Bianconi <lorenzo@xxxxxxxxxx> writes:

> ...
> 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


>  	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;
>  }





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux