linux-stable/drivers/net/ethernet/sfc
Íñigo Huguet e84a1e1e68 sfc: fix XDP queues mode with legacy IRQ
In systems without MSI-X capabilities, xdp_txq_queues_mode is calculated
in efx_allocate_msix_channels, but when enabling MSI-X fails, it was not
changed to a proper default value. This was leading to the driver
thinking that it has dedicated XDP queues, when it didn't.

Fix it by setting xdp_txq_queues_mode to the correct value if the driver
fallbacks to MSI or legacy IRQ mode. The correct value is
EFX_XDP_TX_QUEUES_BORROWED because there are no XDP dedicated queues.

The issue can be easily visible if the kernel is started with pci=nomsi,
then a call trace is shown. It is not shown only with sfc's modparam
interrupt_mode=2. Call trace example:
 WARNING: CPU: 2 PID: 663 at drivers/net/ethernet/sfc/efx_channels.c:828 efx_set_xdp_channels+0x124/0x260 [sfc]
 [...skip...]
 Call Trace:
  <TASK>
  efx_set_channels+0x5c/0xc0 [sfc]
  efx_probe_nic+0x9b/0x15a [sfc]
  efx_probe_all+0x10/0x1a2 [sfc]
  efx_pci_probe_main+0x12/0x156 [sfc]
  efx_pci_probe_post_io+0x18/0x103 [sfc]
  efx_pci_probe.cold+0x154/0x257 [sfc]
  local_pci_probe+0x42/0x80

Fixes: 6215b608a8 ("sfc: last resort fallback for lack of xdp tx queues")
Reported-by: Yanghang Liu <yanghliu@redhat.com>
Signed-off-by: Íñigo Huguet <ihuguet@redhat.com>
Acked-by: Martin Habets <habetsm.xilinx@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2023-06-15 11:43:31 +01:00
..
falcon sfc: falcon: Drop redundant pci_enable_pcie_error_reporting() 2023-03-08 23:34:39 -08:00
siena sfc: fix XDP queues mode with legacy IRQ 2023-06-15 11:43:31 +01:00
Kconfig sfc: add devlink support for ef100 2023-02-16 12:03:12 +01:00
Makefile sfc: add devlink support for ef100 2023-02-16 12:03:12 +01:00
bitfield.h
ef10.c sfc: ef10: don't overwrite offload features at NIC reset 2023-03-24 14:48:17 -07:00
ef10_regs.h
ef10_sriov.c
ef10_sriov.h
ef100.c sfc_ef100: Drop redundant pci_disable_pcie_error_reporting() 2023-03-08 23:34:39 -08:00
ef100.h
ef100_ethtool.c
ef100_ethtool.h
ef100_netdev.c sfc: disable RXFCS and RXALL features by default 2023-05-12 10:00:48 +01:00
ef100_netdev.h
ef100_nic.c sfc: use IS_ENABLED() checks for CONFIG_SFC_SRIOV 2023-02-20 10:49:30 +00:00
ef100_nic.h sfc: add support for devlink port_function_hw_addr_get in ef100 2023-02-16 12:03:13 +01:00
ef100_regs.h
ef100_rep.c sfc: add support for devlink port_function_hw_addr_get in ef100 2023-02-16 12:03:13 +01:00
ef100_rep.h sfc: add support for devlink port_function_hw_addr_get in ef100 2023-02-16 12:03:13 +01:00
ef100_rx.c sfc: add ability for extra channels to receive raw RX buffers 2022-11-16 09:07:02 +00:00
ef100_rx.h
ef100_sriov.c
ef100_sriov.h
ef100_tx.c sfc (gcc13): synchronize ef100_enqueue_skb()'s return type 2022-11-02 20:38:17 -07:00
ef100_tx.h
efx.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2023-04-20 16:29:51 -07:00
efx.h
efx_channels.c sfc: fix XDP queues mode with legacy IRQ 2023-06-15 11:43:31 +01:00
efx_channels.h
efx_common.c sfc: Fix use-after-free due to selftest_work 2023-04-17 08:22:26 +01:00
efx_common.h
efx_devlink.c sfc: fix devlink info error handling 2023-05-19 08:55:56 +01:00
efx_devlink.h sfc: add devlink port support for ef100 2023-02-16 12:03:12 +01:00
enum.h
ethtool.c
ethtool_common.c
ethtool_common.h
farch_regs.h
filter.h sfc: include vport_id in filter spec hash and equal() 2022-10-19 17:08:43 -07:00
io.h
mae.c sfc: add offloading of 'foreign' TC (decap) rules 2023-03-29 09:06:08 +01:00
mae.h sfc: add offloading of 'foreign' TC (decap) rules 2023-03-29 09:06:08 +01:00
mae_counter_format.h sfc: add extra RX channel to receive MAE counter updates on ef100 2022-11-16 09:07:02 +00:00
mcdi.c sfc: add devlink info support for ef100 2023-02-16 12:03:12 +01:00
mcdi.h sfc: support offloading TC VLAN push/pop actions to the MAE 2023-03-10 21:28:59 -08:00
mcdi_filters.c
mcdi_filters.h
mcdi_functions.c
mcdi_functions.h
mcdi_mon.c
mcdi_pcol.h
mcdi_pcol_mae.h
mcdi_port.c
mcdi_port.h
mcdi_port_common.c sfc: Fix module EEPROM reporting for QSFP modules 2023-05-01 07:34:04 +01:00
mcdi_port_common.h
mtd.c
net_driver.h sfc: add devlink port support for ef100 2023-02-16 12:03:12 +01:00
nic.c
nic.h
nic_common.h
ptp.c sfc: remove expired unicast PTP filters 2023-04-03 19:02:51 -07:00
ptp.h
rx.c
rx_common.c sfc: add ability for an RXQ to grant credits on refill 2022-11-16 09:07:02 +00:00
rx_common.h
selftest.c
selftest.h
sriov.c
sriov.h
tc.c sfc: fix error unwinds in TC offload 2023-05-31 22:30:27 -07:00
tc.h sfc: add offloading of 'foreign' TC (decap) rules 2023-03-29 09:06:08 +01:00
tc_bindings.c
tc_bindings.h
tc_counters.c sfc: ensure type is valid before updating seen_gen 2022-11-23 13:47:51 +00:00
tc_counters.h sfc: implement counters readout to TC stats 2022-11-16 09:07:03 +00:00
tx.c sfc: Use kmap_local_page() instead of kmap_atomic() 2022-11-25 10:44:01 +00:00
tx.h
tx_common.c
tx_common.h
tx_tso.c net: vlan: introduce skb_vlan_eth_hdr() 2023-04-23 14:16:44 +01:00
vfdi.h
workarounds.h