On 15.01.2024 20:43, Stewart Hildebrand wrote: > @@ -2888,6 +2888,8 @@ int allocate_and_map_msi_pirq(struct domain *d, int > index, int *pirq_p, > { > int irq, pirq, ret; > > + ASSERT(pcidevs_locked() || rw_is_locked(&d->pci_lock));
If either lock is sufficient to hold here, ... > --- a/xen/arch/x86/physdev.c > +++ b/xen/arch/x86/physdev.c > @@ -123,7 +123,9 @@ int physdev_map_pirq(domid_t domid, int type, int *index, > int *pirq_p, > > case MAP_PIRQ_TYPE_MSI: > case MAP_PIRQ_TYPE_MULTI_MSI: > + pcidevs_lock(); > ret = allocate_and_map_msi_pirq(d, *index, pirq_p, type, msi); > + pcidevs_unlock(); > break; ... why is it the global lock that's being acquired here? Jan