diff options
-rw-r--r-- | arch/x86/kvm/svm.c | 16 | ||||
-rw-r--r-- | arch/x86/kvm/vmx.c | 12 | ||||
-rw-r--r-- | arch/x86/kvm/x86.c | 30 |
3 files changed, 30 insertions, 28 deletions
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 28b981409a8f..060aa9f5571e 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c | |||
@@ -2142,22 +2142,6 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, unsigned ecx, u64 data) | |||
2142 | else | 2142 | else |
2143 | svm_disable_lbrv(svm); | 2143 | svm_disable_lbrv(svm); |
2144 | break; | 2144 | break; |
2145 | case MSR_K7_EVNTSEL0: | ||
2146 | case MSR_K7_EVNTSEL1: | ||
2147 | case MSR_K7_EVNTSEL2: | ||
2148 | case MSR_K7_EVNTSEL3: | ||
2149 | case MSR_K7_PERFCTR0: | ||
2150 | case MSR_K7_PERFCTR1: | ||
2151 | case MSR_K7_PERFCTR2: | ||
2152 | case MSR_K7_PERFCTR3: | ||
2153 | /* | ||
2154 | * Just discard all writes to the performance counters; this | ||
2155 | * should keep both older linux and windows 64-bit guests | ||
2156 | * happy | ||
2157 | */ | ||
2158 | pr_unimpl(vcpu, "unimplemented perfctr wrmsr: 0x%x data 0x%llx\n", ecx, data); | ||
2159 | |||
2160 | break; | ||
2161 | case MSR_VM_HSAVE_PA: | 2145 | case MSR_VM_HSAVE_PA: |
2162 | svm->hsave_msr = data; | 2146 | svm->hsave_msr = data; |
2163 | break; | 2147 | break; |
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index c08bb4cf372e..6ee929255a3d 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
@@ -1025,18 +1025,6 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 data) | |||
1025 | rdtscll(host_tsc); | 1025 | rdtscll(host_tsc); |
1026 | guest_write_tsc(data, host_tsc); | 1026 | guest_write_tsc(data, host_tsc); |
1027 | break; | 1027 | break; |
1028 | case MSR_P6_PERFCTR0: | ||
1029 | case MSR_P6_PERFCTR1: | ||
1030 | case MSR_P6_EVNTSEL0: | ||
1031 | case MSR_P6_EVNTSEL1: | ||
1032 | /* | ||
1033 | * Just discard all writes to the performance counters; this | ||
1034 | * should keep both older linux and windows 64-bit guests | ||
1035 | * happy | ||
1036 | */ | ||
1037 | pr_unimpl(vcpu, "unimplemented perfctr wrmsr: 0x%x data 0x%llx\n", msr_index, data); | ||
1038 | |||
1039 | break; | ||
1040 | case MSR_IA32_CR_PAT: | 1028 | case MSR_IA32_CR_PAT: |
1041 | if (vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_IA32_PAT) { | 1029 | if (vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_IA32_PAT) { |
1042 | vmcs_write64(GUEST_IA32_PAT, data); | 1030 | vmcs_write64(GUEST_IA32_PAT, data); |
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 89862a80e32c..30492f0ba4ea 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
@@ -886,6 +886,36 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data) | |||
886 | case MSR_IA32_MCG_STATUS: | 886 | case MSR_IA32_MCG_STATUS: |
887 | case MSR_IA32_MC0_CTL ... MSR_IA32_MC0_CTL + 4 * KVM_MAX_MCE_BANKS - 1: | 887 | case MSR_IA32_MC0_CTL ... MSR_IA32_MC0_CTL + 4 * KVM_MAX_MCE_BANKS - 1: |
888 | return set_msr_mce(vcpu, msr, data); | 888 | return set_msr_mce(vcpu, msr, data); |
889 | |||
890 | /* Performance counters are not protected by a CPUID bit, | ||
891 | * so we should check all of them in the generic path for the sake of | ||
892 | * cross vendor migration. | ||
893 | * Writing a zero into the event select MSRs disables them, | ||
894 | * which we perfectly emulate ;-). Any other value should be at least | ||
895 | * reported, some guests depend on them. | ||
896 | */ | ||
897 | case MSR_P6_EVNTSEL0: | ||
898 | case MSR_P6_EVNTSEL1: | ||
899 | case MSR_K7_EVNTSEL0: | ||
900 | case MSR_K7_EVNTSEL1: | ||
901 | case MSR_K7_EVNTSEL2: | ||
902 | case MSR_K7_EVNTSEL3: | ||
903 | if (data != 0) | ||
904 | pr_unimpl(vcpu, "unimplemented perfctr wrmsr: " | ||
905 | "0x%x data 0x%llx\n", msr, data); | ||
906 | break; | ||
907 | /* at least RHEL 4 unconditionally writes to the perfctr registers, | ||
908 | * so we ignore writes to make it happy. | ||
909 | */ | ||
910 | case MSR_P6_PERFCTR0: | ||
911 | case MSR_P6_PERFCTR1: | ||
912 | case MSR_K7_PERFCTR0: | ||
913 | case MSR_K7_PERFCTR1: | ||
914 | case MSR_K7_PERFCTR2: | ||
915 | case MSR_K7_PERFCTR3: | ||
916 | pr_unimpl(vcpu, "unimplemented perfctr wrmsr: " | ||
917 | "0x%x data 0x%llx\n", msr, data); | ||
918 | break; | ||
889 | default: | 919 | default: |
890 | pr_unimpl(vcpu, "unhandled wrmsr: 0x%x data %llx\n", msr, data); | 920 | pr_unimpl(vcpu, "unhandled wrmsr: 0x%x data %llx\n", msr, data); |
891 | return 1; | 921 | return 1; |