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

From: Larysa Zaremba

Date: Wed Feb 25 2026 - 12:22:13 EST


On Tue, Feb 24, 2026 at 05:54:54PM +0000, Simon Horman wrote:
> 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 *
>
> ...

You are right, will fix this.