On Thursday 28 January 2010 06:55:50 Jiang, Yunhong wrote:
> Handle the vMCA bank correctly
>
> Currently the virtual MCE MSR assume all MSRs range from 0 to MAX_NR_BANKS
> are always MCE MSR, this is not always correct.
Please explain, why is this not ? Which MSR is reported that is not an MCE
MSR ?
Christoph
> With this patch, the
> mce_rdmsr/mce_wrmsr will only handle vMCE MSR range from 0 to the MCA banks
> in the host platform. Please notice that some MSR beyond current MCA banks
> in the host platform are really MCA MSRs, that should be handled by general
> MSR handler.
>
> Signed-off-by: Jiang, Yunhong <yunhong.jiang@xxxxxxxxx>
>
> diff -r 221c9b796e32 xen/arch/x86/cpu/mcheck/mce.c
> --- a/xen/arch/x86/cpu/mcheck/mce.c Tue Jan 26 00:33:03 2010 +0800
> +++ b/xen/arch/x86/cpu/mcheck/mce.c Tue Jan 26 00:52:04 2010 +0800
> @@ -716,8 +716,8 @@ int mce_rdmsr(uint32_t msr, uint64_t *va
> bank = (msr - MSR_IA32_MC0_CTL) / 4;
> if ( bank >= (d->arch.vmca_msrs.mcg_cap & MCG_CAP_COUNT) )
> {
> - mce_printk(MCE_QUIET, "MCE: bank %u does not exist\n", bank);
> - ret = -1;
> + mce_printk(MCE_QUIET, "MCE: MSR %x is not MCA MSR\n", msr);
> + ret = 0;
> break;
> }
> switch (msr & (MSR_IA32_MC0_CTL | 3))
> @@ -848,8 +848,8 @@ int mce_wrmsr(u32 msr, u64 val)
> bank = (msr - MSR_IA32_MC0_CTL) / 4;
> if ( bank >= (d->arch.vmca_msrs.mcg_cap & MCG_CAP_COUNT) )
> {
> - mce_printk(MCE_QUIET, "MCE: bank %u does not exist\n", bank);
> - ret = -1;
> + mce_printk(MCE_QUIET, "MCE: MSR %x is not MCA MSR\n", msr);
> + ret = 0;
> break;
> }
> switch ( msr & (MSR_IA32_MC0_CTL | 3) )
--
---to satisfy European Law for business letters:
Advanced Micro Devices GmbH
Karl-Hammerschmidt-Str. 34, 85609 Dornach b. Muenchen
Geschaeftsfuehrer: Andrew Bowd, Thomas M. McCoy, Giuliano Meroni
Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen
Registergericht Muenchen, HRB Nr. 43632
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|