Message ID | 20210122235734.447240-5-anthony.l.nguyen@intel.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | Intel Wired LAN Driver Updates 2021-01-22 | expand |
On Fri, 22 Jan 2021 15:57:31 -0800 Tony Nguyen wrote: > From: Piotr Raczynski <piotr.raczynski@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.raczynski@intel.com> > Tested-by: George Kuruvinakunnel <george.kuruvinakunnel@intel.com> > Signed-off-by: Tony Nguyen <anthony.l.nguyen@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:
On Sat, 2021-01-23 at 19:52 -0800, Jakub Kicinski wrote: > On Fri, 22 Jan 2021 15:57:31 -0800 Tony Nguyen wrote: > > From: Piotr Raczynski <piotr.raczynski@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.raczynski@intel.com> > > Tested-by: George Kuruvinakunnel <george.kuruvinakunnel@intel.com> > > Signed-off-by: Tony Nguyen <anthony.l.nguyen@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? Hi Jakub I'm still waiting for information from the author. I'm going to drop this patch from the series and resubmit. > Let me CC your local XDP experts whose tags I'm surprised not to see > on > this patch. I'll add them to the XDP patches in the future. Thanks, Tony
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]; result = ice_xmit_xdp_buff(xdp, xdp_ring); break; case XDP_REDIRECT: