mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 06:31:58 +02:00
bnxt_en: Unregister PTP during PCI shutdown and suspend
If we go through the PCI shutdown or suspend path, we shutdown the
NIC but PTP remains registered. If the kernel continues to run for
a little bit, the periodic PTP .do_aux_work() function may be called
and it will read the PHC from the BAR register. Since the device
has already been disabled, it will cause a PCIe completion timeout.
Fix it by calling bnxt_ptp_clear() in the PCI shutdown/suspend
handlers. bnxt_ptp_clear() will unregister from PTP and
.do_aux_work() will be canceled.
In bnxt_resume(), we need to re-initialize PTP.
Fixes: a521c8a01d ("bnxt_en: Move bnxt_ptp_init() from bnxt_open() back to bnxt_init_one()")
Cc: Richard Cochran <richardcochran@gmail.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
1e9614cd95
commit
3661c05c54
|
|
@ -16245,6 +16245,7 @@ static void bnxt_shutdown(struct pci_dev *pdev)
|
|||
if (netif_running(dev))
|
||||
dev_close(dev);
|
||||
|
||||
bnxt_ptp_clear(bp);
|
||||
bnxt_clear_int_mode(bp);
|
||||
pci_disable_device(pdev);
|
||||
|
||||
|
|
@ -16272,6 +16273,7 @@ static int bnxt_suspend(struct device *device)
|
|||
rc = bnxt_close(dev);
|
||||
}
|
||||
bnxt_hwrm_func_drv_unrgtr(bp);
|
||||
bnxt_ptp_clear(bp);
|
||||
pci_disable_device(bp->pdev);
|
||||
bnxt_free_ctx_mem(bp, false);
|
||||
rtnl_unlock();
|
||||
|
|
@ -16315,6 +16317,10 @@ static int bnxt_resume(struct device *device)
|
|||
if (bp->fw_crash_mem)
|
||||
bnxt_hwrm_crash_dump_mem_cfg(bp);
|
||||
|
||||
if (bnxt_ptp_init(bp)) {
|
||||
kfree(bp->ptp_cfg);
|
||||
bp->ptp_cfg = NULL;
|
||||
}
|
||||
bnxt_get_wol_settings(bp);
|
||||
if (netif_running(dev)) {
|
||||
rc = bnxt_open(dev);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user