From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
To: linux-pci@vger.kernel.org, "Barnes, Jesse" <jesse.barnes@intel.com>
Cc: James Bottomley <James.Bottomley@HansenPartnership.com>,
Len Brown <lenb@kernel.org>,
linux-acpi@vger.kernel.org,
linux-kernel <linux-kernel@vger.kernel.org>,
shaohua.li@intel.com, Grant Grundler <grundler@parisc-linux.org>
Subject: [PATCH 4/8] PCI hotplug: fix wrong assumption in acpi_get_hp_hw_control_from_firmware
Date: Wed, 28 Jan 2009 20:55:32 +0900 [thread overview]
Message-ID: <498047B4.3030602@jp.fujitsu.com> (raw)
In-Reply-To: <498045D1.60005@jp.fujitsu.com>
Current acpi_get_hp_hw_control_from_firmware() has a assumption that
pci_bus->self is NULL on a PCI root bus. But it might not be true on
some platforms. Because of this wrong assumption, current
acpi_get_hp_hw_control_from_firmware() might cause endless loop. We
must check pci_bus->parent instead.
Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
---
drivers/pci/hotplug/acpi_pcihp.c | 34 ++++++++++++----------------------
1 file changed, 12 insertions(+), 22 deletions(-)
Index: linux-2.6.29-rc2/drivers/pci/hotplug/acpi_pcihp.c
===================================================================
--- linux-2.6.29-rc2.orig/drivers/pci/hotplug/acpi_pcihp.c
+++ linux-2.6.29-rc2/drivers/pci/hotplug/acpi_pcihp.c
@@ -373,12 +373,10 @@ EXPORT_SYMBOL_GPL(acpi_get_hp_params_fro
*
* Attempt to take hotplug control from firmware.
*/
-int acpi_get_hp_hw_control_from_firmware(struct pci_dev *dev, u32 flags)
+int acpi_get_hp_hw_control_from_firmware(struct pci_dev *pdev, u32 flags)
{
acpi_status status;
acpi_handle chandle, handle;
- struct pci_dev *pdev = dev;
- struct pci_bus *parent;
struct acpi_buffer string = { ACPI_ALLOCATE_BUFFER, NULL };
flags &= (OSC_PCI_EXPRESS_NATIVE_HP_CONTROL |
@@ -410,26 +408,18 @@ int acpi_get_hp_hw_control_from_firmware
string = (struct acpi_buffer){ ACPI_ALLOCATE_BUFFER, NULL };
}
- pdev = dev;
- handle = DEVICE_ACPI_HANDLE(&dev->dev);
- while (!handle) {
+ handle = DEVICE_ACPI_HANDLE(&pdev->dev);
+ if (!handle) {
/*
* This hotplug controller was not listed in the ACPI name
* space at all. Try to get acpi handle of parent pci bus.
*/
- if (!pdev || !pdev->bus->parent)
- break;
- parent = pdev->bus->parent;
- dbg("Could not find %s in acpi namespace, trying parent\n",
- pci_name(pdev));
- if (!parent->self)
- /* Parent must be a host bridge */
- handle = acpi_get_pci_rootbridge_handle(
- pci_domain_nr(parent),
- parent->number);
- else
- handle = DEVICE_ACPI_HANDLE(&(parent->self->dev));
- pdev = parent->self;
+ struct pci_bus *pbus;
+ for (pbus = pdev->bus; pbus; pbus = pbus->parent) {
+ handle = acpi_pci_get_bridge_handle(pbus);
+ if (handle)
+ break;
+ }
}
while (handle) {
@@ -448,13 +438,13 @@ int acpi_get_hp_hw_control_from_firmware
}
dbg("Cannot get control of hotplug hardware for pci %s\n",
- pci_name(dev));
+ pci_name(pdev));
kfree(string.pointer);
return -ENODEV;
got_one:
- dbg("Gained control for hotplug HW for pci %s (%s)\n", pci_name(dev),
- (char *)string.pointer);
+ dbg("Gained control for hotplug HW for pci %s (%s)\n",
+ pci_name(pdev), (char *)string.pointer);
kfree(string.pointer);
return 0;
}
next prev parent reply other threads:[~2009-01-28 11:55 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-10 16:17 ACPI hotplug panic with current git head James Bottomley
2009-01-12 21:16 ` Len Brown
2009-01-13 0:48 ` James Bottomley
2009-01-13 3:40 ` Len Brown
2009-01-15 19:01 ` James Bottomley
2009-01-15 19:22 ` Len Brown
2009-01-15 19:54 ` James Bottomley
2009-01-15 20:12 ` James Bottomley
2009-01-16 6:07 ` Kenji Kaneshige
2009-01-16 14:19 ` James Bottomley
2009-01-19 1:10 ` Kenji Kaneshige
2009-01-19 1:23 ` James Bottomley
2009-01-19 3:11 ` Kenji Kaneshige
2009-01-21 17:26 ` James Bottomley
2009-01-26 2:11 ` Kenji Kaneshige
2009-01-26 6:21 ` Grant Grundler
2009-01-26 12:27 ` Kenji Kaneshige
2009-01-28 11:47 ` Kenji Kaneshige
2009-01-28 11:48 ` [PATCH 1/8] PCI/ACPI: fix wrong assumption in acpi_pci_get_bridge_handle Kenji Kaneshige
2009-01-28 11:50 ` [PATCH 2/8] PCI/ACPI: fix wrong assumption in acpi_find_root_bridge_handle Kenji Kaneshige
2009-01-28 11:51 ` [PATCH 3/8] PCI hotplug: fix wrong assumption in acpi_get_hp_params_from_firmware Kenji Kaneshige
2009-01-28 11:55 ` Kenji Kaneshige [this message]
2009-01-28 11:56 ` [PATCH 5/8] PCI: fix wrong assumption in pci_find_upstream_pcie_bridge Kenji Kaneshige
2009-01-28 11:57 ` [PATCH 6/8] PCI: fix wrong assumption in pci_read_bridge_bases Kenji Kaneshige
2009-01-28 11:58 ` [PATCH 7/8] PCI: fix wrong assumption in pci_get_interrupt_pin Kenji Kaneshige
2009-01-28 11:59 ` [PATCH 8/8] PCI: fix wrong assumption in pci_common_swizzle Kenji Kaneshige
2009-01-28 12:05 ` ACPI hotplug panic with current git head Kenji Kaneshige
2009-02-14 0:30 ` Jesse Barnes
[not found] ` <499A46CC.1020102@jp.fujitsu.com>
2009-02-18 18:59 ` Jesse Barnes
2009-02-18 19:08 ` James Bottomley
2009-02-18 19:41 ` Jesse Barnes
2009-03-02 17:07 ` James Bottomley
2009-01-16 20:08 ` Len Brown
2009-01-16 20:22 ` Jesse Barnes
2009-01-19 1:15 ` Kenji Kaneshige
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=498047B4.3030602@jp.fujitsu.com \
--to=kaneshige.kenji@jp.fujitsu.com \
--cc=James.Bottomley@HansenPartnership.com \
--cc=grundler@parisc-linux.org \
--cc=jesse.barnes@intel.com \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=shaohua.li@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.