Skip to content

Commit aed8941

Browse files
sean-jcbonzini
authored andcommitted
KVM: x86: Revert "KVM: x86: Mark GPRs dirty when written"
Revert the dirty/available tracking of GPRs now that KVM copies the GPRs to the GHCB on any post-VMGEXIT VMRUN, even if a GPR is not dirty. Per commit de3cd11 ("KVM: x86: Omit caching logic for always-available GPRs"), tracking for GPRs noticeably impacts KVM's code footprint. This reverts commit 1c04d8c. Signed-off-by: Sean Christopherson <seanjc@google.com> Message-Id: <20210122235049.3107620-3-seanjc@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
1 parent 2500914 commit aed8941

File tree

1 file changed

+25
-26
lines changed

1 file changed

+25
-26
lines changed

arch/x86/kvm/kvm_cache_regs.h

Lines changed: 25 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,6 @@
99
(X86_CR4_PVI | X86_CR4_DE | X86_CR4_PCE | X86_CR4_OSFXSR \
1010
| X86_CR4_OSXMMEXCPT | X86_CR4_PGE | X86_CR4_TSD | X86_CR4_FSGSBASE)
1111

12-
static inline bool kvm_register_is_available(struct kvm_vcpu *vcpu,
13-
enum kvm_reg reg)
14-
{
15-
return test_bit(reg, (unsigned long *)&vcpu->arch.regs_avail);
16-
}
17-
18-
static inline bool kvm_register_is_dirty(struct kvm_vcpu *vcpu,
19-
enum kvm_reg reg)
20-
{
21-
return test_bit(reg, (unsigned long *)&vcpu->arch.regs_dirty);
22-
}
23-
24-
static inline void kvm_register_mark_available(struct kvm_vcpu *vcpu,
25-
enum kvm_reg reg)
26-
{
27-
__set_bit(reg, (unsigned long *)&vcpu->arch.regs_avail);
28-
}
29-
30-
static inline void kvm_register_mark_dirty(struct kvm_vcpu *vcpu,
31-
enum kvm_reg reg)
32-
{
33-
__set_bit(reg, (unsigned long *)&vcpu->arch.regs_avail);
34-
__set_bit(reg, (unsigned long *)&vcpu->arch.regs_dirty);
35-
}
36-
3712
#define BUILD_KVM_GPR_ACCESSORS(lname, uname) \
3813
static __always_inline unsigned long kvm_##lname##_read(struct kvm_vcpu *vcpu)\
3914
{ \
@@ -43,7 +18,6 @@ static __always_inline void kvm_##lname##_write(struct kvm_vcpu *vcpu, \
4318
unsigned long val) \
4419
{ \
4520
vcpu->arch.regs[VCPU_REGS_##uname] = val; \
46-
kvm_register_mark_dirty(vcpu, VCPU_REGS_##uname); \
4721
}
4822
BUILD_KVM_GPR_ACCESSORS(rax, RAX)
4923
BUILD_KVM_GPR_ACCESSORS(rbx, RBX)
@@ -63,6 +37,31 @@ BUILD_KVM_GPR_ACCESSORS(r14, R14)
6337
BUILD_KVM_GPR_ACCESSORS(r15, R15)
6438
#endif
6539

40+
static inline bool kvm_register_is_available(struct kvm_vcpu *vcpu,
41+
enum kvm_reg reg)
42+
{
43+
return test_bit(reg, (unsigned long *)&vcpu->arch.regs_avail);
44+
}
45+
46+
static inline bool kvm_register_is_dirty(struct kvm_vcpu *vcpu,
47+
enum kvm_reg reg)
48+
{
49+
return test_bit(reg, (unsigned long *)&vcpu->arch.regs_dirty);
50+
}
51+
52+
static inline void kvm_register_mark_available(struct kvm_vcpu *vcpu,
53+
enum kvm_reg reg)
54+
{
55+
__set_bit(reg, (unsigned long *)&vcpu->arch.regs_avail);
56+
}
57+
58+
static inline void kvm_register_mark_dirty(struct kvm_vcpu *vcpu,
59+
enum kvm_reg reg)
60+
{
61+
__set_bit(reg, (unsigned long *)&vcpu->arch.regs_avail);
62+
__set_bit(reg, (unsigned long *)&vcpu->arch.regs_dirty);
63+
}
64+
6665
static inline unsigned long kvm_register_read(struct kvm_vcpu *vcpu, int reg)
6766
{
6867
if (WARN_ON_ONCE((unsigned int)reg >= NR_VCPU_REGS))

0 commit comments

Comments
 (0)