|
@@ -1592,6 +1592,12 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data)
|
|
|
} else
|
|
|
return set_msr_hyperv(vcpu, msr, data);
|
|
|
break;
|
|
|
+ case MSR_IA32_BBL_CR_CTL3:
|
|
|
+ /* Drop writes to this legacy MSR -- see rdmsr
|
|
|
+ * counterpart for further detail.
|
|
|
+ */
|
|
|
+ pr_unimpl(vcpu, "ignored wrmsr: 0x%x data %llx\n", msr, data);
|
|
|
+ break;
|
|
|
default:
|
|
|
if (msr && (msr == vcpu->kvm->arch.xen_hvm_config.msr))
|
|
|
return xen_hvm_config(vcpu, data);
|
|
@@ -1846,6 +1852,19 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata)
|
|
|
} else
|
|
|
return get_msr_hyperv(vcpu, msr, pdata);
|
|
|
break;
|
|
|
+ case MSR_IA32_BBL_CR_CTL3:
|
|
|
+ /* This legacy MSR exists but isn't fully documented in current
|
|
|
+ * silicon. It is however accessed by winxp in very narrow
|
|
|
+ * scenarios where it sets bit #19, itself documented as
|
|
|
+ * a "reserved" bit. Best effort attempt to source coherent
|
|
|
+ * read data here should the balance of the register be
|
|
|
+ * interpreted by the guest:
|
|
|
+ *
|
|
|
+ * L2 cache control register 3: 64GB range, 256KB size,
|
|
|
+ * enabled, latency 0x1, configured
|
|
|
+ */
|
|
|
+ data = 0xbe702111;
|
|
|
+ break;
|
|
|
default:
|
|
|
if (!ignore_msrs) {
|
|
|
pr_unimpl(vcpu, "unhandled rdmsr: 0x%x\n", msr);
|