x86/mce: Set up timer unconditionally
mce_timer must be passed to setup_timer() in all cases, no matter whether it is going to be actually used. Otherwise, when the CPU gets brought down, its call to del_timer_sync() will never return, as the timer won't have a base associated, and hence lock_timer_base() will loop infinitely. Signed-off-by: Jan Beulich <jbeulich@novell.com> Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com> Cc: <stable@kernel.org> LKML-Reference: <4B1DB831.2030801@jp.fujitsu.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
a946d8f11f
commit
bc09effabf
1 changed files with 2 additions and 1 deletions
|
@ -1388,13 +1388,14 @@ static void __mcheck_cpu_init_timer(void)
|
|||
struct timer_list *t = &__get_cpu_var(mce_timer);
|
||||
int *n = &__get_cpu_var(mce_next_interval);
|
||||
|
||||
setup_timer(t, mce_start_timer, smp_processor_id());
|
||||
|
||||
if (mce_ignore_ce)
|
||||
return;
|
||||
|
||||
*n = check_interval * HZ;
|
||||
if (!*n)
|
||||
return;
|
||||
setup_timer(t, mce_start_timer, smp_processor_id());
|
||||
t->expires = round_jiffies(jiffies + *n);
|
||||
add_timer_on(t, smp_processor_id());
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue