diff options
Diffstat (limited to 'arch/x86/kvm/x86.c')
-rw-r--r-- | arch/x86/kvm/x86.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 8ca100a9ecac..49079a46687b 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
@@ -1121,9 +1121,9 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) | |||
1121 | 1121 | ||
1122 | static int is_efer_nx(void) | 1122 | static int is_efer_nx(void) |
1123 | { | 1123 | { |
1124 | u64 efer; | 1124 | unsigned long long efer = 0; |
1125 | 1125 | ||
1126 | rdmsrl(MSR_EFER, efer); | 1126 | rdmsrl_safe(MSR_EFER, &efer); |
1127 | return efer & EFER_NX; | 1127 | return efer & EFER_NX; |
1128 | } | 1128 | } |
1129 | 1129 | ||
@@ -1259,7 +1259,7 @@ static void do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function, | |||
1259 | bit(X86_FEATURE_CMOV) | bit(X86_FEATURE_PSE36) | | 1259 | bit(X86_FEATURE_CMOV) | bit(X86_FEATURE_PSE36) | |
1260 | bit(X86_FEATURE_MMX) | bit(X86_FEATURE_FXSR) | | 1260 | bit(X86_FEATURE_MMX) | bit(X86_FEATURE_FXSR) | |
1261 | bit(X86_FEATURE_SYSCALL) | | 1261 | bit(X86_FEATURE_SYSCALL) | |
1262 | (bit(X86_FEATURE_NX) && is_efer_nx()) | | 1262 | (is_efer_nx() ? bit(X86_FEATURE_NX) : 0) | |
1263 | #ifdef CONFIG_X86_64 | 1263 | #ifdef CONFIG_X86_64 |
1264 | bit(X86_FEATURE_LM) | | 1264 | bit(X86_FEATURE_LM) | |
1265 | #endif | 1265 | #endif |
@@ -2775,6 +2775,9 @@ out: | |||
2775 | 2775 | ||
2776 | void kvm_arch_exit(void) | 2776 | void kvm_arch_exit(void) |
2777 | { | 2777 | { |
2778 | if (!boot_cpu_has(X86_FEATURE_CONSTANT_TSC)) | ||
2779 | cpufreq_unregister_notifier(&kvmclock_cpufreq_notifier_block, | ||
2780 | CPUFREQ_TRANSITION_NOTIFIER); | ||
2778 | kvm_x86_ops = NULL; | 2781 | kvm_x86_ops = NULL; |
2779 | kvm_mmu_module_exit(); | 2782 | kvm_mmu_module_exit(); |
2780 | } | 2783 | } |
@@ -4159,6 +4162,11 @@ EXPORT_SYMBOL_GPL(kvm_put_guest_fpu); | |||
4159 | 4162 | ||
4160 | void kvm_arch_vcpu_free(struct kvm_vcpu *vcpu) | 4163 | void kvm_arch_vcpu_free(struct kvm_vcpu *vcpu) |
4161 | { | 4164 | { |
4165 | if (vcpu->arch.time_page) { | ||
4166 | kvm_release_page_dirty(vcpu->arch.time_page); | ||
4167 | vcpu->arch.time_page = NULL; | ||
4168 | } | ||
4169 | |||
4162 | kvm_x86_ops->vcpu_free(vcpu); | 4170 | kvm_x86_ops->vcpu_free(vcpu); |
4163 | } | 4171 | } |
4164 | 4172 | ||