From 1aa561a0e83bffa7f4578f2c190a51e7e394d241 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 16 Dec 2009 10:56:27 -0800 Subject: [PATCH] another .31 patch --- queue-2.6.31/series | 1 + ...x86-mce-set-up-timer-unconditionally.patch | 43 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 queue-2.6.31/x86-mce-set-up-timer-unconditionally.patch diff --git a/queue-2.6.31/series b/queue-2.6.31/series index fb66532fbb4..57294956e97 100644 --- a/queue-2.6.31/series +++ b/queue-2.6.31/series @@ -66,3 +66,4 @@ sparc64-don-t-specify-irqf_shared-for-ldc-interrupts.patch sparc64-fix-overly-strict-range-type-matching-for-pci-devices.patch sparc64-fix-stack-debugging-irq-stack-regression.patch sparc-set-uts_machine-correctly.patch +x86-mce-set-up-timer-unconditionally.patch diff --git a/queue-2.6.31/x86-mce-set-up-timer-unconditionally.patch b/queue-2.6.31/x86-mce-set-up-timer-unconditionally.patch new file mode 100644 index 00000000000..a6f18e1e7ab --- /dev/null +++ b/queue-2.6.31/x86-mce-set-up-timer-unconditionally.patch @@ -0,0 +1,43 @@ +From bc09effabf0c5c6c7021e5ef9af15a23579b32a8 Mon Sep 17 00:00:00 2001 +From: Jan Beulich +Date: Tue, 8 Dec 2009 11:21:37 +0900 +Subject: x86/mce: Set up timer unconditionally + +From: Jan Beulich + +commit bc09effabf0c5c6c7021e5ef9af15a23579b32a8 upstream. + +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 +Signed-off-by: Hidetoshi Seto +LKML-Reference: <4B1DB831.2030801@jp.fujitsu.com> +Signed-off-by: Ingo Molnar +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/kernel/cpu/mcheck/mce.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/arch/x86/kernel/cpu/mcheck/mce.c ++++ b/arch/x86/kernel/cpu/mcheck/mce.c +@@ -1327,13 +1327,14 @@ static void mce_init_timer(void) + struct timer_list *t = &__get_cpu_var(mce_timer); + int *n = &__get_cpu_var(next_interval); + ++ setup_timer(t, mcheck_timer, smp_processor_id()); ++ + if (mce_ignore_ce) + return; + + *n = check_interval * HZ; + if (!*n) + return; +- setup_timer(t, mcheck_timer, smp_processor_id()); + t->expires = round_jiffies(jiffies + *n); + add_timer_on(t, smp_processor_id()); + } -- 2.47.3