On Thu, Jan 10, 2019 at 01:35:51PM +0000, Jean-Philippe Brucker wrote: > When executed for a PCI_ROOT_COMPLEX type, iort_match_node_callback() > expects the opaque pointer argument to be a PCI bus device. At the > moment rc_dma_get_range() passes the PCI endpoint instead of the bus, > and we've been lucky to have pci_domain_nr(ptr) return 0 instead of > crashing. Pass the bus device to iort_scan_node(). Arguably it would have been better if it crashed instead of returning 0 (which is the default PCI domain number in most systems) by sheer luck. Anyway - thanks for spotting this, I will mark if for stable and send it to Will for an upcoming -rc asap. Thanks, Lorenzo > Reported-by: Eric Auger <eric.auger@xxxxxxxxxx> > Fixes: 5ac65e8c8941 ("ACPI/IORT: Support address size limit for root complexes") > Signed-off-by: Jean-Philippe Brucker <jean-philippe.brucker@xxxxxxx> > --- > drivers/acpi/arm64/iort.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c > index fdd90ffceb85..c08afe44c488 100644 > --- a/drivers/acpi/arm64/iort.c > +++ b/drivers/acpi/arm64/iort.c > @@ -952,9 +952,10 @@ static int rc_dma_get_range(struct device *dev, u64 *size) > { > struct acpi_iort_node *node; > struct acpi_iort_root_complex *rc; > + struct pci_bus *pbus = to_pci_dev(dev)->bus; > > node = iort_scan_node(ACPI_IORT_NODE_PCI_ROOT_COMPLEX, > - iort_match_node_callback, dev); > + iort_match_node_callback, &pbus->dev); > if (!node || node->revision < 1) > return -ENODEV; > > -- > 2.19.1 >