diff options
-rw-r--r-- | arch/x86/kvm/x86.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 1c972382e5d4..f47db2588a41 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
@@ -1449,6 +1449,16 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data) | |||
1449 | pr_unimpl(vcpu, "unimplemented perfctr wrmsr: " | 1449 | pr_unimpl(vcpu, "unimplemented perfctr wrmsr: " |
1450 | "0x%x data 0x%llx\n", msr, data); | 1450 | "0x%x data 0x%llx\n", msr, data); |
1451 | break; | 1451 | break; |
1452 | case MSR_K7_CLK_CTL: | ||
1453 | /* | ||
1454 | * Ignore all writes to this no longer documented MSR. | ||
1455 | * Writes are only relevant for old K7 processors, | ||
1456 | * all pre-dating SVM, but a recommended workaround from | ||
1457 | * AMD for these chips. It is possible to speicify the | ||
1458 | * affected processor models on the command line, hence | ||
1459 | * the need to ignore the workaround. | ||
1460 | */ | ||
1461 | break; | ||
1452 | case HV_X64_MSR_GUEST_OS_ID ... HV_X64_MSR_SINT15: | 1462 | case HV_X64_MSR_GUEST_OS_ID ... HV_X64_MSR_SINT15: |
1453 | if (kvm_hv_msr_partition_wide(msr)) { | 1463 | if (kvm_hv_msr_partition_wide(msr)) { |
1454 | int r; | 1464 | int r; |
@@ -1674,6 +1684,18 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata) | |||
1674 | case MSR_IA32_MCG_STATUS: | 1684 | case MSR_IA32_MCG_STATUS: |
1675 | case MSR_IA32_MC0_CTL ... MSR_IA32_MC0_CTL + 4 * KVM_MAX_MCE_BANKS - 1: | 1685 | case MSR_IA32_MC0_CTL ... MSR_IA32_MC0_CTL + 4 * KVM_MAX_MCE_BANKS - 1: |
1676 | return get_msr_mce(vcpu, msr, pdata); | 1686 | return get_msr_mce(vcpu, msr, pdata); |
1687 | case MSR_K7_CLK_CTL: | ||
1688 | /* | ||
1689 | * Provide expected ramp-up count for K7. All other | ||
1690 | * are set to zero, indicating minimum divisors for | ||
1691 | * every field. | ||
1692 | * | ||
1693 | * This prevents guest kernels on AMD host with CPU | ||
1694 | * type 6, model 8 and higher from exploding due to | ||
1695 | * the rdmsr failing. | ||
1696 | */ | ||
1697 | data = 0x20000000; | ||
1698 | break; | ||
1677 | case HV_X64_MSR_GUEST_OS_ID ... HV_X64_MSR_SINT15: | 1699 | case HV_X64_MSR_GUEST_OS_ID ... HV_X64_MSR_SINT15: |
1678 | if (kvm_hv_msr_partition_wide(msr)) { | 1700 | if (kvm_hv_msr_partition_wide(msr)) { |
1679 | int r; | 1701 | int r; |