diff options
| -rw-r--r-- | arch/x86/include/asm/kvm_host.h | 2 | ||||
| -rw-r--r-- | arch/x86/kvm/svm.c | 4 | ||||
| -rw-r--r-- | arch/x86/kvm/vmx.c | 5 | ||||
| -rw-r--r-- | arch/x86/kvm/x86.c | 11 | ||||
| -rw-r--r-- | arch/x86/kvm/x86.h | 5 |
5 files changed, 15 insertions, 12 deletions
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 9e6fe391094..f702f82aa1e 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h | |||
| @@ -79,7 +79,7 @@ | |||
| 79 | #define KVM_NUM_MMU_PAGES (1 << KVM_MMU_HASH_SHIFT) | 79 | #define KVM_NUM_MMU_PAGES (1 << KVM_MMU_HASH_SHIFT) |
| 80 | #define KVM_MIN_FREE_MMU_PAGES 5 | 80 | #define KVM_MIN_FREE_MMU_PAGES 5 |
| 81 | #define KVM_REFILL_PAGES 25 | 81 | #define KVM_REFILL_PAGES 25 |
| 82 | #define KVM_MAX_CPUID_ENTRIES 40 | 82 | #define KVM_MAX_CPUID_ENTRIES 80 |
| 83 | #define KVM_NR_FIXED_MTRR_REGION 88 | 83 | #define KVM_NR_FIXED_MTRR_REGION 88 |
| 84 | #define KVM_NR_VAR_MTRR 8 | 84 | #define KVM_NR_VAR_MTRR 8 |
| 85 | 85 | ||
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 1ca12298ffc..b81a9b7c2ca 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c | |||
| @@ -3494,6 +3494,10 @@ static void svm_cpuid_update(struct kvm_vcpu *vcpu) | |||
| 3494 | static void svm_set_supported_cpuid(u32 func, struct kvm_cpuid_entry2 *entry) | 3494 | static void svm_set_supported_cpuid(u32 func, struct kvm_cpuid_entry2 *entry) |
| 3495 | { | 3495 | { |
| 3496 | switch (func) { | 3496 | switch (func) { |
| 3497 | case 0x00000001: | ||
| 3498 | /* Mask out xsave bit as long as it is not supported by SVM */ | ||
| 3499 | entry->ecx &= ~(bit(X86_FEATURE_XSAVE)); | ||
| 3500 | break; | ||
| 3497 | case 0x80000001: | 3501 | case 0x80000001: |
| 3498 | if (nested) | 3502 | if (nested) |
| 3499 | entry->ecx |= (1 << 2); /* Set SVM bit */ | 3503 | entry->ecx |= (1 << 2); /* Set SVM bit */ |
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index ff21fdda0c5..81fcbe9515c 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
| @@ -4227,11 +4227,6 @@ static int vmx_get_lpage_level(void) | |||
| 4227 | return PT_PDPE_LEVEL; | 4227 | return PT_PDPE_LEVEL; |
| 4228 | } | 4228 | } |
| 4229 | 4229 | ||
| 4230 | static inline u32 bit(int bitno) | ||
| 4231 | { | ||
| 4232 | return 1 << (bitno & 31); | ||
| 4233 | } | ||
| 4234 | |||
| 4235 | static void vmx_cpuid_update(struct kvm_vcpu *vcpu) | 4230 | static void vmx_cpuid_update(struct kvm_vcpu *vcpu) |
| 4236 | { | 4231 | { |
| 4237 | struct kvm_cpuid_entry2 *best; | 4232 | struct kvm_cpuid_entry2 *best; |
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index cdac9e592aa..b989e1f1e5d 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
| @@ -155,11 +155,6 @@ struct kvm_stats_debugfs_item debugfs_entries[] = { | |||
| 155 | 155 | ||
| 156 | u64 __read_mostly host_xcr0; | 156 | u64 __read_mostly host_xcr0; |
| 157 | 157 | ||
| 158 | static inline u32 bit(int bitno) | ||
| 159 | { | ||
| 160 | return 1 << (bitno & 31); | ||
| 161 | } | ||
| 162 | |||
| 163 | static void kvm_on_user_return(struct user_return_notifier *urn) | 158 | static void kvm_on_user_return(struct user_return_notifier *urn) |
| 164 | { | 159 | { |
| 165 | unsigned slot; | 160 | unsigned slot; |
| @@ -4569,9 +4564,11 @@ static void kvm_timer_init(void) | |||
| 4569 | #ifdef CONFIG_CPU_FREQ | 4564 | #ifdef CONFIG_CPU_FREQ |
| 4570 | struct cpufreq_policy policy; | 4565 | struct cpufreq_policy policy; |
| 4571 | memset(&policy, 0, sizeof(policy)); | 4566 | memset(&policy, 0, sizeof(policy)); |
| 4572 | cpufreq_get_policy(&policy, get_cpu()); | 4567 | cpu = get_cpu(); |
| 4568 | cpufreq_get_policy(&policy, cpu); | ||
| 4573 | if (policy.cpuinfo.max_freq) | 4569 | if (policy.cpuinfo.max_freq) |
| 4574 | max_tsc_khz = policy.cpuinfo.max_freq; | 4570 | max_tsc_khz = policy.cpuinfo.max_freq; |
| 4571 | put_cpu(); | ||
| 4575 | #endif | 4572 | #endif |
| 4576 | cpufreq_register_notifier(&kvmclock_cpufreq_notifier_block, | 4573 | cpufreq_register_notifier(&kvmclock_cpufreq_notifier_block, |
| 4577 | CPUFREQ_TRANSITION_NOTIFIER); | 4574 | CPUFREQ_TRANSITION_NOTIFIER); |
| @@ -5522,6 +5519,8 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu, | |||
| 5522 | 5519 | ||
| 5523 | mmu_reset_needed |= kvm_read_cr4(vcpu) != sregs->cr4; | 5520 | mmu_reset_needed |= kvm_read_cr4(vcpu) != sregs->cr4; |
| 5524 | kvm_x86_ops->set_cr4(vcpu, sregs->cr4); | 5521 | kvm_x86_ops->set_cr4(vcpu, sregs->cr4); |
| 5522 | if (sregs->cr4 & X86_CR4_OSXSAVE) | ||
| 5523 | update_cpuid(vcpu); | ||
| 5525 | if (!is_long_mode(vcpu) && is_pae(vcpu)) { | 5524 | if (!is_long_mode(vcpu) && is_pae(vcpu)) { |
| 5526 | load_pdptrs(vcpu, vcpu->arch.walk_mmu, vcpu->arch.cr3); | 5525 | load_pdptrs(vcpu, vcpu->arch.walk_mmu, vcpu->arch.cr3); |
| 5527 | mmu_reset_needed = 1; | 5526 | mmu_reset_needed = 1; |
diff --git a/arch/x86/kvm/x86.h b/arch/x86/kvm/x86.h index 2cea414489f..c600da830ce 100644 --- a/arch/x86/kvm/x86.h +++ b/arch/x86/kvm/x86.h | |||
| @@ -70,6 +70,11 @@ static inline int is_paging(struct kvm_vcpu *vcpu) | |||
| 70 | return kvm_read_cr0_bits(vcpu, X86_CR0_PG); | 70 | return kvm_read_cr0_bits(vcpu, X86_CR0_PG); |
| 71 | } | 71 | } |
| 72 | 72 | ||
| 73 | static inline u32 bit(int bitno) | ||
| 74 | { | ||
| 75 | return 1 << (bitno & 31); | ||
| 76 | } | ||
| 77 | |||
| 73 | void kvm_before_handle_nmi(struct kvm_vcpu *vcpu); | 78 | void kvm_before_handle_nmi(struct kvm_vcpu *vcpu); |
| 74 | void kvm_after_handle_nmi(struct kvm_vcpu *vcpu); | 79 | void kvm_after_handle_nmi(struct kvm_vcpu *vcpu); |
| 75 | int kvm_inject_realmode_interrupt(struct kvm_vcpu *vcpu, int irq); | 80 | int kvm_inject_realmode_interrupt(struct kvm_vcpu *vcpu, int irq); |
