|
@@ -1373,20 +1373,15 @@ static unsigned long mce_adjust_timer_default(unsigned long interval)
|
|
|
|
|
|
static unsigned long (*mce_adjust_timer)(unsigned long interval) = mce_adjust_timer_default;
|
|
|
|
|
|
-static void __restart_timer(struct timer_list *t, unsigned long interval)
|
|
|
+static void __start_timer(struct timer_list *t, unsigned long interval)
|
|
|
{
|
|
|
unsigned long when = jiffies + interval;
|
|
|
unsigned long flags;
|
|
|
|
|
|
local_irq_save(flags);
|
|
|
|
|
|
- if (timer_pending(t)) {
|
|
|
- if (time_before(when, t->expires))
|
|
|
- mod_timer(t, when);
|
|
|
- } else {
|
|
|
- t->expires = round_jiffies(when);
|
|
|
- add_timer_on(t, smp_processor_id());
|
|
|
- }
|
|
|
+ if (!timer_pending(t) || time_before(when, t->expires))
|
|
|
+ mod_timer(t, round_jiffies(when));
|
|
|
|
|
|
local_irq_restore(flags);
|
|
|
}
|
|
@@ -1421,7 +1416,7 @@ static void mce_timer_fn(unsigned long data)
|
|
|
|
|
|
done:
|
|
|
__this_cpu_write(mce_next_interval, iv);
|
|
|
- __restart_timer(t, iv);
|
|
|
+ __start_timer(t, iv);
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -1432,7 +1427,7 @@ void mce_timer_kick(unsigned long interval)
|
|
|
struct timer_list *t = this_cpu_ptr(&mce_timer);
|
|
|
unsigned long iv = __this_cpu_read(mce_next_interval);
|
|
|
|
|
|
- __restart_timer(t, interval);
|
|
|
+ __start_timer(t, interval);
|
|
|
|
|
|
if (interval < iv)
|
|
|
__this_cpu_write(mce_next_interval, interval);
|
|
@@ -1779,17 +1774,15 @@ static void __mcheck_cpu_clear_vendor(struct cpuinfo_x86 *c)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void mce_start_timer(unsigned int cpu, struct timer_list *t)
|
|
|
+static void mce_start_timer(struct timer_list *t)
|
|
|
{
|
|
|
unsigned long iv = check_interval * HZ;
|
|
|
|
|
|
if (mca_cfg.ignore_ce || !iv)
|
|
|
return;
|
|
|
|
|
|
- per_cpu(mce_next_interval, cpu) = iv;
|
|
|
-
|
|
|
- t->expires = round_jiffies(jiffies + iv);
|
|
|
- add_timer_on(t, cpu);
|
|
|
+ this_cpu_write(mce_next_interval, iv);
|
|
|
+ __start_timer(t, iv);
|
|
|
}
|
|
|
|
|
|
static void __mcheck_cpu_setup_timer(void)
|
|
@@ -1806,7 +1799,7 @@ static void __mcheck_cpu_init_timer(void)
|
|
|
unsigned int cpu = smp_processor_id();
|
|
|
|
|
|
setup_pinned_timer(t, mce_timer_fn, cpu);
|
|
|
- mce_start_timer(cpu, t);
|
|
|
+ mce_start_timer(t);
|
|
|
}
|
|
|
|
|
|
/* Handle unconfigured int18 (should never happen) */
|
|
@@ -2566,7 +2559,7 @@ static int mce_cpu_dead(unsigned int cpu)
|
|
|
|
|
|
static int mce_cpu_online(unsigned int cpu)
|
|
|
{
|
|
|
- struct timer_list *t = &per_cpu(mce_timer, cpu);
|
|
|
+ struct timer_list *t = this_cpu_ptr(&mce_timer);
|
|
|
int ret;
|
|
|
|
|
|
mce_device_create(cpu);
|
|
@@ -2577,13 +2570,13 @@ static int mce_cpu_online(unsigned int cpu)
|
|
|
return ret;
|
|
|
}
|
|
|
mce_reenable_cpu();
|
|
|
- mce_start_timer(cpu, t);
|
|
|
+ mce_start_timer(t);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
static int mce_cpu_pre_down(unsigned int cpu)
|
|
|
{
|
|
|
- struct timer_list *t = &per_cpu(mce_timer, cpu);
|
|
|
+ struct timer_list *t = this_cpu_ptr(&mce_timer);
|
|
|
|
|
|
mce_disable_cpu();
|
|
|
del_timer_sync(t);
|