On Fri, 22 Jan 2021 15:57:31 -0800 Tony Nguyen wrote: > From: Piotr Raczynski <piotr.raczyn...@intel.com> > > XDP queue number for XDP_TX action is used inconsistently > and may result with no packets transmitted. Fix queue number > used by the driver when doing XDP_TX, i.e. use receive queue > number as in ice_finalize_xdp_rx. > > Also, using smp_processor_id() is wrong here and won't > work with less queues. > > Fixes: efc2214b6047 ("ice: Add support for XDP") > Signed-off-by: Piotr Raczynski <piotr.raczyn...@intel.com> > Tested-by: George Kuruvinakunnel <george.kuruvinakun...@intel.com> > Signed-off-by: Tony Nguyen <anthony.l.ngu...@intel.com> > --- > drivers/net/ethernet/intel/ice/ice_txrx.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/intel/ice/ice_txrx.c > b/drivers/net/ethernet/intel/ice/ice_txrx.c > index b6fa83c619dd..7946a90b2da7 100644 > --- a/drivers/net/ethernet/intel/ice/ice_txrx.c > +++ b/drivers/net/ethernet/intel/ice/ice_txrx.c > @@ -546,7 +546,7 @@ ice_run_xdp(struct ice_ring *rx_ring, struct xdp_buff > *xdp, > case XDP_PASS: > break; > case XDP_TX: > - xdp_ring = rx_ring->vsi->xdp_rings[smp_processor_id()]; > + xdp_ring = rx_ring->vsi->xdp_rings[rx_ring->q_index];
But then what protects you from one CPU trying to use the tx ring from XDP_TX and another from ice_xdp_xmit() ? Also why does this code not check queue_index < vsi->num_xdp_txq like ice_xdp_xmit() does? Let me CC your local XDP experts whose tags I'm surprised not to see on this patch. > result = ice_xmit_xdp_buff(xdp, xdp_ring); > break; > case XDP_REDIRECT: