Re: [PATCH] pci: Don't call resume callback for nearly bound devices
From: Robert Święcki <hidden>
Date: 2021-11-08 21:37:02
Also in:
linux-i2c, linux-pci, lkml
Hi all,
quoted hunk ↗ jump to hunk
quoted
Here's the call tree: really_probe dev->driver = drv; # <-- call_driver_probe dev->bus->probe pci_device_probe __pci_device_probe pci_call_probe local_pci_probe pm_runtime_get_sync ... pci_pm_runtime_resume - if (!pci_dev->driver) # 2a4d9408c9e8 ("PCI: Use to_pci_driver() instead of pci_dev->driver") + if (!to_pci_driver(dev->driver)) return 0 pm->runtime_resume i2c_dw_pci_resume i_dev->init() # <-- NULL ptr deref - pci_dev->driver = pci_drv # b5f9c644eb1b ("PCI: Remove struct pci_dev->driver") pci_drv->probe i2c_dw_pci_probeI think this analysis is right. I didn't test this patch, @Robert, maybe you can do this? Best regards Uwe drivers/pci/pci-driver.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c index 1d98c974381c..202533654012 100644 --- a/drivers/pci/pci-driver.c +++ b/drivers/pci/pci-driver.c@@ -1299,7 +1299,7 @@ static int pci_pm_runtime_resume(struct device *dev) */ pci_restore_standard_config(pci_dev); - if (!to_pci_driver(dev->driver)) + if (!device_is_bound(dev)) return 0; pci_fixup_device(pci_fixup_resume_early, pci_dev);
Yes, that fixes it. Thanks for the patch.