Commit 5be6066a authored by Hidetoshi Seto's avatar Hidetoshi Seto Committed by H. Peter Anvin

x86, mce: percpu mcheck_timer should be pinned

If CONFIG_NO_HZ + CONFIG_SMP, timer added via add_timer() might
be migrated on other cpu.  Use add_timer_on() instead.

Avoids the following failure:

Maciej Rutecki wrote:
> > After normal boot I try:
> >
> > echo 1 > /sys/devices/system/machinecheck/machinecheck0/check_interval
> >
> > I found this in dmesg:
> >
> > [  141.704025] ------------[ cut here ]------------
> > [  141.704039] WARNING: at arch/x86/kernel/cpu/mcheck/mce.c:1102
> > mcheck_timer+0xf5/0x100()
Reported-by: default avatarMaciej Rutecki <maciej.rutecki@gmail.com>
Signed-off-by: default avatarHidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Tested-by: default avatarMaciej Rutecki <maciej.rutecki@gmail.com>
Acked-by: default avatarAndi Kleen <ak@linux.intel.com>
Signed-off-by: default avatarH. Peter Anvin <hpa@zytor.com>
parent 5211a242
...@@ -1117,7 +1117,7 @@ static void mcheck_timer(unsigned long data) ...@@ -1117,7 +1117,7 @@ static void mcheck_timer(unsigned long data)
*n = min(*n*2, (int)round_jiffies_relative(check_interval*HZ)); *n = min(*n*2, (int)round_jiffies_relative(check_interval*HZ));
t->expires = jiffies + *n; t->expires = jiffies + *n;
add_timer(t); add_timer_on(t, smp_processor_id());
} }
static void mce_do_trigger(struct work_struct *work) static void mce_do_trigger(struct work_struct *work)
...@@ -1321,7 +1321,7 @@ static void mce_init_timer(void) ...@@ -1321,7 +1321,7 @@ static void mce_init_timer(void)
return; return;
setup_timer(t, mcheck_timer, smp_processor_id()); setup_timer(t, mcheck_timer, smp_processor_id());
t->expires = round_jiffies(jiffies + *n); t->expires = round_jiffies(jiffies + *n);
add_timer(t); add_timer_on(t, smp_processor_id());
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment