/* amd specific MCA MSR */
int vmce_amd_wrmsr(struct vcpu *v, uint32_t msr, uint64_t val)
{
- switch (msr) {
- case MSR_F10_MC4_MISC1: /* DRAM error type */
- v->arch.vmce.bank[1].mci_misc = val;
- mce_printk(MCE_VERBOSE, "MCE: wr msr %#"PRIx64"\n", val);
- break;
- case MSR_F10_MC4_MISC2: /* Link error type */
- case MSR_F10_MC4_MISC3: /* L3 cache error type */
- /* ignore write: we do not emulate link and l3 cache errors
- * to the guest.
- */
- mce_printk(MCE_VERBOSE, "MCE: wr msr %#"PRIx64"\n", val);
- break;
- default:
- return 0;
- }
-
- return 1;
+ /* Do nothing as we don't emulate this MC bank currently */
+ mce_printk(MCE_VERBOSE, "MCE: wr msr %#"PRIx64"\n", val);
+ return 1;
}
int vmce_amd_rdmsr(const struct vcpu *v, uint32_t msr, uint64_t *val)
{
- switch (msr) {
- case MSR_F10_MC4_MISC1: /* DRAM error type */
- *val = v->arch.vmce.bank[1].mci_misc;
- mce_printk(MCE_VERBOSE, "MCE: rd msr %#"PRIx64"\n", *val);
- break;
- case MSR_F10_MC4_MISC2: /* Link error type */
- case MSR_F10_MC4_MISC3: /* L3 cache error type */
- /* we do not emulate link and l3 cache
- * errors to the guest.
- */
- *val = 0;
- mce_printk(MCE_VERBOSE, "MCE: rd msr %#"PRIx64"\n", *val);
- break;
- default:
- return 0;
- }
-
- return 1;
+ /* Assign '0' as we don't emulate this MC bank currently */
+ *val = 0;
+ return 1;
}
*val = 0;
- switch ( msr & (MSR_IA32_MC0_CTL | 3) )
+ switch ( msr & (-MSR_IA32_MC0_CTL | 3) )
{
case MSR_IA32_MC0_CTL:
/* stick all 1's to MCi_CTL */
int ret = 1;
unsigned int bank = (msr - MSR_IA32_MC0_CTL) / 4;
- switch ( msr & (MSR_IA32_MC0_CTL | 3) )
+ switch ( msr & (-MSR_IA32_MC0_CTL | 3) )
{
case MSR_IA32_MC0_CTL:
/*