PCI hotplug: fix wrong assumption in acpi_get_hp_params_from_firmware
Current acpi_get_hp_params_from_firmware() has a assumption that pci_bus->self is NULL on the root pci bus. But it might not true on some platforms. Because of this wrong assumption, current acpi_get_hp_params_from_firmware() might cause endless loop. We must check pci_bus->parent instead. Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
Родитель
d18690af62
Коммит
267efd7eec
|
@ -332,19 +332,14 @@ acpi_status acpi_get_hp_params_from_firmware(struct pci_bus *bus,
|
||||||
{
|
{
|
||||||
acpi_status status = AE_NOT_FOUND;
|
acpi_status status = AE_NOT_FOUND;
|
||||||
acpi_handle handle, phandle;
|
acpi_handle handle, phandle;
|
||||||
struct pci_bus *pbus = bus;
|
struct pci_bus *pbus;
|
||||||
struct pci_dev *pdev;
|
|
||||||
|
|
||||||
do {
|
handle = NULL;
|
||||||
pdev = pbus->self;
|
for (pbus = bus; pbus; pbus = pbus->parent) {
|
||||||
if (!pdev) {
|
handle = acpi_pci_get_bridge_handle(pbus);
|
||||||
handle = acpi_get_pci_rootbridge_handle(
|
if (handle)
|
||||||
pci_domain_nr(pbus), pbus->number);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
handle = DEVICE_ACPI_HANDLE(&(pdev->dev));
|
|
||||||
pbus = pbus->parent;
|
|
||||||
} while (!handle);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* _HPP settings apply to all child buses, until another _HPP is
|
* _HPP settings apply to all child buses, until another _HPP is
|
||||||
|
|
Загрузка…
Ссылка в новой задаче