···4545/* Please don't make this stuff initdata!!! --DaveM */4646static unsigned char boot_cpu_id;47474848-cpumask_t cpu_online_map = CPU_MASK_NONE;4949-cpumask_t phys_cpu_present_map = CPU_MASK_NONE;4848+cpumask_t cpu_online_map = CPU_MASK_NONE __read_mostly;4949+cpumask_t phys_cpu_present_map = CPU_MASK_NONE __read_mostly;5050static cpumask_t smp_commenced_mask;5151static cpumask_t cpu_callout_map;5252···155155 panic("SMP bolixed\n");156156}157157158158-static unsigned long current_tick_offset;158158+static unsigned long current_tick_offset __read_mostly;159159160160/* This tick register synchronization scheme is taken entirely from161161 * the ia64 port, see arch/ia64/kernel/smpboot.c for details and credit.···11931193{11941194}1195119511961196-unsigned long __per_cpu_base;11971197-unsigned long __per_cpu_shift;11961196+unsigned long __per_cpu_base __read_mostly;11971197+unsigned long __per_cpu_shift __read_mostly;1198119811991199EXPORT_SYMBOL(__per_cpu_base);12001200EXPORT_SYMBOL(__per_cpu_shift);
+9-15
arch/sparc64/kernel/time.c
···7373 .get_tick = dummy_get_tick,7474};75757676-struct sparc64_tick_ops *tick_ops = &dummy_tick_ops;7676+struct sparc64_tick_ops *tick_ops __read_mostly = &dummy_tick_ops;77777878#define TICK_PRIV_BIT (1UL << 63)7979···195195 return new_tick;196196}197197198198-static struct sparc64_tick_ops tick_operations = {198198+static struct sparc64_tick_ops tick_operations __read_mostly = {199199 .init_tick = tick_init_tick,200200 .get_tick = tick_get_tick,201201 .get_compare = tick_get_compare,···276276 return new_compare;277277}278278279279-static struct sparc64_tick_ops stick_operations = {279279+static struct sparc64_tick_ops stick_operations __read_mostly = {280280 .init_tick = stick_init_tick,281281 .get_tick = stick_get_tick,282282 .get_compare = stick_get_compare,···422422 return val;423423}424424425425-static struct sparc64_tick_ops hbtick_operations = {425425+static struct sparc64_tick_ops hbtick_operations __read_mostly = {426426 .init_tick = hbtick_init_tick,427427 .get_tick = hbtick_get_tick,428428 .get_compare = hbtick_get_compare,···437437 * NOTE: On SUN5 systems the ticker interrupt comes in using 2438438 * interrupts, one at level14 and one with softint bit 0.439439 */440440-unsigned long timer_tick_offset;441441-unsigned long timer_tick_compare;440440+unsigned long timer_tick_offset __read_mostly;442441443443-static unsigned long timer_ticks_per_nsec_quotient;442442+static unsigned long timer_ticks_per_nsec_quotient __read_mostly;444443445444#define TICK_SIZE (tick_nsec / 1000)446445···463464464465static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs * regs)465466{466466- unsigned long ticks, pstate;467467+ unsigned long ticks, compare, pstate;467468468469 write_seqlock(&xtime_lock);469470···482483 : "=r" (pstate)483484 : "i" (PSTATE_IE));484485485485- timer_tick_compare = tick_ops->add_compare(timer_tick_offset);486486+ compare = tick_ops->add_compare(timer_tick_offset);486487 ticks = tick_ops->get_tick();487488488489 /* Restore PSTATE_IE. */489490 __asm__ __volatile__("wrpr %0, 0x0, %%pstate"490491 : /* no outputs */491492 : "r" (pstate));492492- } while (time_after_eq(ticks, timer_tick_compare));493493+ } while (time_after_eq(ticks, compare));493494494495 timer_check_rtc();495496···504505 write_seqlock(&xtime_lock);505506506507 do_timer(regs);507507-508508- /*509509- * Only keep timer_tick_offset uptodate, but don't set TICK_CMPR.510510- */511511- timer_tick_compare = tick_ops->get_compare() + timer_tick_offset;512508513509 timer_check_rtc();514510