Message ID | 20190927214523.3376-7-sean.j.christopherson@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: x86: nVMX GUEST_CR3 bug fix, and then some... | expand |
Sean Christopherson <sean.j.christopherson@intel.com> writes: > Now that indexing into arch.regs is either protected by WARN_ON_ONCE or > done with hardcoded enums, combine all definitions for registers that > are tracked by regs_avail and regs_dirty into 'enum kvm_reg'. Having a > single enum type will simplify additional cleanup related to regs_avail > and regs_dirty. > > Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com> > --- > arch/x86/include/asm/kvm_host.h | 4 +--- > arch/x86/kvm/kvm_cache_regs.h | 2 +- > 2 files changed, 2 insertions(+), 4 deletions(-) > > diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h > index 23edf56cf577..a27f7f6b6b7a 100644 > --- a/arch/x86/include/asm/kvm_host.h > +++ b/arch/x86/include/asm/kvm_host.h > @@ -156,10 +156,8 @@ enum kvm_reg { > VCPU_REGS_R15 = __VCPU_REGS_R15, > #endif > VCPU_REGS_RIP, > - NR_VCPU_REGS > -}; > + NR_VCPU_REGS, > > -enum kvm_reg_ex { > VCPU_EXREG_PDPTR = NR_VCPU_REGS, (Personally, I would've changed that to NR_VCPU_REGS + 1) > VCPU_EXREG_CR3, > VCPU_EXREG_RFLAGS, > diff --git a/arch/x86/kvm/kvm_cache_regs.h b/arch/x86/kvm/kvm_cache_regs.h > index 3972e1b65635..b85fc4b4e04f 100644 > --- a/arch/x86/kvm/kvm_cache_regs.h > +++ b/arch/x86/kvm/kvm_cache_regs.h > @@ -95,7 +95,7 @@ static inline u64 kvm_pdptr_read(struct kvm_vcpu *vcpu, int index) > > if (!test_bit(VCPU_EXREG_PDPTR, > (unsigned long *)&vcpu->arch.regs_avail)) > - kvm_x86_ops->cache_reg(vcpu, (enum kvm_reg)VCPU_EXREG_PDPTR); > + kvm_x86_ops->cache_reg(vcpu, VCPU_EXREG_PDPTR); > > return vcpu->arch.walk_mmu->pdptrs[index]; > } Reviewed-by: Vitaly Kuznetsov <vkuznets@redhat.com>
On 30/09/19 11:25, Vitaly Kuznetsov wrote: >> -enum kvm_reg_ex { >> VCPU_EXREG_PDPTR = NR_VCPU_REGS, > (Personally, I would've changed that to NR_VCPU_REGS + 1) > Why? Paolo
Paolo Bonzini <pbonzini@redhat.com> writes: > On 30/09/19 11:25, Vitaly Kuznetsov wrote: >>> -enum kvm_reg_ex { >>> VCPU_EXREG_PDPTR = NR_VCPU_REGS, >> (Personally, I would've changed that to NR_VCPU_REGS + 1) >> > > Why? > Just so every entry in the enum is different and NR_VCPU_REGS acts as a guardian.
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 23edf56cf577..a27f7f6b6b7a 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -156,10 +156,8 @@ enum kvm_reg { VCPU_REGS_R15 = __VCPU_REGS_R15, #endif VCPU_REGS_RIP, - NR_VCPU_REGS -}; + NR_VCPU_REGS, -enum kvm_reg_ex { VCPU_EXREG_PDPTR = NR_VCPU_REGS, VCPU_EXREG_CR3, VCPU_EXREG_RFLAGS, diff --git a/arch/x86/kvm/kvm_cache_regs.h b/arch/x86/kvm/kvm_cache_regs.h index 3972e1b65635..b85fc4b4e04f 100644 --- a/arch/x86/kvm/kvm_cache_regs.h +++ b/arch/x86/kvm/kvm_cache_regs.h @@ -95,7 +95,7 @@ static inline u64 kvm_pdptr_read(struct kvm_vcpu *vcpu, int index) if (!test_bit(VCPU_EXREG_PDPTR, (unsigned long *)&vcpu->arch.regs_avail)) - kvm_x86_ops->cache_reg(vcpu, (enum kvm_reg)VCPU_EXREG_PDPTR); + kvm_x86_ops->cache_reg(vcpu, VCPU_EXREG_PDPTR); return vcpu->arch.walk_mmu->pdptrs[index]; }
Now that indexing into arch.regs is either protected by WARN_ON_ONCE or done with hardcoded enums, combine all definitions for registers that are tracked by regs_avail and regs_dirty into 'enum kvm_reg'. Having a single enum type will simplify additional cleanup related to regs_avail and regs_dirty. Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com> --- arch/x86/include/asm/kvm_host.h | 4 +--- arch/x86/kvm/kvm_cache_regs.h | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-)