diff options
Diffstat (limited to 'arch/x86/kvm/x86.c')
-rw-r--r-- | arch/x86/kvm/x86.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index a7f65aa6eef..7faf262ab20 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
@@ -1592,6 +1592,12 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data) | |||
1592 | } else | 1592 | } else |
1593 | return set_msr_hyperv(vcpu, msr, data); | 1593 | return set_msr_hyperv(vcpu, msr, data); |
1594 | break; | 1594 | break; |
1595 | case MSR_IA32_BBL_CR_CTL3: | ||
1596 | /* Drop writes to this legacy MSR -- see rdmsr | ||
1597 | * counterpart for further detail. | ||
1598 | */ | ||
1599 | pr_unimpl(vcpu, "ignored wrmsr: 0x%x data %llx\n", msr, data); | ||
1600 | break; | ||
1595 | default: | 1601 | default: |
1596 | if (msr && (msr == vcpu->kvm->arch.xen_hvm_config.msr)) | 1602 | if (msr && (msr == vcpu->kvm->arch.xen_hvm_config.msr)) |
1597 | return xen_hvm_config(vcpu, data); | 1603 | return xen_hvm_config(vcpu, data); |
@@ -1846,6 +1852,19 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata) | |||
1846 | } else | 1852 | } else |
1847 | return get_msr_hyperv(vcpu, msr, pdata); | 1853 | return get_msr_hyperv(vcpu, msr, pdata); |
1848 | break; | 1854 | break; |
1855 | case MSR_IA32_BBL_CR_CTL3: | ||
1856 | /* This legacy MSR exists but isn't fully documented in current | ||
1857 | * silicon. It is however accessed by winxp in very narrow | ||
1858 | * scenarios where it sets bit #19, itself documented as | ||
1859 | * a "reserved" bit. Best effort attempt to source coherent | ||
1860 | * read data here should the balance of the register be | ||
1861 | * interpreted by the guest: | ||
1862 | * | ||
1863 | * L2 cache control register 3: 64GB range, 256KB size, | ||
1864 | * enabled, latency 0x1, configured | ||
1865 | */ | ||
1866 | data = 0xbe702111; | ||
1867 | break; | ||
1849 | default: | 1868 | default: |
1850 | if (!ignore_msrs) { | 1869 | if (!ignore_msrs) { |
1851 | pr_unimpl(vcpu, "unhandled rdmsr: 0x%x\n", msr); | 1870 | pr_unimpl(vcpu, "unhandled rdmsr: 0x%x\n", msr); |