On Tue, Jul 08, 2025 at 04:40:45PM +0100, Shameer Kolothum wrote: > @@ -937,11 +939,32 @@ static void smmu_base_realize(DeviceState *dev, Error > **errp) > g_free, g_free); > s->smmu_pcibus_by_busptr = g_hash_table_new(NULL, NULL);
Although this is not introduced by this patch, is there a g_hash_table_remove() somewhere in the code? > + /* > + * We only allow default PCIe Root Complex(pcie.0) or pxb-pcie based > extra > + * root complexes to be associated with SMMU. > + */ > + if (pci_bus_is_express(pci_bus) && pci_bus_is_root(pci_bus) && > + object_dynamic_cast(OBJECT(pci_bus)->parent, TYPE_PCI_HOST_BRIDGE)) { > + /* > + * For pxb-pcie, parent_dev will be set. Make sure it is > + * pxb-pcie indeed. > + */ > + if (pci_bus->parent_dev) { > + if (!object_dynamic_cast(OBJECT(pci_bus), TYPE_PXB_PCIE_BUS)) { The pci_bus_is_express(pci_bus) at the top is equivalent to: object_dynamic_cast(OBJECT(pci_bus), TYPE_PCIE_BUS) Then here it is doing: object_dynamic_cast(OBJECT(pci_bus), TYPE_PXB_PCIE_BUS) So, this checks the same pci_bus but expects two different types? I don't see the code check "PCIe Root Complex" explicitly, which should be TYPE_GPEX_HOST? Thanks Nicolin