mirror_ubuntu-kernels/drivers/net/ethernet/intel/ice
Maciej Fijalkowski 22bf877e52 ice: introduce XDP_TX fallback path
Under rare circumstances there might be a situation where a requirement
of having XDP Tx queue per CPU could not be fulfilled and some of the Tx
resources have to be shared between CPUs. This yields a need for placing
accesses to xdp_ring inside a critical section protected by spinlock.
These accesses happen to be in the hot path, so let's introduce the
static branch that will be triggered from the control plane when driver
could not provide Tx queue dedicated for XDP on each CPU.

Currently, the design that has been picked is to allow any number of XDP
Tx queues that is at least half of a count of CPUs that platform has.
For lower number driver will bail out with a response to user that there
were not enough Tx resources that would allow configuring XDP. The
sharing of rings is signalled via static branch enablement which in turn
indicates that lock for xdp_ring accesses needs to be taken in hot path.

Approach based on static branch has no impact on performance of a
non-fallback path. One thing that is needed to be mentioned is a fact
that the static branch will act as a global driver switch, meaning that
if one PF got out of Tx resources, then other PFs that ice driver is
servicing will suffer. However, given the fact that HW that ice driver
is handling has 1024 Tx queues per each PF, this is currently an
unlikely scenario.

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>
2021-10-15 07:39:03 -07:00
..
ice_adminq_cmd.h ice: Add support for SMA control multiplexer 2021-10-14 07:37:30 -07:00
ice_arfs.c ice: Prefer kcalloc over open coded arithmetic 2021-09-28 09:42:04 -07:00
ice_arfs.h ice: use static inline for dummy functions 2021-06-07 08:59:01 -07:00
ice_base.c ice: split ice_ring onto Tx/Rx separate structs 2021-10-15 07:39:02 -07:00
ice_base.h ice: split ice_ring onto Tx/Rx separate structs 2021-10-15 07:39:02 -07:00
ice_common.c ice: Add support for SMA control multiplexer 2021-10-14 07:37:30 -07:00
ice_common.h ice: Add support for SMA control multiplexer 2021-10-14 07:37:30 -07:00
ice_controlq.c ice: add support for sideband messages 2021-06-11 07:38:00 -07:00
ice_controlq.h ice: add support for sideband messages 2021-06-11 07:38:00 -07:00
ice_dcb_lib.c ice: split ice_ring onto Tx/Rx separate structs 2021-10-15 07:39:02 -07:00
ice_dcb_lib.h ice: split ice_ring onto Tx/Rx separate structs 2021-10-15 07:39:02 -07:00
ice_dcb_nl.c ice: Add feature bitmap, helpers and a check for DSCP 2021-09-28 09:42:04 -07:00
ice_dcb_nl.h ice: use static inline for dummy functions 2021-06-07 08:59:01 -07:00
ice_dcb.c ice: Add DSCP support 2021-09-28 09:42:04 -07:00
ice_dcb.h ice: Add DSCP support 2021-09-28 09:42:04 -07:00
ice_devids.h ice: Add support for SMA control multiplexer 2021-10-14 07:37:30 -07:00
ice_devlink.c ice: Move devlink port to PF/VF struct 2021-10-07 10:41:41 -07:00
ice_devlink.h ice: Move devlink port to PF/VF struct 2021-10-07 10:41:41 -07:00
ice_eswitch.c ice: split ice_ring onto Tx/Rx separate structs 2021-10-15 07:39:02 -07:00
ice_eswitch.h ice: split ice_ring onto Tx/Rx separate structs 2021-10-15 07:39:02 -07:00
ice_ethtool_fdir.c ice: Drop leading underscores in enum ice_pf_state 2021-04-14 17:00:05 -07:00
ice_ethtool.c ice: split ice_ring onto Tx/Rx separate structs 2021-10-15 07:39:02 -07:00
ice_fdir.c ice: Fix macro name for IPv4 fragment flag 2021-09-28 09:42:04 -07:00
ice_fdir.h ice: Fix macro name for IPv4 fragment flag 2021-09-28 09:42:04 -07:00
ice_flex_pipe.c ice: create advanced switch recipe 2021-10-11 08:38:27 -07:00
ice_flex_pipe.h ice: create advanced switch recipe 2021-10-11 08:38:27 -07:00
ice_flex_type.h ice: manage profiles and field vectors 2021-10-11 08:36:25 -07:00
ice_flow.c ice: Support RSS configure removal for AVF 2021-04-22 09:26:22 -07:00
ice_flow.h ice: Support RSS configure removal for AVF 2021-04-22 09:26:22 -07:00
ice_fltr.c ice: Allow changing lan_en and lb_en on all kinds of filters 2021-10-11 08:50:37 -07:00
ice_fltr.h ice: allow changing lan_en and lb_en on dflt rules 2021-10-07 10:41:42 -07:00
ice_fw_update.c ice: add error message when pldmfw_flash_image fails 2021-06-07 08:59:01 -07:00
ice_fw_update.h ice: add support for flash update overwrite mask 2020-09-25 17:20:57 -07:00
ice_hw_autogen.h ice: add support for auxiliary input/output pins 2021-06-25 11:30:49 -07:00
ice_idc_int.h ice: Implement iidc operations 2021-05-28 20:11:13 -07:00
ice_idc.c ice: Correctly deal with PFs that do not support RDMA 2021-09-10 09:58:55 +01:00
ice_lag.c ice: Initialize RDMA support 2021-05-28 20:11:13 -07:00
ice_lag.h ice: Add initial support framework for LAG 2021-02-08 16:27:01 -08:00
ice_lan_tx_rx.h ice: switchdev slow path 2021-10-07 10:41:42 -07:00
ice_lib.c ice: introduce XDP_TX fallback path 2021-10-15 07:39:03 -07:00
ice_lib.h ice: split ice_ring onto Tx/Rx separate structs 2021-10-15 07:39:02 -07:00
ice_main.c ice: introduce XDP_TX fallback path 2021-10-15 07:39:03 -07:00
ice_nvm.c ice: suppress false cppcheck issues 2021-04-14 17:12:17 -07:00
ice_nvm.h ice: display stored UNDI firmware version via devlink info 2021-02-05 11:44:16 -08:00
ice_osdep.h
ice_protocol_type.h ice: create advanced switch recipe 2021-10-11 08:38:27 -07:00
ice_ptp_hw.c ice: Add support for SMA control multiplexer 2021-10-14 07:37:30 -07:00
ice_ptp_hw.h ice: Add support for SMA control multiplexer 2021-10-14 07:37:30 -07:00
ice_ptp.c ice: split ice_ring onto Tx/Rx separate structs 2021-10-15 07:39:02 -07:00
ice_ptp.h ice: split ice_ring onto Tx/Rx separate structs 2021-10-15 07:39:02 -07:00
ice_repr.c ice: ndo_setup_tc implementation for PR 2021-10-11 09:03:08 -07:00
ice_repr.h ice: rebuild switchdev when resetting all VFs 2021-10-07 10:41:42 -07:00
ice_sbq_cmd.h ice: add support for sideband messages 2021-06-11 07:38:00 -07:00
ice_sched.c ice: remove the VSI info from previous agg 2021-06-25 11:30:49 -07:00
ice_sched.h ice: Use PSM clock frequency to calculate RL profiles 2021-02-08 16:27:01 -08:00
ice_sriov.c ice: warn about potentially malicious VFs 2021-04-22 09:26:22 -07:00
ice_sriov.h ice: warn about potentially malicious VFs 2021-04-22 09:26:22 -07:00
ice_status.h ice: display stored netlist versions via devlink info 2021-02-05 11:43:37 -08:00
ice_switch.c ice: cleanup rules info 2021-10-11 08:49:55 -07:00
ice_switch.h ice: allow deleting advanced rules 2021-10-11 08:48:49 -07:00
ice_tc_lib.c ice: ndo_setup_tc implementation for PR 2021-10-11 09:03:08 -07:00
ice_tc_lib.h ice: ndo_setup_tc implementation for PR 2021-10-11 09:03:08 -07:00
ice_trace.h ice: split ice_ring onto Tx/Rx separate structs 2021-10-15 07:39:02 -07:00
ice_txrx_lib.c ice: introduce XDP_TX fallback path 2021-10-15 07:39:03 -07:00
ice_txrx_lib.h ice: propagate xdp_ring onto rx_ring 2021-10-15 07:39:03 -07:00
ice_txrx.c ice: introduce XDP_TX fallback path 2021-10-15 07:39:03 -07:00
ice_txrx.h ice: introduce XDP_TX fallback path 2021-10-15 07:39:03 -07:00
ice_type.h ice: Add support for SMA control multiplexer 2021-10-14 07:37:30 -07:00
ice_virtchnl_allowlist.c ice: Enable RSS configure for AVF 2021-04-22 09:26:22 -07:00
ice_virtchnl_allowlist.h ice: Allow ignoring opcodes on specific VF 2021-04-22 09:26:22 -07:00
ice_virtchnl_fdir.c ice: Drop leading underscores in enum ice_pf_state 2021-04-14 17:00:05 -07:00
ice_virtchnl_fdir.h ice: Check FDIR program status for AVF 2021-03-22 11:32:12 -07:00
ice_virtchnl_pf.c ice: split ice_ring onto Tx/Rx separate structs 2021-10-15 07:39:02 -07:00
ice_virtchnl_pf.h ice: add port representor ethtool ops and stats 2021-10-07 10:41:43 -07:00
ice_xsk.c ice: propagate xdp_ring onto rx_ring 2021-10-15 07:39:03 -07:00
ice_xsk.h ice: split ice_ring onto Tx/Rx separate structs 2021-10-15 07:39:02 -07:00
ice.h ice: introduce XDP_TX fallback path 2021-10-15 07:39:03 -07:00
Makefile ice: ndo_setup_tc implementation for PF 2021-10-11 09:03:04 -07:00