aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/vmx.c
diff options
context:
space:
mode:
authorJan Kiszka <jan.kiszka@siemens.com>2013-03-03 07:05:44 -0500
committerMarcelo Tosatti <mtosatti@redhat.com>2013-03-04 19:37:28 -0500
commit503cd0c50ac7161eb5c3891b48b620cb0a5521cd (patch)
tree6376b4be8ae4a6df2e972b497b48bcac032aaa96 /arch/x86/kvm/vmx.c
parent16014753b10b76385600cd59450a70b8650c72cb (diff)
KVM: nVMX: Fix switching of debug state
First of all, do not blindly overwrite GUEST_DR7 on L2 entry. The host may have guest debugging enabled. Then properly reset DR7 and DEBUG_CTL on L2->L1 switch as specified in the SDM. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'arch/x86/kvm/vmx.c')
-rw-r--r--arch/x86/kvm/vmx.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 58fb7c27e3b5..097f5d662275 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -6978,7 +6978,7 @@ static void prepare_vmcs02(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12)
6978 vmcs12->guest_interruptibility_info); 6978 vmcs12->guest_interruptibility_info);
6979 vmcs_write32(GUEST_ACTIVITY_STATE, vmcs12->guest_activity_state); 6979 vmcs_write32(GUEST_ACTIVITY_STATE, vmcs12->guest_activity_state);
6980 vmcs_write32(GUEST_SYSENTER_CS, vmcs12->guest_sysenter_cs); 6980 vmcs_write32(GUEST_SYSENTER_CS, vmcs12->guest_sysenter_cs);
6981 vmcs_writel(GUEST_DR7, vmcs12->guest_dr7); 6981 kvm_set_dr(vcpu, 7, vmcs12->guest_dr7);
6982 vmcs_writel(GUEST_RFLAGS, vmcs12->guest_rflags); 6982 vmcs_writel(GUEST_RFLAGS, vmcs12->guest_rflags);
6983 vmcs_writel(GUEST_PENDING_DBG_EXCEPTIONS, 6983 vmcs_writel(GUEST_PENDING_DBG_EXCEPTIONS,
6984 vmcs12->guest_pending_dbg_exceptions); 6984 vmcs12->guest_pending_dbg_exceptions);
@@ -7492,6 +7492,9 @@ static void load_vmcs12_host_state(struct kvm_vcpu *vcpu,
7492 if (vmcs12->vm_exit_controls & VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL) 7492 if (vmcs12->vm_exit_controls & VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL)
7493 vmcs_write64(GUEST_IA32_PERF_GLOBAL_CTRL, 7493 vmcs_write64(GUEST_IA32_PERF_GLOBAL_CTRL,
7494 vmcs12->host_ia32_perf_global_ctrl); 7494 vmcs12->host_ia32_perf_global_ctrl);
7495
7496 kvm_set_dr(vcpu, 7, 0x400);
7497 vmcs_write64(GUEST_IA32_DEBUGCTL, 0);
7495} 7498}
7496 7499
7497/* 7500/*