[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] fix c/s 18938
This patch looks very good to me. Just one comment at the bottom. Christoph On Friday 27 March 2009 17:34:07 Jan Beulich wrote: > Provide for up to 16/32 on (32/64-bit) extended MCE MSRs, and use > actually existing extended MSRs on 64-bits that were inaccessible so > far. > > Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx> > > --- 2009-03-27.orig/xen/arch/x86/cpu/mcheck/mce_intel.c 2009-03-27 > 16:43:26.000000000 +0100 +++ > 2009-03-27/xen/arch/x86/cpu/mcheck/mce_intel.c 2009-03-27 > 12:06:52.000000000 +0100 @@ -117,6 +117,16 @@ static void > intel_init_thermal(struct cp > } > #endif /* CONFIG_X86_MCE_THERMAL */ > > +static inline void intel_get_extended_msr(struct mcinfo_extended *ext, u32 > msr) +{ > + if ( ext->mc_msrs < ARRAY_SIZE(ext->mc_msr) > + && msr < MSR_IA32_MCG_EAX + nr_intel_ext_msrs ) { > + ext->mc_msr[ext->mc_msrs].reg = msr; > + rdmsrl(msr, ext->mc_msr[ext->mc_msrs].value); > + ++ext->mc_msrs; > + } > +} > + > static enum mca_extinfo > intel_get_extended_msrs(struct mc_info *mci, uint16_t bank, uint64_t > status) { > @@ -129,30 +139,29 @@ intel_get_extended_msrs(struct mc_info * > memset(&mc_ext, 0, sizeof(struct mcinfo_extended)); > mc_ext.common.type = MC_TYPE_EXTENDED; > mc_ext.common.size = sizeof(mc_ext); > - mc_ext.mc_msrs = 10; > > - mc_ext.mc_msr[0].reg = MSR_IA32_MCG_EAX; > - rdmsrl(MSR_IA32_MCG_EAX, mc_ext.mc_msr[0].value); > - mc_ext.mc_msr[1].reg = MSR_IA32_MCG_EBX; > - rdmsrl(MSR_IA32_MCG_EBX, mc_ext.mc_msr[1].value); > - mc_ext.mc_msr[2].reg = MSR_IA32_MCG_ECX; > - rdmsrl(MSR_IA32_MCG_ECX, mc_ext.mc_msr[2].value); > - > - mc_ext.mc_msr[3].reg = MSR_IA32_MCG_EDX; > - rdmsrl(MSR_IA32_MCG_EDX, mc_ext.mc_msr[3].value); > - mc_ext.mc_msr[4].reg = MSR_IA32_MCG_ESI; > - rdmsrl(MSR_IA32_MCG_ESI, mc_ext.mc_msr[4].value); > - mc_ext.mc_msr[5].reg = MSR_IA32_MCG_EDI; > - rdmsrl(MSR_IA32_MCG_EDI, mc_ext.mc_msr[5].value); > - > - mc_ext.mc_msr[6].reg = MSR_IA32_MCG_EBP; > - rdmsrl(MSR_IA32_MCG_EBP, mc_ext.mc_msr[6].value); > - mc_ext.mc_msr[7].reg = MSR_IA32_MCG_ESP; > - rdmsrl(MSR_IA32_MCG_ESP, mc_ext.mc_msr[7].value); > - mc_ext.mc_msr[8].reg = MSR_IA32_MCG_EFLAGS; > - rdmsrl(MSR_IA32_MCG_EFLAGS, mc_ext.mc_msr[8].value); > - mc_ext.mc_msr[9].reg = MSR_IA32_MCG_EIP; > - rdmsrl(MSR_IA32_MCG_EIP, mc_ext.mc_msr[9].value); > + intel_get_extended_msr(&mc_ext, MSR_IA32_MCG_EAX); > + intel_get_extended_msr(&mc_ext, MSR_IA32_MCG_EBX); > + intel_get_extended_msr(&mc_ext, MSR_IA32_MCG_ECX); > + intel_get_extended_msr(&mc_ext, MSR_IA32_MCG_EDX); > + intel_get_extended_msr(&mc_ext, MSR_IA32_MCG_ESI); > + intel_get_extended_msr(&mc_ext, MSR_IA32_MCG_EDI); > + intel_get_extended_msr(&mc_ext, MSR_IA32_MCG_EBP); > + intel_get_extended_msr(&mc_ext, MSR_IA32_MCG_ESP); > + intel_get_extended_msr(&mc_ext, MSR_IA32_MCG_EFLAGS); > + intel_get_extended_msr(&mc_ext, MSR_IA32_MCG_EIP); > + intel_get_extended_msr(&mc_ext, MSR_IA32_MCG_MISC); > + > +#ifdef __x86_64__ > + intel_get_extended_msr(&mc_ext, MSR_IA32_MCG_R8); > + intel_get_extended_msr(&mc_ext, MSR_IA32_MCG_R9); > + intel_get_extended_msr(&mc_ext, MSR_IA32_MCG_R10); > + intel_get_extended_msr(&mc_ext, MSR_IA32_MCG_R11); > + intel_get_extended_msr(&mc_ext, MSR_IA32_MCG_R12); > + intel_get_extended_msr(&mc_ext, MSR_IA32_MCG_R13); > + intel_get_extended_msr(&mc_ext, MSR_IA32_MCG_R14); > + intel_get_extended_msr(&mc_ext, MSR_IA32_MCG_R15); > +#endif > > x86_mcinfo_add(mci, &mc_ext); > > --- 2009-03-27.orig/xen/include/asm-x86/msr-index.h 2009-03-27 > 16:43:26.000000000 +0100 +++ > 2009-03-27/xen/include/asm-x86/msr-index.h 2009-03-27 13:18:04.000000000 > +0100 @@ -326,7 +326,15 @@ > #define MSR_IA32_MCG_ESP 0x00000187 > #define MSR_IA32_MCG_EFLAGS 0x00000188 > #define MSR_IA32_MCG_EIP 0x00000189 > -#define MSR_IA32_MCG_RESERVED 0x0000018a > +#define MSR_IA32_MCG_MISC 0x0000018a > +#define MSR_IA32_MCG_R8 0x00000190 > +#define MSR_IA32_MCG_R9 0x00000191 > +#define MSR_IA32_MCG_R10 0x00000192 > +#define MSR_IA32_MCG_R11 0x00000193 > +#define MSR_IA32_MCG_R12 0x00000194 > +#define MSR_IA32_MCG_R13 0x00000195 > +#define MSR_IA32_MCG_R14 0x00000196 > +#define MSR_IA32_MCG_R15 0x00000197 > > /* Pentium IV performance counter MSRs */ > #define MSR_P4_BPU_PERFCTR0 0x00000300 > --- 2009-03-27.orig/xen/include/public/arch-x86/xen-mca.h 2009-03-27 > 16:47:30.000000000 +0100 +++ > 2009-03-27/xen/include/public/arch-x86/xen-mca.h 2009-03-27 > 16:48:35.000000000 +0100 @@ -166,11 +166,11 @@ struct mcinfo_extended { > > uint32_t mc_msrs; /* Number of msr with valid values. */ > /* > - * Currently Intel extended MSR (32/64) including all gp registers > - * and E(R)DI, E(R)BP, E(R)SP, E(R)FLAGS, E(R)IP, E(R)MISC, only 10 > - * of them might be useful. So expend this array to 10. > - */ > - struct mcinfo_msr mc_msr[10]; > + * Currently Intel extended MSR (32/64) include all gp registers > + * and E(R)FLAGS, E(R)IP, E(R)MISC, up to 11/19 of them might be > + * useful at present. So expand this array to 16/32 to leave room. > + */ > + struct mcinfo_msr mc_msr[sizeof(void *) * 4]; Please make this a fixed sized array. There are users like Oracle who run a 32bit PAE Dom0 on a 64bit Xen ... > }; > > /* Recovery Action flags. Giving recovery result information to DOM0 */ -- ---to satisfy European Law for business letters: Advanced Micro Devices GmbH Karl-Hammerschmidt-Str. 34, 85609 Dornach b. Muenchen Geschaeftsfuehrer: Jochen Polster, 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |