On 04.02.2022 07:34, Oleksandr Andrushchenko wrote: > --- a/xen/drivers/vpci/vpci.c > +++ b/xen/drivers/vpci/vpci.c > @@ -168,6 +168,35 @@ static void vpci_remove_virtual_device(struct domain *d, > pdev->vpci->guest_sbdf.sbdf = ~0; > } > > +/* > + * Find the physical device which is mapped to the virtual device > + * and translate virtual SBDF to the physical one. > + */ > +bool vpci_translate_virtual_device(const struct domain *d, pci_sbdf_t *sbdf) > +{ > + struct pci_dev *pdev; > + > + ASSERT(!is_hardware_domain(d));
In addition to this, don't you also need to assert that pcidevs_lock is held (or if it isn't, you'd need to acquire it) for ... > + for_each_pdev( d, pdev ) ... this to be race-free? Jan