diff options
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/include/asm/kvm_host.h | 1 | ||||
-rw-r--r-- | arch/x86/kvm/svm.c | 6 | ||||
-rw-r--r-- | arch/x86/kvm/vmx.c | 6 | ||||
-rw-r--r-- | arch/x86/kvm/x86.c | 3 |
4 files changed, 16 insertions, 0 deletions
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index e9f4f12ec3c4..7ff0ea371e3c 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h | |||
@@ -459,6 +459,7 @@ struct kvm_x86_ops { | |||
459 | int (*hardware_setup)(void); /* __init */ | 459 | int (*hardware_setup)(void); /* __init */ |
460 | void (*hardware_unsetup)(void); /* __exit */ | 460 | void (*hardware_unsetup)(void); /* __exit */ |
461 | bool (*cpu_has_accelerated_tpr)(void); | 461 | bool (*cpu_has_accelerated_tpr)(void); |
462 | void (*cpuid_update)(struct kvm_vcpu *vcpu); | ||
462 | 463 | ||
463 | /* Create, but do not attach this VCPU */ | 464 | /* Create, but do not attach this VCPU */ |
464 | struct kvm_vcpu *(*vcpu_create)(struct kvm *kvm, unsigned id); | 465 | struct kvm_vcpu *(*vcpu_create)(struct kvm *kvm, unsigned id); |
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 1d9b33843c80..41777e6d9761 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c | |||
@@ -2852,6 +2852,10 @@ static u64 svm_get_mt_mask(struct kvm_vcpu *vcpu, gfn_t gfn, bool is_mmio) | |||
2852 | return 0; | 2852 | return 0; |
2853 | } | 2853 | } |
2854 | 2854 | ||
2855 | static void svm_cpuid_update(struct kvm_vcpu *vcpu) | ||
2856 | { | ||
2857 | } | ||
2858 | |||
2855 | static const struct trace_print_flags svm_exit_reasons_str[] = { | 2859 | static const struct trace_print_flags svm_exit_reasons_str[] = { |
2856 | { SVM_EXIT_READ_CR0, "read_cr0" }, | 2860 | { SVM_EXIT_READ_CR0, "read_cr0" }, |
2857 | { SVM_EXIT_READ_CR3, "read_cr3" }, | 2861 | { SVM_EXIT_READ_CR3, "read_cr3" }, |
@@ -2976,6 +2980,8 @@ static struct kvm_x86_ops svm_x86_ops = { | |||
2976 | 2980 | ||
2977 | .exit_reasons_str = svm_exit_reasons_str, | 2981 | .exit_reasons_str = svm_exit_reasons_str, |
2978 | .gb_page_enable = svm_gb_page_enable, | 2982 | .gb_page_enable = svm_gb_page_enable, |
2983 | |||
2984 | .cpuid_update = svm_cpuid_update, | ||
2979 | }; | 2985 | }; |
2980 | 2986 | ||
2981 | static int __init svm_init(void) | 2987 | static int __init svm_init(void) |
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index f8f2fdc26894..75e8931e96c7 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
@@ -3988,6 +3988,10 @@ static bool vmx_gb_page_enable(void) | |||
3988 | return false; | 3988 | return false; |
3989 | } | 3989 | } |
3990 | 3990 | ||
3991 | static void vmx_cpuid_update(struct kvm_vcpu *vcpu) | ||
3992 | { | ||
3993 | } | ||
3994 | |||
3991 | static struct kvm_x86_ops vmx_x86_ops = { | 3995 | static struct kvm_x86_ops vmx_x86_ops = { |
3992 | .cpu_has_kvm_support = cpu_has_kvm_support, | 3996 | .cpu_has_kvm_support = cpu_has_kvm_support, |
3993 | .disabled_by_bios = vmx_disabled_by_bios, | 3997 | .disabled_by_bios = vmx_disabled_by_bios, |
@@ -4052,6 +4056,8 @@ static struct kvm_x86_ops vmx_x86_ops = { | |||
4052 | 4056 | ||
4053 | .exit_reasons_str = vmx_exit_reasons_str, | 4057 | .exit_reasons_str = vmx_exit_reasons_str, |
4054 | .gb_page_enable = vmx_gb_page_enable, | 4058 | .gb_page_enable = vmx_gb_page_enable, |
4059 | |||
4060 | .cpuid_update = vmx_cpuid_update, | ||
4055 | }; | 4061 | }; |
4056 | 4062 | ||
4057 | static int __init vmx_init(void) | 4063 | static int __init vmx_init(void) |
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 4e7bbc49b7e4..e5ac21f992f0 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
@@ -1574,6 +1574,7 @@ static int kvm_vcpu_ioctl_set_cpuid(struct kvm_vcpu *vcpu, | |||
1574 | cpuid_fix_nx_cap(vcpu); | 1574 | cpuid_fix_nx_cap(vcpu); |
1575 | r = 0; | 1575 | r = 0; |
1576 | kvm_apic_set_version(vcpu); | 1576 | kvm_apic_set_version(vcpu); |
1577 | kvm_x86_ops->cpuid_update(vcpu); | ||
1577 | 1578 | ||
1578 | out_free: | 1579 | out_free: |
1579 | vfree(cpuid_entries); | 1580 | vfree(cpuid_entries); |
@@ -1596,6 +1597,7 @@ static int kvm_vcpu_ioctl_set_cpuid2(struct kvm_vcpu *vcpu, | |||
1596 | goto out; | 1597 | goto out; |
1597 | vcpu->arch.cpuid_nent = cpuid->nent; | 1598 | vcpu->arch.cpuid_nent = cpuid->nent; |
1598 | kvm_apic_set_version(vcpu); | 1599 | kvm_apic_set_version(vcpu); |
1600 | kvm_x86_ops->cpuid_update(vcpu); | ||
1599 | return 0; | 1601 | return 0; |
1600 | 1602 | ||
1601 | out: | 1603 | out: |
@@ -3733,6 +3735,7 @@ struct kvm_cpuid_entry2 *kvm_find_cpuid_entry(struct kvm_vcpu *vcpu, | |||
3733 | } | 3735 | } |
3734 | return best; | 3736 | return best; |
3735 | } | 3737 | } |
3738 | EXPORT_SYMBOL_GPL(kvm_find_cpuid_entry); | ||
3736 | 3739 | ||
3737 | int cpuid_maxphyaddr(struct kvm_vcpu *vcpu) | 3740 | int cpuid_maxphyaddr(struct kvm_vcpu *vcpu) |
3738 | { | 3741 | { |