> On Feb 22, 2022, at 5:40 AM, Stefan Hajnoczi <stefa...@redhat.com> wrote: > > 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.
OK, will avoid the global. We would need to access the hash table concurrently since there could be more than one device in the same bus - so a mutex would be needed here. > >> + >> +#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. I think we won’t hit this case. g_hash_table_new_full() would always succeed. Thank you! -- Jag