Subject: Re: [PATCH iwl-next 06/10] ixgbevf: XDP_TX in multi-buffer through libeth

From: Simon Horman <[email-masked]>
Date: Tue, 24 Feb 2026 17:54:54 +0000

On Mon, Feb 23, 2026 at 10:52:13AM +0100, Larysa Zaremba wrote:

...

> diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h b/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
> index eada53c57fcf..67d10e6e9910 100644
> --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
> +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
> @@ -82,20 +82,22 @@ struct ixgbevf_ring {
>  	struct net_device *netdev;
>  	struct bpf_prog *xdp_prog;

...

> diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c

...

> @@ -784,11 +865,19 @@ static int ixgbevf_clean_rx_irq(struct ixgbevf_q_vector *q_vector,
>  	unsigned int total_rx_bytes = 0, total_rx_packets = 0;
>  	struct ixgbevf_adapter *adapter = q_vector->adapter;
>  	u16 cleaned_count = ixgbevf_desc_unused(rx_ring);
> +	LIBETH_XDP_ONSTACK_BULK(xdp_tx_bulk);
>  	LIBETH_XDP_ONSTACK_BUFF(xdp);
> +	u32 cached_ntu;
>  	bool xdp_xmit = false;
>  	int xdp_res = 0;
>  
>  	libeth_xdp_init_buff(xdp, &rx_ring->xdp_stash, &rx_ring->xdp_rxq);
> +	libeth_xdp_tx_init_bulk(&xdp_tx_bulk, rx_ring->xdp_prog,
> +				adapter->netdev, adapter->xdp_ring,
> +				adapter->num_xdp_queues);

Hi Larysa,

Sparse flags that libeth_xdp_tx_init_bulk() expects xdp_prog to be managed
using __rcu, but that is not the case for rx_ring->xdp_prog.

  .../ixgbevf_main.c:875:9: error: incompatible types in comparison expression (different address spaces):
  .../ixgbevf_main.c:875:9:    struct bpf_prog [noderef] __rcu *
  .../ixgbevf_main.c:875:9:    struct bpf_prog *

...