linux/drivers/net/ethernet/intel/ice
Maciej Fijalkowski 9ead7e74bf ice: xsk: use Rx ring's XDP ring when picking NAPI context
Ice driver allocates per cpu XDP queues so that redirect path can safely
use smp_processor_id() as an index to the array. At the same time
though, XDP rings are used to pick NAPI context to call napi_schedule()
or set NAPIF_STATE_MISSED. When user reduces queue count, say to 8, and
num_possible_cpus() of underlying platform is 44, then this means queue
vectors with correlated NAPI contexts will carry several XDP queues.

This in turn can result in a broken behavior where NAPI context of
interest will never be scheduled and AF_XDP socket will not process any
traffic.

To fix this, let us change the way how XDP rings are assigned to Rx
rings and use this information later on when setting
ice_tx_ring::xsk_pool pointer. For each Rx ring, grab the associated
queue vector and walk through Tx ring's linked list. Once we stumble
upon XDP ring in it, assign this ring to ice_rx_ring::xdp_ring.

Previous [0] approach of fixing this issue was for txonly scenario
because of the described grouping of XDP rings across queue vectors. So,
relying on Rx ring meant that NAPI context could be scheduled with a
queue vector without XDP ring with associated XSK pool.

[0]: https://lore.kernel.org/netdev/20220707161128.54215-1-maciej.fijalkowski@intel.com/

Fixes: 2d4238f556 ("ice: Add support for AF_XDP")
Fixes: 22bf877e52 ("ice: introduce XDP_TX fallback path")
Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Tested-by: George Kuruvinakunnel <george.kuruvinakunnel@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
2022-08-22 08:47:26 -07:00
..
ice.h ice: xsk: use Rx ring's XDP ring when picking NAPI context 2022-08-22 08:47:26 -07:00
ice_adminq_cmd.h ice: add i2c write command 2022-07-21 11:22:45 -07:00
ice_arfs.c
ice_arfs.h
ice_base.c
ice_base.h
ice_cgu_regs.h
ice_common.c ice: add i2c write command 2022-07-21 11:22:45 -07:00
ice_common.h ice: add i2c write command 2022-07-21 11:22:45 -07:00
ice_controlq.c
ice_controlq.h
ice_dcb.c
ice_dcb.h
ice_dcb_lib.c
ice_dcb_lib.h
ice_dcb_nl.c
ice_dcb_nl.h
ice_devids.h ice: handle E822 generic device ID in PLDM header 2022-07-12 09:25:34 -07:00
ice_devlink.c ice: change devlink code to read NVM in blocks 2022-07-12 09:25:47 -07:00
ice_devlink.h
ice_eswitch.c ice: Introduce enabling promiscuous mode on multiple VF's 2022-07-28 11:44:22 -07:00
ice_eswitch.h
ice_ethtool.c Merge branch '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue 2022-07-29 21:26:10 -07:00
ice_ethtool_fdir.c ice: Use correct order for the parameters of devm_kcalloc() 2022-06-08 08:55:13 -07:00
ice_fdir.c
ice_fdir.h
ice_flex_pipe.c ice: Add support for PPPoE hardware offload 2022-07-26 10:56:32 -07:00
ice_flex_pipe.h
ice_flex_type.h
ice_flow.c
ice_flow.h
ice_fltr.c ice: Ignore error message when setting same promiscuous mode 2022-08-17 09:30:44 -07:00
ice_fltr.h
ice_fw_update.c ice: handle E822 generic device ID in PLDM header 2022-07-12 09:25:34 -07:00
ice_fw_update.h
ice_gnss.c ice: add write functionality for GNSS TTY 2022-07-21 13:25:17 -07:00
ice_gnss.h ice: add write functionality for GNSS TTY 2022-07-21 13:25:17 -07:00
ice_hw_autogen.h
ice_idc.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2022-05-12 16:15:30 -07:00
ice_idc_int.h
ice_lag.c ice: Remove unnecessary NULL check before dev_put 2022-06-30 13:53:33 -07:00
ice_lag.h
ice_lan_tx_rx.h
ice_lib.c ice: xsk: use Rx ring's XDP ring when picking NAPI context 2022-08-22 08:47:26 -07:00
ice_lib.h ice: Introduce enabling promiscuous mode on multiple VF's 2022-07-28 11:44:22 -07:00
ice_main.c ice: xsk: use Rx ring's XDP ring when picking NAPI context 2022-08-22 08:47:26 -07:00
ice_nvm.c
ice_nvm.h
ice_osdep.h
ice_pf_vsi_vlan_ops.c
ice_pf_vsi_vlan_ops.h
ice_protocol_type.h ice: Add support for PPPoE hardware offload 2022-07-26 10:56:32 -07:00
ice_ptp.c ice: implement adjfine with mul_u64_u64_div_u64 2022-07-28 10:54:47 -07:00
ice_ptp.h ice: Fix PTP TX timestamp offset calculation 2022-06-14 09:35:57 -07:00
ice_ptp_consts.h
ice_ptp_hw.c
ice_ptp_hw.h
ice_repr.c ice: link representors to PCI device 2022-05-06 09:43:01 -07:00
ice_repr.h
ice_sbq_cmd.h
ice_sched.c
ice_sched.h
ice_sriov.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2022-07-28 18:21:16 -07:00
ice_sriov.h
ice_switch.c ice: Ignore EEXIST when setting promisc mode 2022-08-17 09:30:23 -07:00
ice_switch.h ice: Introduce enabling promiscuous mode on multiple VF's 2022-07-28 11:44:22 -07:00
ice_tc_lib.c ice: Add support for PPPoE hardware offload 2022-07-26 10:56:32 -07:00
ice_tc_lib.h ice: Add support for PPPoE hardware offload 2022-07-26 10:56:32 -07:00
ice_trace.h
ice_txrx.c ice: Fix tunnel checksum offload with fragmented traffic 2022-07-26 13:15:36 -07:00
ice_txrx.h Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2022-05-19 11:23:59 -07:00
ice_txrx_lib.c
ice_txrx_lib.h
ice_type.h ice: Introduce enabling promiscuous mode on multiple VF's 2022-07-28 11:44:22 -07:00
ice_vf_lib.c ice: Fix VF not able to send tagged traffic with no VLAN filters 2022-08-17 09:30:44 -07:00
ice_vf_lib.h ice: Fix promiscuous mode not turning off 2022-07-28 11:44:40 -07:00
ice_vf_lib_private.h
ice_vf_mbx.c
ice_vf_mbx.h
ice_vf_vsi_vlan_ops.c
ice_vf_vsi_vlan_ops.h
ice_virtchnl.c ice: Fix VF not able to send tagged traffic with no VLAN filters 2022-08-17 09:30:44 -07:00
ice_virtchnl.h
ice_virtchnl_allowlist.c
ice_virtchnl_allowlist.h
ice_virtchnl_fdir.c ice: always check VF VSI pointer values 2022-05-05 11:28:36 -07:00
ice_virtchnl_fdir.h
ice_vlan.h
ice_vlan_mode.c ice: Add support for VLAN TPID filters in switchdev 2022-06-30 13:53:33 -07:00
ice_vlan_mode.h
ice_vsi_vlan_lib.c
ice_vsi_vlan_lib.h
ice_vsi_vlan_ops.c
ice_vsi_vlan_ops.h
ice_xsk.c ice: xsk: use Rx ring's XDP ring when picking NAPI context 2022-08-22 08:47:26 -07:00
ice_xsk.h
Makefile ice: fix access-beyond-end in the switch code 2022-06-02 12:41:10 +02:00