From: Zwane Mwaikambo x86_64 uses a userspace mce utility to decode MCEs, this patch will ensure that the user is notified of MCE events being logged too. Signed-off-by: Zwane Mwaikambo Signed-off-by: Andrew Morton --- 25-akpm/arch/x86_64/kernel/mce.c | 18 ++++++++++++++++++ 1 files changed, 18 insertions(+) diff -puN arch/x86_64/kernel/mce.c~x86_64-notify-user-of-mce-events arch/x86_64/kernel/mce.c --- 25/arch/x86_64/kernel/mce.c~x86_64-notify-user-of-mce-events 2005-01-10 00:02:25.564092200 -0800 +++ 25-akpm/arch/x86_64/kernel/mce.c 2005-01-10 00:02:25.568091592 -0800 @@ -31,6 +31,8 @@ static int mce_dont_init; static int tolerant = 1; static int banks; static unsigned long bank[NR_BANKS] = { [0 ... NR_BANKS-1] = ~0UL }; +static unsigned long console_logged; +static int notify_user; /* * Lockless MCE logging infrastructure. @@ -68,6 +70,9 @@ void mce_log(struct mce *mce) smp_wmb(); mcelog.entry[entry].finished = 1; smp_wmb(); + + if (!test_and_set_bit(0, &console_logged)) + notify_user = 1; } static void print_mce(struct mce *m) @@ -252,6 +257,19 @@ static void mcheck_timer(void *data) { on_each_cpu(mcheck_check_cpu, NULL, 1, 1); schedule_delayed_work(&mcheck_work, check_interval * HZ); + + /* + * It's ok to read stale data here for notify_user and + * console_logged as we'll simply get the updated versions + * on the next mcheck_timer execution and atomic operations + * on console_logged act as synchronization for notify_user + * writes. + */ + if (notify_user && console_logged) { + notify_user = 0; + clear_bit(0, &console_logged); + printk(KERN_INFO "Machine check events logged\n"); + } } _