On Tue, Jul 01, 2025 at 01:28:59PM -0600, Alex Williamson wrote: > > +static bool pci_has_mmio(struct pci_dev *pdev) > > +{ > > + unsigned int i; > > + > > + for (i = 0; i <= PCI_ROM_RESOURCE; i++) { > > + struct resource *res = pci_resource_n(pdev, i); > > + > > + if (resource_size(res) && resource_type(res) == IORESOURCE_MEM) > > + return true; > > + } > > + return false; > > +} > > Maybe the intent is to make this as generic as possible, but it seems > to only be used for bridge devices, so technically it could get > away with testing only the first two resources, right? Yes, the intent was to be general, yes it could probably check only the two type1 BARs, however I was thinking the ROM should be included too, but I don't recall if type 1 has a ROM BAR or not.. > > +enum pci_bus_isolation pci_bus_isolated(struct pci_bus *bus) > > +{ > > + struct pci_dev *bridge = bus->self; > > + int type; > > + > > + /* Consider virtual busses isolated */ > > + if (!bridge) > > + return PCIE_ISOLATED; > > + if (pci_is_root_bus(bus)) > > + return PCIE_ISOLATED; > > How do we know the root bus isn't conventional? I suppose this is only > called by IOMMU code, but QEMU can make some pretty weird > configurations. I feel pretty wobbly on the root bus and root port parts here. So I'm not sure about this. My ARM system doesn't seem to have these in the same way. Since we have a bus->self maybe it should be checking the bus->self's type the same as normal but we should not inherit bus->self's group in the iommu.c code? Jason