Skip to content

Commit

Permalink
powerpc/pci: Fix crash in PCI code on ppc64 when matching device nodes
Browse files Browse the repository at this point in the history
Commit b5d937d has a bug which causes
basically a NULL dereference in the PCI code during boot on ppc64
machines.

fetch_dev_dn() is called when dev->dev.of_node is NULL, so using that
as the starting point for the search makes no sense. It should instead
start from the device node of the PHB.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
  • Loading branch information
Benjamin Herrenschmidt committed Mar 20, 2011
1 parent a952baa commit 90407c9
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions arch/powerpc/kernel/pci_dn.c
Original file line number Diff line number Diff line change
Expand Up @@ -176,11 +176,14 @@ static void *is_devfn_node(struct device_node *dn, void *data)
*/
struct device_node *fetch_dev_dn(struct pci_dev *dev)
{
struct device_node *orig_dn = dev->dev.of_node;
struct pci_controller *phb = dev->sysdata;
struct device_node *dn;
unsigned long searchval = (dev->bus->number << 8) | dev->devfn;

dn = traverse_pci_devices(orig_dn, is_devfn_node, (void *)searchval);
if (WARN_ON(!phb))
return NULL;

dn = traverse_pci_devices(phb->dn, is_devfn_node, (void *)searchval);
if (dn)
dev->dev.of_node = dn;
return dn;
Expand Down

0 comments on commit 90407c9

Please sign in to comment.