]> git.baikalelectronics.ru Git - kernel.git/commit
Revert "PCI: Use to_pci_driver() instead of pci_dev->driver"
authorBjorn Helgaas <bhelgaas@google.com>
Wed, 10 Nov 2021 18:03:34 +0000 (12:03 -0600)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 11 Nov 2021 19:36:22 +0000 (13:36 -0600)
commit1c946c15ec2bcec8e1319791de88c6d61245995c
treed7899667bdfeea595319549c90a184ecf5849490
parentd7e00a401d2162e9eb3a3741f45398ce8973a34b
Revert "PCI: Use to_pci_driver() instead of pci_dev->driver"

This reverts commit eed08cea8988a38f1dba20a9bc6817b57aceca6a.

Robert reported a NULL pointer dereference caused by the PCI core
(local_pci_probe()) calling the i2c_designware_pci driver's
.runtime_resume() method before the .probe() method.  i2c_dw_pci_resume()
depends on initialization done by i2c_dw_pci_probe().

Prior to eed08cea8988 ("PCI: Use to_pci_driver() instead of
pci_dev->driver"), pci_pm_runtime_resume() avoided calling the
.runtime_resume() method because pci_dev->driver had not been set yet.

eed08cea8988 and 73eaf9edca55 ("PCI: Remove struct pci_dev->driver"),
removed pci_dev->driver, replacing it by device->driver, which *has* been
set by this time, so pci_pm_runtime_resume() called the .runtime_resume()
method when it previously had not.

Fixes: eed08cea8988 ("PCI: Use to_pci_driver() instead of pci_dev->driver")
Link: https://lore.kernel.org/linux-i2c/CAP145pgdrdiMAT7=-iB1DMgA7t_bMqTcJL4N0=6u8kNY3EU0dw@mail.gmail.com/
Reported-by: Robert Święcki <robert@swiecki.net>
Tested-by: Robert Święcki <robert@swiecki.net>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/iov.c
drivers/pci/pci-driver.c
drivers/pci/pci.c
drivers/pci/pcie/err.c