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

From: Simon Horman

Date: Tue Feb 24 2026 - 12:55:55 EST


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 *

...