Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

eth: bnxt: switch to netif_close

All (error) paths that call dev_close are already holding instance lock,
so switch to netif_close to avoid the deadlock.

v2:
- add missing EXPORT_MODULE for netif_close

Fixes: 004b5008016a ("eth: bnxt: remove most dependencies on RTNL")
Reported-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Stanislav Fomichev <sdf@fomichev.me>
Link: https://patch.msgid.link/20250309215851.2003708-1-sdf@fomichev.me
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Stanislav Fomichev and committed by
Jakub Kicinski
110eff17 0a13c1e0

+9 -8
+6 -6
drivers/net/ethernet/broadcom/bnxt/bnxt.c
··· 12802 12802 rc = __bnxt_open_nic(bp, irq_re_init, link_re_init); 12803 12803 if (rc) { 12804 12804 netdev_err(bp->dev, "nic open fail (rc: %x)\n", rc); 12805 - dev_close(bp->dev); 12805 + netif_close(bp->dev); 12806 12806 } 12807 12807 return rc; 12808 12808 } ··· 12840 12840 half_open_err: 12841 12841 bnxt_free_skbs(bp); 12842 12842 bnxt_free_mem(bp, true); 12843 - dev_close(bp->dev); 12843 + netif_close(bp->dev); 12844 12844 return rc; 12845 12845 } 12846 12846 ··· 14195 14195 netdev_err(bp->dev, "Firmware reset aborted, rc = %d\n", 14196 14196 n); 14197 14197 clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state); 14198 - dev_close(bp->dev); 14198 + netif_close(bp->dev); 14199 14199 goto fw_reset_exit; 14200 14200 } else if (n > 0) { 14201 14201 u16 vf_tmo_dsecs = n * 10; ··· 14810 14810 if (bp->fw_reset_state != BNXT_FW_RESET_STATE_POLL_VF) 14811 14811 bnxt_dl_health_fw_status_update(bp, false); 14812 14812 bp->fw_reset_state = 0; 14813 - dev_close(bp->dev); 14813 + netif_close(bp->dev); 14814 14814 } 14815 14815 14816 14816 static void bnxt_fw_reset_task(struct work_struct *work) ··· 16276 16276 16277 16277 if (netif_running(bp->dev)) { 16278 16278 if (rc) 16279 - dev_close(bp->dev); 16279 + netif_close(bp->dev); 16280 16280 else 16281 16281 rc = bnxt_open_nic(bp, true, false); 16282 16282 } ··· 16669 16669 goto shutdown_exit; 16670 16670 16671 16671 if (netif_running(dev)) 16672 - dev_close(dev); 16672 + netif_close(dev); 16673 16673 16674 16674 bnxt_ptp_clear(bp); 16675 16675 bnxt_clear_int_mode(bp);
+2 -2
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
··· 461 461 if (rc) { 462 462 NL_SET_ERR_MSG_MOD(extack, "Failed to deregister"); 463 463 if (netif_running(bp->dev)) 464 - dev_close(bp->dev); 464 + netif_close(bp->dev); 465 465 netdev_unlock(bp->dev); 466 466 rtnl_unlock(); 467 467 break; ··· 576 576 *actions_performed |= BIT(action); 577 577 } else if (netif_running(bp->dev)) { 578 578 netdev_lock(bp->dev); 579 - dev_close(bp->dev); 579 + netif_close(bp->dev); 580 580 netdev_unlock(bp->dev); 581 581 } 582 582 rtnl_unlock();
+1
net/core/dev.c
··· 1760 1760 list_del(&single); 1761 1761 } 1762 1762 } 1763 + EXPORT_SYMBOL(netif_close); 1763 1764 1764 1765 void netif_disable_lro(struct net_device *dev) 1765 1766 {