igc: fix page fault when thunderbolt is unplugged
authorAaron Ma <aaron.ma@canonical.com>
Tue, 13 Jul 2021 13:00:36 +0000 (21:00 +0800)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Fri, 20 Aug 2021 14:36:22 +0000 (07:36 -0700)
commit4b79959510e6612d80f8d86022e0cb44eee6f4a2
treeca7c5e49a3607d761098fdf025e4aa8fd1d7dd4d
parentffc9c3ebb4af870a121da99826e9ccb63dc8b3d7
igc: fix page fault when thunderbolt is unplugged

After unplug thunderbolt dock with i225, pciehp interrupt is triggered,
remove call will read/write mmio address which is already disconnected,
then cause page fault and make system hang.

Check PCI state to remove device safely.

Trace:
BUG: unable to handle page fault for address: 000000000000b604
Oops: 0000 [#1] SMP NOPTI
RIP: 0010:igc_rd32+0x1c/0x90 [igc]
Call Trace:
igc_ptp_suspend+0x6c/0xa0 [igc]
igc_ptp_stop+0x12/0x50 [igc]
igc_remove+0x7f/0x1c0 [igc]
pci_device_remove+0x3e/0xb0
__device_release_driver+0x181/0x240

Fixes: 13b5b7fd6a4a ("igc: Add support for Tx/Rx rings")
Fixes: b03c49cde61f ("igc: Save PTP time before a reset")
Signed-off-by: Aaron Ma <aaron.ma@canonical.com>
Tested-by: Dvora Fuxbrumer <dvorax.fuxbrumer@linux.intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/igc/igc_main.c
drivers/net/ethernet/intel/igc/igc_ptp.c