KVM: VMX: Reset DR6 only when KVM_DEBUGREG_WONT_EXIT
authorPaolo Bonzini <pbonzini@redhat.com>
Tue, 10 Aug 2021 10:11:35 +0000 (06:11 -0400)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 13 Aug 2021 07:35:14 +0000 (03:35 -0400)
commit1ccb6f983a063e794daeb03f90b3517f87dfae8f
tree8c69f5d8dc78cba673bde249c5d79f461ff3568a
parent375e28ffc0cf4fc48862c03994ec4a93254cf1c6
KVM: VMX: Reset DR6 only when KVM_DEBUGREG_WONT_EXIT

The commit efdab992813fb ("KVM: x86: fix escape of guest dr6 to the host")
fixed a bug by resetting DR6 unconditionally when the vcpu being scheduled out.

But writing to debug registers is slow, and it can be visible in perf results
sometimes, even if neither the host nor the guest activate breakpoints.

Since KVM_DEBUGREG_WONT_EXIT on Intel processors is the only case
where DR6 gets the guest value, and it never happens at all on SVM,
the register can be cleared in vmx.c right after reading it.

Reported-by: Lai Jiangshan <laijs@linux.alibaba.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/vmx/vmx.c
arch/x86/kvm/x86.c