Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 90407c99 authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt
Browse files

powerpc/pci: Fix crash in PCI code on ppc64 when matching device nodes



Commit b5d937de 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: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent a952baa0
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -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;