From: Mario Limonciello <mario.limonciello@xxxxxxx> When a USB4 dock is unplugged the PCIe bridge it's connected to will remove issue a "Link Down" and "Card not detected event". The PCI core will treat this as a surprise hotplug event and unconfigure all downstream devices. When PCI core gets to the point that the device is removed using pci_device_remove() the runtime count has already been decremented and so calling pm_runtime_put_sync() will cause an underflow. Detect the device ishas been disconnected and skip the call for this cleanup path. Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx> --- v2: * Use pci_dev_is_disconnected() v1: https://lore.kernel.org/linux-usb/20250609020223.269407-1-superm1@xxxxxxxxxx/T/#mf95c947990d016fbfccfd11afe60b8ae08aafa0b --- drivers/pci/pci-driver.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c index 67db34fd10ee7..0d4c67829958b 100644 --- a/drivers/pci/pci-driver.c +++ b/drivers/pci/pci-driver.c @@ -479,7 +479,8 @@ static void pci_device_remove(struct device *dev) pci_iov_remove(pci_dev); /* Undo the runtime PM settings in local_pci_probe() */ - pm_runtime_put_sync(dev); + if (!pci_dev_is_disconnected(pci_dev)) + pm_runtime_put_sync(dev); /* * If the device is still on, set the power state as "unknown", -- 2.43.0