diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index 1f48f2aac6..b002eb2072 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -1016,7 +1016,7 @@ static int cf_check init_header(struct pci_dev *pdev) pci_conf_write16(pdev->sbdf, PCI_COMMAND, cmd); return rc; } -REGISTER_VPCI_INIT(init_header, VPCI_PRIORITY_MIDDLE); +REGISTER_VPCI_INIT(init_header, VPCI_PRIORITY_HIGH); /* * Local variables: diff --git a/xen/drivers/vpci/msix.c b/xen/drivers/vpci/msix.c index 7d6e691b36..140f5ab284 100644 --- a/xen/drivers/vpci/msix.c +++ b/xen/drivers/vpci/msix.c @@ -790,9 +790,14 @@ static int cf_check init_msix(struct pci_dev *pdev) pdev->vpci->msix = msix; list_add(&msix->next, &d->arch.hvm.msix_tables); - return 0; + /* + * vPCI header initialization will have mapped the whole BAR into the + * p2m, as MSI-X capability was not yet initialized. Crave a hole for + * the MSI-X table here, so that Xen can trap accesses. + */ + return vpci_make_msix_hole(pdev); } -REGISTER_VPCI_INIT(init_msix, VPCI_PRIORITY_HIGH); +REGISTER_VPCI_INIT(init_msix, VPCI_PRIORITY_MIDDLE); /* * Local variables: