Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bc09effa authored by Jan Beulich's avatar Jan Beulich Committed by Ingo Molnar
Browse files

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: default avatarJan Beulich <jbeulich@novell.com>
Signed-off-by: default avatarHidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Cc: <stable@kernel.org>
LKML-Reference: <4B1DB831.2030801@jp.fujitsu.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent a946d8f1
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -1388,13 +1388,14 @@ static void __mcheck_cpu_init_timer(void)
	struct timer_list *t = &__get_cpu_var(mce_timer);
	struct timer_list *t = &__get_cpu_var(mce_timer);
	int *n = &__get_cpu_var(mce_next_interval);
	int *n = &__get_cpu_var(mce_next_interval);


	setup_timer(t, mce_start_timer, smp_processor_id());

	if (mce_ignore_ce)
	if (mce_ignore_ce)
		return;
		return;


	*n = check_interval * HZ;
	*n = check_interval * HZ;
	if (!*n)
	if (!*n)
		return;
		return;
	setup_timer(t, mce_start_timer, smp_processor_id());
	t->expires = round_jiffies(jiffies + *n);
	t->expires = round_jiffies(jiffies + *n);
	add_timer_on(t, smp_processor_id());
	add_timer_on(t, smp_processor_id());
}
}