Avi Kivity wrote: > 'mask' is always a constant, so we can check whether it includes a bit that > might be owned by the guest very cheaply, and avoid the decache call. Saves > a few hundred bytes of module text. -no-kvm-irqchip -smp 2 is broken for my Linux guests since this commit. Their user space applications receive #UD and things fall apart. Jan > > Signed-off-by: Avi Kivity <avi@xxxxxxxxxx> > --- > arch/x86/kvm/kvm_cache_regs.h | 9 +++++++-- > 1 files changed, 7 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/kvm/kvm_cache_regs.h b/arch/x86/kvm/kvm_cache_regs.h > index 6b419a3..5a109c6 100644 > --- a/arch/x86/kvm/kvm_cache_regs.h > +++ b/arch/x86/kvm/kvm_cache_regs.h > @@ -1,6 +1,9 @@ > #ifndef ASM_KVM_CACHE_REGS_H > #define ASM_KVM_CACHE_REGS_H > > +#define KVM_POSSIBLE_CR0_GUEST_BITS X86_CR0_TS > +#define KVM_POSSIBLE_CR4_GUEST_BITS X86_CR4_PGE > + > static inline unsigned long kvm_register_read(struct kvm_vcpu *vcpu, > enum kvm_reg reg) > { > @@ -40,7 +43,8 @@ static inline u64 kvm_pdptr_read(struct kvm_vcpu *vcpu, int index) > > static inline ulong kvm_read_cr0_bits(struct kvm_vcpu *vcpu, ulong mask) > { > - if (mask & vcpu->arch.cr0_guest_owned_bits) > + ulong tmask = mask & KVM_POSSIBLE_CR0_GUEST_BITS; > + if (tmask & vcpu->arch.cr0_guest_owned_bits) > kvm_x86_ops->decache_cr0_guest_bits(vcpu); > return vcpu->arch.cr0 & mask; > } > @@ -52,7 +56,8 @@ static inline ulong kvm_read_cr0(struct kvm_vcpu *vcpu) > > static inline ulong kvm_read_cr4_bits(struct kvm_vcpu *vcpu, ulong mask) > { > - if (mask & vcpu->arch.cr4_guest_owned_bits) > + ulong tmask = mask & KVM_POSSIBLE_CR4_GUEST_BITS; > + if (tmask & vcpu->arch.cr4_guest_owned_bits) > kvm_x86_ops->decache_cr4_guest_bits(vcpu); > return vcpu->arch.cr4 & mask; > }
Attachment:
signature.asc
Description: OpenPGP digital signature