diff --git a/arch/x86/kvm/msrs.c b/arch/x86/kvm/msrs.c index a7394bdae029..8e33b87b5e8f 100644 --- a/arch/x86/kvm/msrs.c +++ b/arch/x86/kvm/msrs.c @@ -19,7 +19,7 @@ bool __read_mostly report_ignored_msrs = true; module_param(report_ignored_msrs, bool, 0644); EXPORT_SYMBOL_FOR_KVM_INTERNAL(report_ignored_msrs); -static u64 __read_mostly efer_reserved_bits; +static u64 __read_mostly efer_supported_bits; #define MAX_IO_MSRS 256 @@ -605,7 +605,7 @@ static bool __kvm_valid_efer(struct kvm_vcpu *vcpu, u64 efer) } bool kvm_valid_efer(struct kvm_vcpu *vcpu, u64 efer) { - if (efer & efer_reserved_bits) + if (efer & ~efer_supported_bits) return false; return __kvm_valid_efer(vcpu, efer); @@ -618,7 +618,7 @@ static int set_efer(struct kvm_vcpu *vcpu, struct msr_data *msr_info) u64 efer = msr_info->data; int r; - if (efer & efer_reserved_bits) + if (efer & ~efer_supported_bits) return 1; if (!msr_info->host_initiated) { @@ -652,13 +652,13 @@ static int set_efer(struct kvm_vcpu *vcpu, struct msr_data *msr_info) void kvm_init_efer_bits(void) { /* Enable syscall by default because its emulated by KVM */ - efer_reserved_bits = ~((u64)EFER_SCE); + efer_supported_bits = (u64)EFER_SCE; } EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_init_efer_bits); void kvm_enable_efer_bits(u64 mask) { - efer_reserved_bits &= ~mask; + efer_supported_bits |= mask; } EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_enable_efer_bits);