linux-next/drivers/net
Brett Creeley 81665adf25 pds_core: Fix pdsc_check_pci_health function to use work thread
When the driver notices fw_status == 0xff it tries to perform a PCI
reset on itself via pci_reset_function() in the context of the driver's
health thread. However, pdsc_reset_prepare calls
pdsc_stop_health_thread(), which attempts to stop/flush the health
thread. This results in a deadlock because the stop/flush will never
complete since the driver called pci_reset_function() from the health
thread context. Fix by changing the pdsc_check_pci_health_function()
to queue a newly introduced pdsc_pci_reset_thread() on the pdsc's
work queue.

Unloading the driver in the fw_down/dead state uncovered another issue,
which can be seen in the following trace:

WARNING: CPU: 51 PID: 6914 at kernel/workqueue.c:1450 __queue_work+0x358/0x440
[...]
RIP: 0010:__queue_work+0x358/0x440
[...]
Call Trace:
 <TASK>
 ? __warn+0x85/0x140
 ? __queue_work+0x358/0x440
 ? report_bug+0xfc/0x1e0
 ? handle_bug+0x3f/0x70
 ? exc_invalid_op+0x17/0x70
 ? asm_exc_invalid_op+0x1a/0x20
 ? __queue_work+0x358/0x440
 queue_work_on+0x28/0x30
 pdsc_devcmd_locked+0x96/0xe0 [pds_core]
 pdsc_devcmd_reset+0x71/0xb0 [pds_core]
 pdsc_teardown+0x51/0xe0 [pds_core]
 pdsc_remove+0x106/0x200 [pds_core]
 pci_device_remove+0x37/0xc0
 device_release_driver_internal+0xae/0x140
 driver_detach+0x48/0x90
 bus_remove_driver+0x6d/0xf0
 pci_unregister_driver+0x2e/0xa0
 pdsc_cleanup_module+0x10/0x780 [pds_core]
 __x64_sys_delete_module+0x142/0x2b0
 ? syscall_trace_enter.isra.18+0x126/0x1a0
 do_syscall_64+0x3b/0x90
 entry_SYSCALL_64_after_hwframe+0x72/0xdc
RIP: 0033:0x7fbd9d03a14b
[...]

Fix this by preventing the devcmd reset if the FW is not running.

Fixes: d9407ff118 ("pds_core: Prevent health thread from running during reset/remove")
Reviewed-by: Shannon Nelson <shannon.nelson@amd.com>
Signed-off-by: Brett Creeley <brett.creeley@amd.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2024-04-10 08:30:10 +01:00
..
arcnet Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2024-02-15 16:20:04 -08:00
bonding Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2024-03-07 10:29:36 -08:00
caif
can can: kvaser_pciefd: Add additional Xilinx interrupts 2024-03-19 15:26:01 +01:00
dsa net: dsa: sja1105: Fix parameters order in sja1110_pcs_mdio_write_c45() 2024-04-04 12:51:45 +02:00
ethernet pds_core: Fix pdsc_check_pci_health function to use work thread 2024-04-10 08:30:10 +01:00
fddi net: fill in MODULE_DESCRIPTION()s for fddik/skfp 2024-02-15 08:03:46 -08:00
fjes
hamradio
hippi
hyperv hv_netvsc: Register VF in netvsc_probe if NET_DEVICE_REGISTER missed 2024-02-04 13:38:08 +00:00
ieee802154 spi: Updates for v6.9 2024-03-13 11:07:37 -07:00
ipa Power management updates for 6.9-rc1 2024-03-13 11:40:06 -07:00
ipvlan rtnetlink: prepare nla_put_iflink() to run under RCU 2024-02-26 11:46:12 +00:00
mctp
mdio net: phy: mdio-bcm-unimac: Add asp v2.2 support 2024-03-01 09:22:50 +00:00
netdevsim netdevsim: add ndo_get_iflink() implementation 2024-03-01 10:43:10 +00:00
pcs net: pcs: rzn1-miic: update PCS driver to use neg_mode 2024-03-07 20:49:14 -08:00
phy net: phy: micrel: lan8814: Fix when enabling/disabling 1-step timestamping 2024-04-03 19:23:17 -07:00
plip net: fill in MODULE_DESCRIPTION()s for plip 2024-02-15 08:03:46 -08:00
ppp - Kuan-Wei Chiu has developed the well-named series "lib min_heap: Min 2024-03-14 18:03:09 -07:00
pse-pd
slip
team net: team: Don't bother filling in ethtool driver version 2024-02-23 18:03:53 -08:00
thunderbolt
usb net: usb: ax88179_178a: avoid the interface always configured as random address 2024-04-04 09:30:18 -07:00
vmxnet3 vmxnet3: Fix missing reserved tailroom 2024-03-14 12:46:24 +01:00
vxlan vxlan: Remove generic .ndo_get_stats64 2024-03-11 16:01:06 -07:00
wan net: wan: fsl_qmc_hdlc: Fix module compilation 2024-03-18 09:25:58 +00:00
wireguard wireguard: netlink: access device through ctx instead of peer 2024-03-19 11:22:50 +01:00
wireless wireless fixes for v6.9-rc2 2024-03-27 15:39:18 -07:00
wwan net: wwan: t7xx: Split 64bit accesses to fix alignment issues 2024-03-25 19:51:57 -07:00
xen-netback net: fill in MODULE_DESCRIPTION()s for xen-netback 2024-02-15 08:03:45 -08:00
amt.c net: amt: Remove generic .ndo_get_stats64 2024-03-11 15:16:13 -07:00
bareudp.c net: bareudp: Remove generic .ndo_get_stats64 2024-03-04 08:55:44 +00:00
dummy.c net/dummy: Move stats allocation to core 2024-02-21 11:20:56 +00:00
eql.c
geneve.c geneve: fix header validation in geneve[6]_xmit_skb 2024-04-08 11:51:04 +01:00
gtp.c net: gtp: Move net_device assigned in setup 2024-03-06 20:37:18 -08:00
ifb.c
Kconfig
LICENSE.SRC
loopback.c net: add netdev_lockdep_set_classes() to virtual drivers 2024-02-13 18:45:06 -08:00
macsec.c net: macsec: Leverage core stats allocator 2024-03-06 20:36:21 -08:00
macvlan.c rtnetlink: prepare nla_put_iflink() to run under RCU 2024-02-26 11:46:12 +00:00
macvtap.c
Makefile
mdio.c
mhi_net.c
mii.c
net_failover.c
netconsole.c net: netconsole: Add continuation line prefix to userdata messages 2024-03-11 14:07:57 -07:00
netkit.c rtnetlink: prepare nla_put_iflink() to run under RCU 2024-02-26 11:46:12 +00:00
nlmon.c net: nlmon: Simplify nlmon_get_stats64 2024-03-04 10:18:02 +00:00
ntb_netdev.c
rionet.c
sb1000.c
Space.c
sungem_phy.c
tap.c
tun.c net: introduce include/net/rps.h 2024-03-07 21:12:43 -08:00
veth.c net: veth: do not manipulate GRO when using XDP 2024-03-18 12:25:52 +00:00
virtio_net.c virtio_net: Do not send RSS key if it is not supported 2024-04-07 15:43:14 +01:00
vrf.c
vsockmon.c net/vsockmon: Do not set zeroed statistics 2024-02-26 18:39:10 -08:00
xen-netfront.c xen-netfront: Add missing skb_mark_for_recycle 2024-03-28 18:28:12 -07:00