Commit 066d79e4 authored by Boris Ostrovsky's avatar Boris Ostrovsky Committed by David Vrabel

xen/pci: Defer initialization of MSI ops on HVM guests

If the hardware supports APIC virtualization we may decide not to use
pirqs and instead use APIC/x2APIC directly, meaning that we don't want
to set x86_msi.setup_msi_irqs and x86_msi.teardown_msi_irq to
Xen-specific routines.  However, x2APIC is not set up by the time
pci_xen_hvm_init() is called so we need to postpone setting these ops
until later, when we know which APIC mode is used.

(Note that currently x2APIC is never initialized on HVM guests. This
may change in the future)
Signed-off-by: default avatarBoris Ostrovsky <boris.ostrovsky@oracle.com>
Acked-by: default avatarStefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: default avatarDavid Vrabel <david.vrabel@citrix.com>
parent 6945c59c
...@@ -431,6 +431,14 @@ int __init pci_xen_init(void) ...@@ -431,6 +431,14 @@ int __init pci_xen_init(void)
return 0; return 0;
} }
#ifdef CONFIG_PCI_MSI
void __init xen_msi_init(void)
{
x86_msi.setup_msi_irqs = xen_hvm_setup_msi_irqs;
x86_msi.teardown_msi_irq = xen_teardown_msi_irq;
}
#endif
int __init pci_xen_hvm_init(void) int __init pci_xen_hvm_init(void)
{ {
if (!xen_have_vector_callback || !xen_feature(XENFEAT_hvm_pirqs)) if (!xen_have_vector_callback || !xen_feature(XENFEAT_hvm_pirqs))
...@@ -445,8 +453,11 @@ int __init pci_xen_hvm_init(void) ...@@ -445,8 +453,11 @@ int __init pci_xen_hvm_init(void)
#endif #endif
#ifdef CONFIG_PCI_MSI #ifdef CONFIG_PCI_MSI
x86_msi.setup_msi_irqs = xen_hvm_setup_msi_irqs; /*
x86_msi.teardown_msi_irq = xen_teardown_msi_irq; * We need to wait until after x2apic is initialized
* before we can set MSI IRQ ops.
*/
x86_platform.apic_post_init = xen_msi_init;
#endif #endif
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment