diff options
author | Jan Kiszka <jan.kiszka@siemens.com> | 2013-03-03 07:05:44 -0500 |
---|---|---|
committer | Marcelo Tosatti <mtosatti@redhat.com> | 2013-03-04 19:37:28 -0500 |
commit | 503cd0c50ac7161eb5c3891b48b620cb0a5521cd (patch) | |
tree | 6376b4be8ae4a6df2e972b497b48bcac032aaa96 /arch/x86/kvm/vmx.c | |
parent | 16014753b10b76385600cd59450a70b8650c72cb (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.c | 5 |
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 | /* |