Move some MCE data items into .data.read_mostly. Adjust some types, and make some symbols static. Signed-off-by: Jan Beulich --- 2011-03-09.orig/xen/arch/x86/cpu/mcheck/mce_intel.c +++ 2011-03-09/xen/arch/x86/cpu/mcheck/mce_intel.c @@ -25,7 +25,7 @@ static bool_t __read_mostly ser_support static bool_t __read_mostly mce_force_broadcast; boolean_param("mce_fb", mce_force_broadcast); -static int nr_intel_ext_msrs = 0; +static int __read_mostly nr_intel_ext_msrs; /* Thermal Hanlding */ #ifdef CONFIG_X86_MCE_THERMAL @@ -60,7 +60,7 @@ static void intel_thermal_interrupt(stru } /* Thermal interrupt handler for this CPU setup */ -static void (*vendor_thermal_interrupt)(struct cpu_user_regs *regs) +static void (*__read_mostly vendor_thermal_interrupt)(struct cpu_user_regs *regs) = unexpected_thermal_interrupt; fastcall void smp_thermal_interrupt(struct cpu_user_regs *regs) @@ -156,8 +156,10 @@ static cpumask_t mce_fatal_cpus; static void mce_barrier_enter(struct mce_softirq_barrier *); static void mce_barrier_exit(struct mce_softirq_barrier *); -struct mca_error_handler *mce_dhandlers, *mce_uhandlers; -int mce_dhandler_num, mce_uhandler_num; +static const struct mca_error_handler *__read_mostly mce_dhandlers; +static const struct mca_error_handler *__read_mostly mce_uhandlers; +static unsigned int __read_mostly mce_dhandler_num; +static unsigned int __read_mostly mce_uhandler_num; enum mce_result { @@ -174,12 +176,11 @@ static enum mce_result mce_action(struct { struct mc_info *local_mi; enum mce_result ret = MCER_NOERROR; - uint32_t i; struct mcinfo_common *mic = NULL; struct mca_handle_result mca_res; struct mca_binfo binfo; - struct mca_error_handler *handlers = mce_dhandlers; - int handler_num = mce_dhandler_num; + const struct mca_error_handler *handlers = mce_dhandlers; + unsigned int i, handler_num = mce_dhandler_num; /* When in mce context, regs is valid */ if (regs) @@ -724,8 +725,10 @@ static void intel_default_dhandler(int b result->result = MCA_NO_ACTION; } -struct mca_error_handler intel_mce_dhandlers[] = - {{is_async_memerr, intel_memerr_dhandler}, {default_check, intel_default_dhandler}}; +static const struct mca_error_handler intel_mce_dhandlers[] = { + {is_async_memerr, intel_memerr_dhandler}, + {default_check, intel_default_dhandler} +}; static void intel_default_uhandler(int bnum, struct mca_binfo *binfo, @@ -749,8 +752,9 @@ static void intel_default_uhandler(int b } } -struct mca_error_handler intel_mce_uhandlers[] = - {{default_check, intel_default_uhandler}}; +static const struct mca_error_handler intel_mce_uhandlers[] = { + {default_check, intel_default_uhandler} +}; static void intel_machine_check(struct cpu_user_regs * regs, long error_code) { @@ -1222,9 +1226,9 @@ static void intel_init_mce(void) mce_need_clearbank_register(intel_need_clearbank_scan); mce_dhandlers = intel_mce_dhandlers; - mce_dhandler_num = sizeof(intel_mce_dhandlers)/sizeof(struct mca_error_handler); + mce_dhandler_num = ARRAY_SIZE(intel_mce_dhandlers); mce_uhandlers = intel_mce_uhandlers; - mce_uhandler_num = sizeof(intel_mce_uhandlers)/sizeof(struct mca_error_handler); + mce_uhandler_num = ARRAY_SIZE(intel_mce_uhandlers); } static void cpu_mcabank_free(unsigned int cpu) --- 2011-03-09.orig/xen/arch/x86/cpu/mcheck/vmce.c +++ 2011-03-09/xen/arch/x86/cpu/mcheck/vmce.c @@ -20,11 +20,11 @@ #define dom_vmce(x) ((x)->arch.vmca_msrs) -uint64_t g_mcg_cap; +static uint64_t __read_mostly g_mcg_cap; /* Real value in physical CTL MSR */ -uint64_t h_mcg_ctl = 0UL; -uint64_t *h_mci_ctrl; +static uint64_t __read_mostly h_mcg_ctl; +static uint64_t *__read_mostly h_mci_ctrl; int vmce_init_msr(struct domain *d) { @@ -425,6 +425,7 @@ int fill_vmsr_data(struct mcinfo_bank *m return 0; } +#if 0 /* currently unused */ int vmce_domain_inject( struct mcinfo_bank *bank, struct domain *d, struct mcinfo_global *global) { @@ -436,6 +437,7 @@ int vmce_domain_inject( return inject_vmce(d); } +#endif int vmce_init(struct cpuinfo_x86 *c) {