On Thu, Feb 17, 2022 at 02:48:59AM -0500, Jagannathan Raman wrote: > +struct RemoteIommuElem { > + AddressSpace as; > + MemoryRegion mr; > +}; > + > +GHashTable *remote_iommu_elem_by_bdf;
A mutable global hash table requires synchronization when device emulation runs in multiple threads. I suggest using pci_setup_iommu()'s iommu_opaque argument to avoid the global. If there is only 1 device per remote PCI bus, then there are no further synchronization concerns. > + > +#define INT2VOIDP(i) (void *)(uintptr_t)(i) > + > +static AddressSpace *remote_iommu_find_add_as(PCIBus *pci_bus, > + void *opaque, int devfn) > +{ > + struct RemoteIommuElem *elem = NULL; > + int pci_bdf = PCI_BUILD_BDF(pci_bus_num(pci_bus), devfn); > + > + if (!remote_iommu_elem_by_bdf) { > + return &address_space_memory; > + } When can this happen? remote_configure_iommu() allocates remote_iommu_elem_by_bdf so it should always be non-NULL.
signature.asc
Description: PGP signature