[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3] VT-d PI: disable VT-d PI when APICv is disabled
From the context calling pi_desc_init(), we can conclude the current implementation of VT-d PI depends on CPU-side PI. If we disable APICv but enable VT-d PI explicitly in xen boot command line, we would get an assertion failure. This patch disables VT-d PI when APICv is disabled and adds some related description to docs. With this patch, using 'xl dmesg' we can see the following output on a machine with CPU-side PI disabled but IOMMU-side PI enabled: ... (XEN) [ 10.154585] Intel VT-d Snoop Control enabled. (XEN) [ 10.160565] Intel VT-d Dom0 DMA Passthrough not enabled. (XEN) [ 10.167514] Intel VT-d Queued Invalidation enabled. (XEN) [ 10.174024] Intel VT-d Interrupt Remapping enabled. (XEN) [ 10.180538] Intel VT-d Posted Interrupt enabled. (XEN) [ 10.186797] Intel VT-d Shared EPT tables enabled. (XEN) [ 10.205834] I/O virtualisation enabled (XEN) [ 10.211212] - Dom0 mode: Relaxed (XEN) [ 10.216159] Interrupt remapping enabled (XEN) [ 10.221619] nr_sockets: 5 (XEN) [ 10.225874] Enabled directed EOI with ioapic_ack_old on! (XEN) [ 10.233809] ENABLING IO-APIC IRQs (XEN) [ 10.238757] -> Using old ACK method (XEN) [ 10.244476] ..TIMER: vector=0xF0 apic1=0 pin1=2 apic2=-1 pin2=-1 (XEN) [ 10.454461] TSC deadline timer enabled (XEN) [ 10.506000] Defaulting to alternative key handling; send 'A' to switch to normal mode. (XEN) [ 10.516577] mwait-idle: MWAIT substates: 0x2020 (XEN) [ 10.518052] mwait-idle: v0.4.1 model 0x55 (XEN) [ 10.519520] mwait-idle: lapic_timer_reliable_states 0xffffffff (XEN) [ 10.521016] Intel VT-d Posted Interrupt is disabled for CPU-side Posted Interrupt is not enabled (XEN) [ 10.523872] VMX: Supported advanced features: (XEN) [ 10.525341] - APIC MMIO access virtualisation (XEN) [ 10.526810] - APIC TPR shadow (XEN) [ 10.528265] - Extended Page Tables (EPT) (XEN) [ 10.529731] - Virtual-Processor Identifiers (VPID) (XEN) [ 10.531207] - Virtual NMI (XEN) [ 10.532657] - MSR direct-access bitmap ... At first, we announce VT-d PI is enabled, but then disabled it. Hope this is acceptable. Signed-off-by: Chao Gao <chao.gao@xxxxxxxxx> --- v3: - check relevant bit directly other than checking the apicv option - add sample of 'xl dmesg' v2: - add missing S-o-b - comments changes - change bool_t to bool and move 'opt_apicv_enabled' declaration to vmcs.h --- docs/misc/xen-command-line.markdown | 6 ++++-- xen/arch/x86/hvm/vmx/vmcs.c | 7 +++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/docs/misc/xen-command-line.markdown b/docs/misc/xen-command-line.markdown index 44d9985..a5c261d 100644 --- a/docs/misc/xen-command-line.markdown +++ b/docs/misc/xen-command-line.markdown @@ -173,7 +173,8 @@ to boot on systems with the following errata: Permit Xen to use APIC Virtualisation Extensions. This is an optimisation available as part of VT-x, and allows hardware to take care of the guests APIC -handling, rather than requiring emulation in Xen. +handling, rather than requiring emulation in Xen. IOMMU-side interrupt posting +relies on this extensions, see **iommu** parameter below. ### apic\_verbosity > `= verbose | debug` @@ -1001,7 +1002,8 @@ debug hypervisor only). > Default: `false` >> Control the use of interrupt posting, which depends on the availability of ->> interrupt remapping. +>> interrupt remapping and CPU-side interrupt posting, which in turn requires +>> **APIC Virtualization Extensions** above is not disabled. > `qinval` (VT-d) diff --git a/xen/arch/x86/hvm/vmx/vmcs.c b/xen/arch/x86/hvm/vmx/vmcs.c index 8103b20..9293814 100644 --- a/xen/arch/x86/hvm/vmx/vmcs.c +++ b/xen/arch/x86/hvm/vmx/vmcs.c @@ -351,6 +351,13 @@ static int vmx_init_vmcs_config(void) || !(_vmx_vmexit_control & VM_EXIT_ACK_INTR_ON_EXIT) ) _vmx_pin_based_exec_control &= ~ PIN_BASED_POSTED_INTERRUPT; + if ( iommu_intpost && !cpu_has_vmx_posted_intr_processing ) + { + printk("Intel VT-d Posted Interrupt is disabled for CPU-side Posted " + "Interrupt is not enabled\n"); + iommu_intpost = 0; + } + /* The IA32_VMX_VMFUNC MSR exists only when VMFUNC is available */ if ( _vmx_secondary_exec_control & SECONDARY_EXEC_ENABLE_VM_FUNCTIONS ) { -- 1.8.3.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |