forked from Minki/linux
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: 80fcaf46c0
("bnxt_en: Restore MSIX after disabling SRIOV.")
Signed-off-by: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
6ae777eab2
commit
1a037782e7
@ -8432,13 +8432,20 @@ int bnxt_restore_pf_fw_resources(struct bnxt *bp)
|
||||
return 0;
|
||||
|
||||
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);
|
||||
rc = bnxt_init_int_mode(bp);
|
||||
if (rc)
|
||||
dev_close(bp->dev);
|
||||
else
|
||||
rc = bnxt_open_nic(bp, true, false);
|
||||
|
||||
if (netif_running(bp->dev)) {
|
||||
if (rc)
|
||||
dev_close(bp->dev);
|
||||
else
|
||||
rc = bnxt_open_nic(bp, true, false);
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user