linux/drivers/net/ethernet
Ivan Vecera b04683ff8f iavf: Fix hang during reboot/shutdown
Recent commit 974578017f ("iavf: Add waiting so the port is
initialized in remove") adds a wait-loop at the beginning of
iavf_remove() to ensure that port initialization is finished
prior unregistering net device. This causes a regression
in reboot/shutdown scenario because in this case callback
iavf_shutdown() is called and this callback detaches the device,
makes it down if it is running and sets its state to __IAVF_REMOVE.
Later shutdown callback of associated PF driver (e.g. ice_shutdown)
is called. That callback calls among other things sriov_disable()
that calls indirectly iavf_remove() (see stack trace below).
As the adapter state is already __IAVF_REMOVE then the mentioned
loop is end-less and shutdown process hangs.

The patch fixes this by checking adapter's state at the beginning
of iavf_remove() and skips the rest of the function if the adapter
is already in remove state (shutdown is in progress).

Reproducer:
1. Create VF on PF driven by ice or i40e driver
2. Ensure that the VF is bound to iavf driver
3. Reboot

[52625.981294] sysrq: SysRq : Show Blocked State
[52625.988377] task:reboot          state:D stack:    0 pid:17359 ppid:     1 f2
[52625.996732] Call Trace:
[52625.999187]  __schedule+0x2d1/0x830
[52626.007400]  schedule+0x35/0xa0
[52626.010545]  schedule_hrtimeout_range_clock+0x83/0x100
[52626.020046]  usleep_range+0x5b/0x80
[52626.023540]  iavf_remove+0x63/0x5b0 [iavf]
[52626.027645]  pci_device_remove+0x3b/0xc0
[52626.031572]  device_release_driver_internal+0x103/0x1f0
[52626.036805]  pci_stop_bus_device+0x72/0xa0
[52626.040904]  pci_stop_and_remove_bus_device+0xe/0x20
[52626.045870]  pci_iov_remove_virtfn+0xba/0x120
[52626.050232]  sriov_disable+0x2f/0xe0
[52626.053813]  ice_free_vfs+0x7c/0x340 [ice]
[52626.057946]  ice_remove+0x220/0x240 [ice]
[52626.061967]  ice_shutdown+0x16/0x50 [ice]
[52626.065987]  pci_device_shutdown+0x34/0x60
[52626.070086]  device_shutdown+0x165/0x1c5
[52626.074011]  kernel_restart+0xe/0x30
[52626.077593]  __do_sys_reboot+0x1d2/0x210
[52626.093815]  do_syscall_64+0x5b/0x1a0
[52626.097483]  entry_SYSCALL_64_after_hwframe+0x65/0xca

Fixes: 974578017f ("iavf: Add waiting so the port is initialized in remove")
Signed-off-by: Ivan Vecera <ivecera@redhat.com>
Link: https://lore.kernel.org/r/20220317104524.2802848-1-ivecera@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2022-03-17 09:37:37 -07:00
..
3com ethernet: 3com/typhoon: don't write directly to netdev->dev_addr 2022-01-26 15:40:01 +00:00
8390 net:mcf8390: Use platform_get_irq() to get the interrupt 2022-03-09 12:14:30 +00:00
actions
adaptec
aeroflex
agere et131x: Remove useless DMA-32 fallback configuration 2022-01-09 16:52:19 -08:00
alacritech
allwinner net: ethernet: sun4i-emac: Fix an error handling path in emac_probe() 2022-01-15 22:34:52 +00:00
alteon net: alteon: Simplify DMA setting 2022-01-09 16:52:18 -08:00
altera net: altera: set a couple error code in probe() 2021-12-03 14:23:11 +00:00
amazon net: ena: Extract recurring driver reset code into a function 2022-01-07 19:25:52 -08:00
amd net: amd-xgbe: disable interrupts during pci removal 2022-02-09 12:52:59 +00:00
apm
apple net: apple: bmac: Fix build since dev_addr constification 2022-01-14 11:22:57 +00:00
aquantia net: atlantic: Use the bitmap API instead of hand-writing it 2022-01-24 12:57:01 +00:00
arc net: arc_emac: Fix use after free in arc_mdio_probe() 2022-03-10 14:49:21 -08:00
asix
atheros alx: acquire mutex for alx_reinit in alx_change_mtu 2022-03-11 22:53:14 -08:00
broadcom net: bcmgenet: skip invalid partial checksums 2022-03-17 09:34:24 -07:00
brocade bna: Simplify DMA setting 2022-01-09 16:52:18 -08:00
cadence net: macb: Fix lost RX packet wakeup race in NAPI receive 2022-03-04 12:05:54 +00:00
calxeda
cavium Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next 2021-12-31 14:35:40 +00:00
chelsio net: chelsio: cxgb3: check the return value of pci_find_capability() 2022-02-25 12:52:05 +00:00
cirrus
cisco Updates for the interrupt subsystem: 2022-01-13 08:53:45 -08:00
cortina net: gemini: allow any RGMII interface mode 2022-01-05 10:31:22 -08:00
davicom
dec
dlink
emulex Updates for the interrupt subsystem: 2022-01-13 08:53:45 -08:00
engleder tsnep: Fix s390 devm_ioremap_resource warning 2021-12-17 19:22:57 -08:00
ezchip
faraday drivers/net/ftgmac100: fix DHCP potential failure with systemd 2022-02-23 12:50:19 +00:00
freescale gianfar: ethtool: Fix refcount leak in gfar_get_ts_info 2022-03-10 12:20:54 -08:00
fujitsu
google gve: Recording rx queue before sending to napi 2022-02-08 16:52:31 -08:00
hisilicon net: hns3: handle empty unknown interrupt for VF 2022-01-25 13:08:05 +00:00
huawei Updates for the interrupt subsystem: 2022-01-13 08:53:45 -08:00
i825xx ethernet: i825xx: don't write directly to netdev->dev_addr 2022-01-26 15:40:01 +00:00
ibm ibmvnic: Allow queueing resets during probe 2022-02-25 10:57:47 +00:00
intel iavf: Fix hang during reboot/shutdown 2022-03-17 09:37:37 -07:00
litex net: ethernet: litex: Add the dependency on HAS_IOMEM 2022-02-08 20:43:40 -08:00
marvell net: marvell: prestera: Add missing of_node_put() in prestera_switch_set_base_mac_addr 2022-03-09 12:16:32 +00:00
mediatek net: ethernet: mtk_eth_soc: fix error checking in mtk_mac_config() 2022-01-15 22:33:17 +00:00
mellanox net/mlx5e: SHAMPO, reduce TIR indication 2022-03-09 11:39:35 -08:00
micrel Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2021-12-23 16:09:58 -08:00
microchip net: sparx5: Add #include to remove warning 2022-02-28 11:34:26 +00:00
microsoft Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next 2021-12-31 14:35:40 +00:00
moxa
mscc net: mscc: ocelot: fix backwards compatibility with single-chain tc-flower offload 2022-03-17 09:34:52 -07:00
myricom myri10ge: Simplify DMA setting 2022-01-09 16:52:18 -08:00
natsemi
neterion net: vxge: Use dma_set_mask_and_coherent() and simplify code 2022-01-03 10:42:58 +00:00
netronome nfp: flower: Fix a potential leak in nfp_tunnel_add_shared_mac() 2022-02-18 21:08:14 -08:00
ni
nvidia
nxp net: ethernet: lpc_eth: Handle error for clk_enable 2022-03-09 12:15:20 +00:00
oki-semi net_tstamp: add new flag HWTSTAMP_FLAG_BONDED_PHC_INDEX 2021-12-14 12:28:24 +00:00
packetengines
pasemi
pensando Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2021-12-30 12:12:12 -08:00
qlogic qed: return status of qed_iov_get_link 2022-03-07 12:22:28 +00:00
qualcomm
rdc
realtek Power management updates for 5.17-rc1 2022-01-10 20:34:00 -08:00
renesas net_tstamp: add new flag HWTSTAMP_FLAG_BONDED_PHC_INDEX 2021-12-14 12:28:24 +00:00
rocker Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2022-01-09 17:00:17 -08:00
samsung net: sxgbe: fix return value of __setup handler 2022-02-25 08:53:13 -08:00
seeq ethernet: seeq/ether3: don't write directly to netdev->dev_addr 2022-01-26 15:40:01 +00:00
sfc sfc: extend the locking on mcdi->seqno 2022-03-03 14:11:58 +00:00
sgi
silan
sis
smsc ethernet: smc911x: fix indentation in get/set EEPROM 2022-02-01 19:59:03 -08:00
socionext Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next 2021-12-31 14:35:40 +00:00
stmicro net: stmmac: fix return value of __setup handler 2022-02-25 08:53:17 -08:00
sun ethernet: sun: Free the coherent when failing in probing 2022-03-07 11:32:22 +00:00
synopsys
tehuti tehuti: Use dma_set_mask_and_coherent() and simplify code 2022-01-02 12:21:16 +00:00
ti net: ethernet: ti: cpts: Handle error for clk_enable 2022-03-09 12:12:46 +00:00
toshiba
tundra ethernet: tundra: don't write directly to netdev->dev_addr 2022-01-26 15:40:01 +00:00
vertexcom Revert "net: vertexcom: default to disabled on kbuild" 2022-01-10 21:11:07 -08:00
via
wiznet
xilinx ethernet: Fix error handling in xemaclite_of_probe 2022-03-08 22:15:01 -08:00
xircom
xscale net_tstamp: add new flag HWTSTAMP_FLAG_BONDED_PHC_INDEX 2021-12-14 12:28:24 +00:00
dnet.c
dnet.h
ec_bhf.c
ethoc.c net: ethoc: Use platform_get_irq() to get the interrupt 2021-12-27 12:22:19 +00:00
fealnx.c
jme.c
jme.h
Kconfig net: vertexcom: Add MSE102x SPI support 2021-12-13 14:15:41 +00:00
korina.c
lantiq_etop.c net: lantiq_etop: remove unnecessary space in cast 2021-12-30 13:20:23 +00:00
lantiq_xrx200.c net: lantiq_xrx200: fix use after free bug 2022-03-07 11:29:35 +00:00
Makefile net: vertexcom: Add MSE102x SPI support 2021-12-13 14:15:41 +00:00