Commit 1a037782 authored by Venkat Duvvuru's avatar Venkat Duvvuru Committed by David S. Miller

bnxt_en: close & open NIC, only when the interface is in running state.

bnxt_restore_pf_fw_resources routine frees PF resources by calling
close_nic and allocates the resources back, by doing open_nic. However,
this is not needed, if the PF is already in closed state.

This bug causes the driver to call open the device and call request_irq()
when it is not needed.  Ultimately, pci_disable_msix() will crash
when bnxt_en is unloaded.

This patch fixes the problem by skipping __bnxt_close_nic and
__bnxt_open_nic inside bnxt_restore_pf_fw_resources routine, if the
interface is not running.

Fixes: 80fcaf46 ("bnxt_en: Restore MSIX after disabling SRIOV.")
Signed-off-by: default avatarVenkat Duvvuru <venkatkumar.duvvuru@broadcom.com>
Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6ae777ea
...@@ -8432,13 +8432,20 @@ int bnxt_restore_pf_fw_resources(struct bnxt *bp) ...@@ -8432,13 +8432,20 @@ int bnxt_restore_pf_fw_resources(struct bnxt *bp)
return 0; return 0;
bnxt_hwrm_func_qcaps(bp); bnxt_hwrm_func_qcaps(bp);
__bnxt_close_nic(bp, true, false);
if (netif_running(bp->dev))
__bnxt_close_nic(bp, true, false);
bnxt_clear_int_mode(bp); bnxt_clear_int_mode(bp);
rc = bnxt_init_int_mode(bp); rc = bnxt_init_int_mode(bp);
if (rc)
dev_close(bp->dev); if (netif_running(bp->dev)) {
else if (rc)
rc = bnxt_open_nic(bp, true, false); dev_close(bp->dev);
else
rc = bnxt_open_nic(bp, true, false);
}
return rc; return rc;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment