On 1/9/24 16:51, Stewart Hildebrand wrote: > diff --git a/xen/drivers/passthrough/pci.c b/xen/drivers/passthrough/pci.c > index 3a973324bca1..a902de6a8693 100644 > --- a/xen/drivers/passthrough/pci.c > +++ b/xen/drivers/passthrough/pci.c > @@ -1476,6 +1485,10 @@ static int assign_device(struct domain *d, u16 seg, u8 > bus, u8 devfn, u32 flag) > if ( pdev->broken && d != hardware_domain && d != dom_io ) > goto done; > > + write_lock(&pdev->domain->pci_lock); > + vpci_deassign_device(pdev); > + write_unlock(&pdev->domain->pci_lock); > + > rc = pdev_msix_assign(d, pdev); > if ( rc ) > goto done; > @@ -1502,6 +1515,10 @@ static int assign_device(struct domain *d, u16 seg, u8 > bus, u8 devfn, u32 flag) > pci_to_dev(pdev), flag); > } >
After rebasing this on the following commit: cb4ecb3cc17b ("pci: fail device assignment if phantom functions cannot be assigned") I'll add this here: if ( rc ) goto done; I'll plan on retaining Roger's R-b tag and and Jan's A-b tags for v13. > + write_lock(&d->pci_lock); > + rc = vpci_assign_device(pdev); > + write_unlock(&d->pci_lock); > + > done: > if ( rc ) > printk(XENLOG_G_WARNING "%pd: assign (%pp) failed (%d)\n",