]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
pds_core: cancel pending PCI reset work on AER recovery
authorNikhil P. Rao <nikhil.rao@amd.com>
Mon, 27 Jul 2026 17:00:30 +0000 (17:00 +0000)
committerJakub Kicinski <kuba@kernel.org>
Thu, 30 Jul 2026 23:44:26 +0000 (16:44 -0700)
commit57d635329d799b79096155cdf47ee0013d6780d1
tree7fcd00ef679f986e6339c61e18dbb310dee34e5f
parentcd09971dcc1c499ae0879010a00e9dba87abdc4f
pds_core: cancel pending PCI reset work on AER recovery

pdsc_check_pci_health() queues pci_reset_work when it sees a broken PCI
connection, and nothing cancels it. When the PCI core starts AER
recovery, pdsc_pci_error_detected() runs pdsc_reset_prepare() and
recovers the device, but a pci_reset_work queued just before is left
pending. If it runs after recovery released the device lock, it resets a
device the driver now considers healthy, bouncing the link for no reason.

Cancel pci_reset_work in pdsc_pci_error_detected() after
pdsc_reset_prepare(), which has already stopped the health thread so it
cannot requeue the work. cancel_work_sync() is safe under the device
lock here because pdsc_pci_reset_thread() uses pci_try_reset_function(),
which returns instead of blocking on the lock. Only PFs initialize
pci_reset_work, so guard the cancel with !is_virtfn.

Fixes: 81665adf25d2 ("pds_core: Fix pdsc_check_pci_health function to use work thread")
Reported-by: sashiko-bot <sashiko-bot@kernel.org>
Closes: https://sashiko.dev/#/patchset/20260714180223.1642792-2-nikhil.rao%40amd.com?part=1
Signed-off-by: Nikhil P. Rao <nikhil.rao@amd.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Link: https://patch.msgid.link/20260727170030.361116-1-nikhil.rao@amd.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/amd/pds_core/main.c