On Thu, Jul 20, 2023 at 06:03:49PM +0200, Jan Beulich wrote: > On 20.07.2023 02:32, Volodymyr Babchuk wrote: > > --- a/xen/drivers/vpci/msi.c > > +++ b/xen/drivers/vpci/msi.c > > @@ -190,6 +190,8 @@ static int cf_check init_msi(struct pci_dev *pdev) > > uint16_t control; > > int ret; > > > > + ASSERT(rw_is_write_locked(&pdev->domain->pci_lock)); > > I'm afraid I have to ask the opposite question, compared to Roger's: > Why do you need the lock held for write here (and in init_msix())? > Neither list of devices nor the pdev->vpci pointer are being > altered.
This is called from vpci_add_handlers() which will acquire (or requires being called) with the lock in write mode in order to set pdev->vpci I would assume. Strictly speaking however the init handlers don't require the lock in write mode unless we use such locking to get exclusive access to all the devices assigned to the domain BARs array for modify_bars(). Thanks, Roger.
