diff options
author | Jan Kiszka <jan.kiszka@siemens.com> | 2013-12-16 12:55:46 +0100 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2013-12-18 10:27:09 +0100 |
commit | ca3f257ae570c37d3da30a524a2f61ce602c6c99 (patch) | |
tree | 476d6c425876853432eaaa18dd8ef555b8f9fcbc /arch/x86/kvm/vmx.c | |
parent | 9357d93952143b178fa9d1f5095b8f273b01a1f1 (diff) | |
download | blackbird-op-linux-ca3f257ae570c37d3da30a524a2f61ce602c6c99.tar.gz blackbird-op-linux-ca3f257ae570c37d3da30a524a2f61ce602c6c99.zip |
KVM: nVMX: Support direct APIC access from L2
It's a pathological case, but still a valid one: If L1 disables APIC
virtualization and also allows L2 to directly write to the APIC page, we
have to forcibly enable APIC virtualization while in L2 if the in-kernel
APIC is in use.
This allows to run the direct interrupt test case in the vmx unit test
without x2APIC.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch/x86/kvm/vmx.c')
-rw-r--r-- | arch/x86/kvm/vmx.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index f90320b204a9..31eb5776d854 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -7763,6 +7763,11 @@ static void prepare_vmcs02(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12) else vmcs_write64(APIC_ACCESS_ADDR, page_to_phys(vmx->nested.apic_access_page)); + } else if (vm_need_virtualize_apic_accesses(vmx->vcpu.kvm)) { + exec_control |= + SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES; + vmcs_write64(APIC_ACCESS_ADDR, + page_to_phys(vcpu->kvm->arch.apic_access_page)); } vmcs_write32(SECONDARY_VM_EXEC_CONTROL, exec_control); |