[PATCH 3/6] KVM: x86: introduce kvm_register_clear_available
Small refactoring that will be used in the next patch. Signed-off-by: Maxim Levitsky --- arch/x86/kvm/kvm_cache_regs.h | 7 +++ arch/x86/kvm/svm/svm.c| 6 ++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/arch/x86/kvm/kvm_cache_regs.h b/arch/x86/kvm/kvm_cache_regs.h index 2e11da2f5621..07d607947805 100644 --- a/arch/x86/kvm/kvm_cache_regs.h +++ b/arch/x86/kvm/kvm_cache_regs.h @@ -55,6 +55,13 @@ static inline void kvm_register_mark_available(struct kvm_vcpu *vcpu, __set_bit(reg, (unsigned long *)&vcpu->arch.regs_avail); } +static inline void kvm_register_clear_available(struct kvm_vcpu *vcpu, + enum kvm_reg reg) +{ + __clear_bit(reg, (unsigned long *)&vcpu->arch.regs_avail); + __clear_bit(reg, (unsigned long *)&vcpu->arch.regs_dirty); +} + static inline void kvm_register_mark_dirty(struct kvm_vcpu *vcpu, enum kvm_reg reg) { diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index 271196400495..2843732299a2 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -3880,10 +3880,8 @@ static __no_kcsan fastpath_t svm_vcpu_run(struct kvm_vcpu *vcpu) vcpu->arch.apf.host_apf_flags = kvm_read_and_reset_apf_flags(); - if (npt_enabled) { - vcpu->arch.regs_avail &= ~(1 << VCPU_EXREG_PDPTR); - vcpu->arch.regs_dirty &= ~(1 << VCPU_EXREG_PDPTR); - } + if (npt_enabled) + kvm_register_clear_available(vcpu, VCPU_EXREG_PDPTR); /* * We need to handle MC intercepts here before the vcpu has a chance to -- 2.26.2
Re: [PATCH 3/6] KVM: x86: introduce kvm_register_clear_available
On 01/04/21 16:18, Maxim Levitsky wrote: Small refactoring that will be used in the next patch. Signed-off-by: Maxim Levitsky --- arch/x86/kvm/kvm_cache_regs.h | 7 +++ arch/x86/kvm/svm/svm.c| 6 ++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/arch/x86/kvm/kvm_cache_regs.h b/arch/x86/kvm/kvm_cache_regs.h index 2e11da2f5621..07d607947805 100644 --- a/arch/x86/kvm/kvm_cache_regs.h +++ b/arch/x86/kvm/kvm_cache_regs.h @@ -55,6 +55,13 @@ static inline void kvm_register_mark_available(struct kvm_vcpu *vcpu, __set_bit(reg, (unsigned long *)&vcpu->arch.regs_avail); } +static inline void kvm_register_clear_available(struct kvm_vcpu *vcpu, + enum kvm_reg reg) +{ + __clear_bit(reg, (unsigned long *)&vcpu->arch.regs_avail); + __clear_bit(reg, (unsigned long *)&vcpu->arch.regs_dirty); +} + static inline void kvm_register_mark_dirty(struct kvm_vcpu *vcpu, enum kvm_reg reg) { diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index 271196400495..2843732299a2 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -3880,10 +3880,8 @@ static __no_kcsan fastpath_t svm_vcpu_run(struct kvm_vcpu *vcpu) vcpu->arch.apf.host_apf_flags = kvm_read_and_reset_apf_flags(); - if (npt_enabled) { - vcpu->arch.regs_avail &= ~(1 << VCPU_EXREG_PDPTR); - vcpu->arch.regs_dirty &= ~(1 << VCPU_EXREG_PDPTR); - } + if (npt_enabled) + kvm_register_clear_available(vcpu, VCPU_EXREG_PDPTR); /* * We need to handle MC intercepts here before the vcpu has a chance to Reviewed-by: Paolo Bonzini
Re: [PATCH 3/6] KVM: x86: introduce kvm_register_clear_available
On Thu, Apr 01, 2021, Maxim Levitsky wrote: > Small refactoring that will be used in the next patch. > > Signed-off-by: Maxim Levitsky > --- > arch/x86/kvm/kvm_cache_regs.h | 7 +++ > arch/x86/kvm/svm/svm.c| 6 ++ > 2 files changed, 9 insertions(+), 4 deletions(-) > > diff --git a/arch/x86/kvm/kvm_cache_regs.h b/arch/x86/kvm/kvm_cache_regs.h > index 2e11da2f5621..07d607947805 100644 > --- a/arch/x86/kvm/kvm_cache_regs.h > +++ b/arch/x86/kvm/kvm_cache_regs.h > @@ -55,6 +55,13 @@ static inline void kvm_register_mark_available(struct > kvm_vcpu *vcpu, > __set_bit(reg, (unsigned long *)&vcpu->arch.regs_avail); > } > > +static inline void kvm_register_clear_available(struct kvm_vcpu *vcpu, I don't love the name, because it makes me think too hard about available vs. dirty. :-) If we drop the optimizations, what if we also drop this patch to avoid bikeshedding the name? > +enum kvm_reg reg) > +{ > + __clear_bit(reg, (unsigned long *)&vcpu->arch.regs_avail); > + __clear_bit(reg, (unsigned long *)&vcpu->arch.regs_dirty); > +} > + > static inline void kvm_register_mark_dirty(struct kvm_vcpu *vcpu, > enum kvm_reg reg) > { > diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c > index 271196400495..2843732299a2 100644 > --- a/arch/x86/kvm/svm/svm.c > +++ b/arch/x86/kvm/svm/svm.c > @@ -3880,10 +3880,8 @@ static __no_kcsan fastpath_t svm_vcpu_run(struct > kvm_vcpu *vcpu) > vcpu->arch.apf.host_apf_flags = > kvm_read_and_reset_apf_flags(); > > - if (npt_enabled) { > - vcpu->arch.regs_avail &= ~(1 << VCPU_EXREG_PDPTR); > - vcpu->arch.regs_dirty &= ~(1 << VCPU_EXREG_PDPTR); > - } > + if (npt_enabled) > + kvm_register_clear_available(vcpu, VCPU_EXREG_PDPTR); > > /* >* We need to handle MC intercepts here before the vcpu has a chance to > -- > 2.26.2 >