aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel
diff options
context:
space:
mode:
authorAndi Kleen <ak@linux.intel.com>2009-04-28 08:23:18 -0400
committerH. Peter Anvin <hpa@zytor.com>2009-05-28 12:24:12 -0400
commit8e97aef5f43ec715f394bc15015ff263b80c3ad6 (patch)
treec3b02379649c3c2b1fa4bae5fda0232a3929f1b2 /arch/x86/kernel
parentd7c3c9a609563868d8a70e220399d06a25aba095 (diff)
x86, mce: remove machine check handler idle notify on 64bit
i386 has no idle notifiers, but the 64bit machine check code uses them to wake up mcelog from a fatal machine check exception. For corrected machine checks found by the poller or threshold interrupts going through an idle notifier is not needed because the wake_up can is just done directly and doesn't need the idle notifier. It is only needed for logging exceptions. To be honest I never liked the idle notifier even though I signed off on it. On closer investigation the code actually turned out to be nearly. Right now machine check exceptions on x86 are always unrecoverable (lead to panic due to PCC), which means we never execute the idle notifier path. The only exception is the somewhat weird tolerant==3 case, which ignores PCC. I'll fix this in a future patch in a much cleaner way. So remove the "mcelog wakeup through idle notifier" code from 64bit. This allows to compile the 64bit machine check handler on 32bit which doesn't have idle notifiers. Signed-off-by: Andi Kleen <ak@linux.intel.com> Signed-off-by: H. Peter Anvin <hpa@zytor.com> Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r--arch/x86/kernel/cpu/mcheck/mce.c23
1 files changed, 0 insertions, 23 deletions
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
index 5395200dc9d9..7562c1f674f3 100644
--- a/arch/x86/kernel/cpu/mcheck/mce.c
+++ b/arch/x86/kernel/cpu/mcheck/mce.c
@@ -555,29 +555,6 @@ int mce_notify_user(void)
555 return 0; 555 return 0;
556} 556}
557 557
558/* see if the idle task needs to notify userspace: */
559static int
560mce_idle_callback(struct notifier_block *nfb, unsigned long action,
561 void *unused)
562{
563 /* IDLE_END should be safe - interrupts are back on */
564 if (action == IDLE_END && test_thread_flag(TIF_MCE_NOTIFY))
565 mce_notify_user();
566
567 return NOTIFY_OK;
568}
569
570static struct notifier_block mce_idle_notifier = {
571 .notifier_call = mce_idle_callback,
572};
573
574static __init int periodic_mcheck_init(void)
575{
576 idle_notifier_register(&mce_idle_notifier);
577 return 0;
578}
579__initcall(periodic_mcheck_init);
580
581/* 558/*
582 * Initialize Machine Checks for a CPU. 559 * Initialize Machine Checks for a CPU.
583 */ 560 */