Hi Marc, On Mon, May 10, 2021 at 07:23:14PM +0100, Marc Zyngier wrote: > > diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c > > index 3a62d09b8869..275204646c68 100644 > > --- a/drivers/pci/probe.c > > +++ b/drivers/pci/probe.c > > @@ -925,7 +925,8 @@ static int pci_register_host_bridge(struct pci_host_bridge *bridge) > > device_enable_async_suspend(bus->bridge); > > pci_set_bus_of_node(bus); > > pci_set_bus_msi_domain(bus); > > - if (bridge->msi_domain && !dev_get_msi_domain(&bus->dev)) > > + if (bridge->msi_domain && !dev_get_msi_domain(&bus->dev) && > > + !pci_host_of_has_msi_map(parent)) > > bus->bus_flags |= PCI_BUS_FLAGS_NO_MSI; > > > > if (!parent) > > Do we need something similar for IORT, which implements a similar > functionality to "msi-map"? My ACPI boxes seem to get their MSIs just > fine though... I'm not seeing the issue either under ACPI on the fast model, because it doesn't go through pci_host_common_probe(), and bridge->msi_domain is not set: acpi_pci_root_add() pci_acpi_scan_root() acpi_pci_root_create() pci_create_root_bus() pci_register_host_bridge() It doesn't look like any ACPI platform can set bridge->msi_domain at the moment. If they do flip the switch at some point, MSIs won't work and we'll need something for IORT. But I'd leave it out for the moment. Thanks, Jean