#define MSR_MTRRcap                    0x000000fe
 #define MSR_IA32_BBL_CR_CTL            0x00000119
+#define MSR_IA32_BBL_CR_CTL3           0x0000011e
 
 #define MSR_IA32_SYSENTER_CS           0x00000174
 #define MSR_IA32_SYSENTER_ESP          0x00000175
 
                } 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);
                } 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);