On 20.07.2023 02:32, Volodymyr Babchuk wrote: > --- a/xen/drivers/vpci/msi.c > +++ b/xen/drivers/vpci/msi.c > @@ -70,6 +70,10 @@ static void cf_check control_write( > > if ( vpci_msi_arch_enable(msi, pdev, vectors) ) > return; > + > + /* Make sure guest doesn't enable INTx while enabling MSI. */ > + if ( !is_hardware_domain(pdev->domain) ) > + pci_intx(pdev, false);
Neither this nor ... > --- a/xen/drivers/vpci/msix.c > +++ b/xen/drivers/vpci/msix.c > @@ -97,6 +97,10 @@ static void cf_check control_write( > for ( i = 0; i < msix->max_entries; i++ ) > if ( !msix->entries[i].masked && msix->entries[i].updated ) > update_entry(&msix->entries[i], pdev, i); > + > + /* Make sure guest doesn't enable INTx while enabling MSI-X. */ > + if ( !is_hardware_domain(pdev->domain) ) > + pci_intx(pdev, false); ... this has a counterpart passing true, to restore pin-based IRQs. While it looks like we have a pre-existing issue here as well (see __pci_disable_msi() vs __pci_disable_msix()), could you clarify how this is meant to work for DomU-s? Jan
