From: Manivannan Sadhasivam Date: Thu, 16 Jan 2025 14:09:12 +0000 (+0530) Subject: PCI/pwrctrl: Move pci_pwrctrl_unregister() to pci_destroy_dev() X-Git-Tag: v6.15-rc1~119^2~24^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2d923930f2e3fe1ecf060169f57980da819a191f;p=thirdparty%2Flinux.git PCI/pwrctrl: Move pci_pwrctrl_unregister() to pci_destroy_dev() The PCI core will try to access the devices even after pci_stop_dev() for things like Data Object Exchange (DOE), ASPM, etc. So, move pci_pwrctrl_unregister() to the near end of pci_destroy_dev() to make sure that the devices are powered down only after the PCI core is done with them. Suggested-by: Lukas Wunner Reviewed-by: Lukas Wunner Tested-by: Bartosz Golaszewski Signed-off-by: Manivannan Sadhasivam Link: https://lore.kernel.org/r/20250116-pci-pwrctrl-slot-v3-2-827473c8fbf4@linaro.org [kwilczynski: commit log] Signed-off-by: Krzysztof WilczyƄski --- diff --git a/drivers/pci/remove.c b/drivers/pci/remove.c index efc37fcb73e24..58859f9d92f73 100644 --- a/drivers/pci/remove.c +++ b/drivers/pci/remove.c @@ -41,7 +41,6 @@ static void pci_stop_dev(struct pci_dev *dev) if (!pci_dev_test_and_clear_added(dev)) return; - pci_pwrctrl_unregister(&dev->dev); device_release_driver(&dev->dev); pci_proc_detach_device(dev); pci_remove_sysfs_dev_files(dev); @@ -64,6 +63,7 @@ static void pci_destroy_dev(struct pci_dev *dev) pci_doe_destroy(dev); pcie_aspm_exit_link_state(dev); pci_bridge_d3_update(dev); + pci_pwrctrl_unregister(&dev->dev); pci_free_resources(dev); put_device(&dev->dev); }