PCI/ASPM: Deallocate upstream link state even if device is not PCIe
On PCI bus hotplug removal, pcie_aspm_exit_link_state() can potentially skip parent devices that have link_state allocated. Instead of exiting early if a given device is not PCIe, check whether or not the device's parent has link_state allocated. This enables pcie_aspm_exit_link_state() to properly clean up parent link_state when the last function in a slot might not be PCIe. Reported-by: Joe Lawrence <joe.lawrence@stratus.com> Tested-by: Joe Lawrence <joe.lawrence@stratus.com> Signed-off-by: Myron Stowe <myron.stowe@redhat.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
parent
d1c3ed669a
commit
84fb913c43
|
@ -634,10 +634,7 @@ void pcie_aspm_exit_link_state(struct pci_dev *pdev)
|
||||||
struct pci_dev *parent = pdev->bus->self;
|
struct pci_dev *parent = pdev->bus->self;
|
||||||
struct pcie_link_state *link, *root, *parent_link;
|
struct pcie_link_state *link, *root, *parent_link;
|
||||||
|
|
||||||
if (!pci_is_pcie(pdev) || !parent || !parent->link_state)
|
if (!parent || !parent->link_state)
|
||||||
return;
|
|
||||||
if ((pci_pcie_type(parent) != PCI_EXP_TYPE_ROOT_PORT) &&
|
|
||||||
(pci_pcie_type(parent) != PCI_EXP_TYPE_DOWNSTREAM))
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
down_read(&pci_bus_sem);
|
down_read(&pci_bus_sem);
|
||||||
|
|
Loading…
Reference in New Issue