From: Myron Stowe Date: Thu, 31 Jan 2013 23:29:25 +0000 (-0700) Subject: PCI/ASPM: Deallocate upstream link state even if device is not PCIe X-Git-Tag: next-20130218~84^2~4^2~1 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=84fb913c43475e0d1e061220ef4622e3e82e91d6;p=karo-tx-linux.git 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 Tested-by: Joe Lawrence Signed-off-by: Myron Stowe Signed-off-by: Bjorn Helgaas --- diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c index b52630b8eada..ca44115ca1f1 100644 --- a/drivers/pci/pcie/aspm.c +++ b/drivers/pci/pcie/aspm.c @@ -634,10 +634,7 @@ void pcie_aspm_exit_link_state(struct pci_dev *pdev) struct pci_dev *parent = pdev->bus->self; struct pcie_link_state *link, *root, *parent_link; - if (!pci_is_pcie(pdev) || !parent || !parent->link_state) - return; - if ((pci_pcie_type(parent) != PCI_EXP_TYPE_ROOT_PORT) && - (pci_pcie_type(parent) != PCI_EXP_TYPE_DOWNSTREAM)) + if (!parent || !parent->link_state) return; down_read(&pci_bus_sem);