- Update Xen patches to 2.6.35-rc3.
[linux-flexiantxendom0-3.2.10.git] / arch / x86 / kernel / cpu / mcheck / mce.c
1 /*
2  * Machine check handler.
3  *
4  * K8 parts Copyright 2002,2003 Andi Kleen, SuSE Labs.
5  * Rest from unknown author(s).
6  * 2004 Andi Kleen. Rewrote most of it.
7  * Copyright 2008 Intel Corporation
8  * Author: Andi Kleen
9  */
10 #include <linux/thread_info.h>
11 #include <linux/capability.h>
12 #include <linux/miscdevice.h>
13 #include <linux/interrupt.h>
14 #include <linux/ratelimit.h>
15 #include <linux/kallsyms.h>
16 #include <linux/rcupdate.h>
17 #include <linux/kobject.h>
18 #include <linux/uaccess.h>
19 #include <linux/kdebug.h>
20 #include <linux/kernel.h>
21 #include <linux/percpu.h>
22 #include <linux/string.h>
23 #include <linux/sysdev.h>
24 #include <linux/delay.h>
25 #include <linux/ctype.h>
26 #include <linux/sched.h>
27 #include <linux/sysfs.h>
28 #include <linux/types.h>
29 #include <linux/slab.h>
30 #include <linux/init.h>
31 #include <linux/kmod.h>
32 #include <linux/poll.h>
33 #include <linux/nmi.h>
34 #include <linux/cpu.h>
35 #include <linux/smp.h>
36 #include <linux/fs.h>
37 #include <linux/mm.h>
38 #include <linux/debugfs.h>
39 #include <linux/edac_mce.h>
40
41 #include <asm/processor.h>
42 #include <asm/hw_irq.h>
43 #include <asm/apic.h>
44 #include <asm/idle.h>
45 #include <asm/ipi.h>
46 #include <asm/mce.h>
47 #include <asm/msr.h>
48
49 #include "mce-internal.h"
50
51 static DEFINE_MUTEX(mce_read_mutex);
52
53 #define rcu_dereference_check_mce(p) \
54         rcu_dereference_check((p), \
55                               rcu_read_lock_sched_held() || \
56                               lockdep_is_held(&mce_read_mutex))
57
58 #define CREATE_TRACE_POINTS
59 #include <trace/events/mce.h>
60
61 int mce_disabled __read_mostly;
62
63 #define MISC_MCELOG_MINOR       227
64
65 #define SPINUNIT 100    /* 100ns */
66
67 atomic_t mce_entry;
68
69 DEFINE_PER_CPU(unsigned, mce_exception_count);
70
71 /*
72  * Tolerant levels:
73  *   0: always panic on uncorrected errors, log corrected errors
74  *   1: panic or SIGBUS on uncorrected errors, log corrected errors
75  *   2: SIGBUS or log uncorrected errors (if possible), log corrected errors
76  *   3: never panic or SIGBUS, log all errors (for testing only)
77  */
78 static int                      tolerant                __read_mostly = 1;
79 static int                      banks                   __read_mostly;
80 static int                      rip_msr                 __read_mostly;
81 static int                      mce_bootlog             __read_mostly = -1;
82 static int                      monarch_timeout         __read_mostly = -1;
83 static int                      mce_panic_timeout       __read_mostly;
84 static int                      mce_dont_log_ce         __read_mostly;
85 int                             mce_cmci_disabled       __read_mostly;
86 int                             mce_ignore_ce           __read_mostly;
87 int                             mce_ser                 __read_mostly;
88
89 struct mce_bank                *mce_banks               __read_mostly;
90
91 /* User mode helper program triggered by machine check event */
92 static unsigned long            mce_need_notify;
93 static char                     mce_helper[128];
94 static char                     *mce_helper_argv[2] = { mce_helper, NULL };
95
96 static DECLARE_WAIT_QUEUE_HEAD(mce_wait);
97 static DEFINE_PER_CPU(struct mce, mces_seen);
98 static int                      cpu_missing;
99 void                            (*mce_cpu_specific_poll)(struct mce *);
100 EXPORT_SYMBOL_GPL(mce_cpu_specific_poll);
101
102 /*
103  * CPU/chipset specific EDAC code can register a notifier call here to print
104  * MCE errors in a human-readable form.
105  */
106 ATOMIC_NOTIFIER_HEAD(x86_mce_decoder_chain);
107 EXPORT_SYMBOL_GPL(x86_mce_decoder_chain);
108
109 static int default_decode_mce(struct notifier_block *nb, unsigned long val,
110                                void *data)
111 {
112         pr_emerg("No human readable MCE decoding support on this CPU type.\n");
113         pr_emerg("Run the message through 'mcelog --ascii' to decode.\n");
114
115         return NOTIFY_STOP;
116 }
117
118 static struct notifier_block mce_dec_nb = {
119         .notifier_call = default_decode_mce,
120         .priority      = -1,
121 };
122
123 /* MCA banks polled by the period polling timer for corrected events */
124 DEFINE_PER_CPU(mce_banks_t, mce_poll_banks) = {
125         [0 ... BITS_TO_LONGS(MAX_NR_BANKS)-1] = ~0UL
126 };
127
128 static DEFINE_PER_CPU(struct work_struct, mce_work);
129
130 /* Do initial initialization of a struct mce */
131 void mce_setup(struct mce *m)
132 {
133         memset(m, 0, sizeof(struct mce));
134         m->cpu = m->extcpu = smp_processor_id();
135         rdtscll(m->tsc);
136         /* We hope get_seconds stays lockless */
137         m->time = get_seconds();
138         m->cpuvendor = boot_cpu_data.x86_vendor;
139         m->cpuid = cpuid_eax(1);
140 #ifdef CONFIG_SMP
141         m->socketid = cpu_data(m->extcpu).phys_proc_id;
142 #endif
143         m->apicid = cpu_data(m->extcpu).initial_apicid;
144         rdmsrl(MSR_IA32_MCG_CAP, m->mcgcap);
145 }
146
147 DEFINE_PER_CPU(struct mce, injectm);
148 EXPORT_PER_CPU_SYMBOL_GPL(injectm);
149
150 /*
151  * Lockless MCE logging infrastructure.
152  * This avoids deadlocks on printk locks without having to break locks. Also
153  * separate MCEs from kernel messages to avoid bogus bug reports.
154  */
155
156 static struct mce_log mcelog = {
157         .signature      = MCE_LOG_SIGNATURE,
158         .len            = MCE_LOG_LEN,
159         .recordlen      = sizeof(struct mce),
160 };
161
162 void mce_log(struct mce *mce)
163 {
164         unsigned next, entry;
165
166         /* Emit the trace record: */
167         trace_mce_record(mce);
168
169         mce->finished = 0;
170         wmb();
171         for (;;) {
172                 entry = rcu_dereference_check_mce(mcelog.next);
173                 for (;;) {
174                         /*
175                          * If edac_mce is enabled, it will check the error type
176                          * and will process it, if it is a known error.
177                          * Otherwise, the error will be sent through mcelog
178                          * interface
179                          */
180                         if (edac_mce_parse(mce))
181                                 return;
182
183                         /*
184                          * When the buffer fills up discard new entries.
185                          * Assume that the earlier errors are the more
186                          * interesting ones:
187                          */
188                         if (entry >= MCE_LOG_LEN) {
189                                 set_bit(MCE_OVERFLOW,
190                                         (unsigned long *)&mcelog.flags);
191                                 return;
192                         }
193                         /* Old left over entry. Skip: */
194                         if (mcelog.entry[entry].finished) {
195                                 entry++;
196                                 continue;
197                         }
198                         break;
199                 }
200                 smp_rmb();
201                 next = entry + 1;
202                 if (cmpxchg(&mcelog.next, entry, next) == entry)
203                         break;
204         }
205         memcpy(mcelog.entry + entry, mce, sizeof(struct mce));
206         wmb();
207         mcelog.entry[entry].finished = 1;
208         wmb();
209
210         mce->finished = 1;
211         set_bit(0, &mce_need_notify);
212 }
213
214 static void print_mce(struct mce *m)
215 {
216         pr_emerg("CPU %d: Machine Check Exception: %16Lx Bank %d: %016Lx\n",
217                m->extcpu, m->mcgstatus, m->bank, m->status);
218
219         if (m->ip) {
220                 pr_emerg("RIP%s %02x:<%016Lx> ",
221                         !(m->mcgstatus & MCG_STATUS_EIPV) ? " !INEXACT!" : "",
222                                 m->cs, m->ip);
223
224                 if (m->cs == __KERNEL_CS)
225                         print_symbol("{%s}", m->ip);
226                 pr_cont("\n");
227         }
228
229         pr_emerg("TSC %llx ", m->tsc);
230         if (m->addr)
231                 pr_cont("ADDR %llx ", m->addr);
232         if (m->misc)
233                 pr_cont("MISC %llx ", m->misc);
234
235         pr_cont("\n");
236         pr_emerg("PROCESSOR %u:%x TIME %llu SOCKET %u APIC %x\n",
237                 m->cpuvendor, m->cpuid, m->time, m->socketid, m->apicid);
238
239         /*
240          * Print out human-readable details about the MCE error,
241          * (if the CPU has an implementation for that)
242          */
243         atomic_notifier_call_chain(&x86_mce_decoder_chain, 0, m);
244 }
245
246 static void print_mce_head(void)
247 {
248         pr_emerg("\nHARDWARE ERROR\n");
249 }
250
251 static void print_mce_tail(void)
252 {
253         pr_emerg("This is not a software problem!\n");
254 }
255
256 #define PANIC_TIMEOUT 5 /* 5 seconds */
257
258 static atomic_t mce_paniced;
259
260 static int fake_panic;
261 static atomic_t mce_fake_paniced;
262
263 /* Panic in progress. Enable interrupts and wait for final IPI */
264 static void wait_for_panic(void)
265 {
266         long timeout = PANIC_TIMEOUT*USEC_PER_SEC;
267
268         preempt_disable();
269         local_irq_enable();
270         while (timeout-- > 0)
271                 udelay(1);
272         if (panic_timeout == 0)
273                 panic_timeout = mce_panic_timeout;
274         panic("Panicing machine check CPU died");
275 }
276
277 static void mce_panic(char *msg, struct mce *final, char *exp)
278 {
279         int i, apei_err = 0;
280
281         if (!fake_panic) {
282                 /*
283                  * Make sure only one CPU runs in machine check panic
284                  */
285                 if (atomic_inc_return(&mce_paniced) > 1)
286                         wait_for_panic();
287                 barrier();
288
289                 bust_spinlocks(1);
290                 console_verbose();
291         } else {
292                 /* Don't log too much for fake panic */
293                 if (atomic_inc_return(&mce_fake_paniced) > 1)
294                         return;
295         }
296         print_mce_head();
297         /* First print corrected ones that are still unlogged */
298         for (i = 0; i < MCE_LOG_LEN; i++) {
299                 struct mce *m = &mcelog.entry[i];
300                 if (!(m->status & MCI_STATUS_VAL))
301                         continue;
302                 if (!(m->status & MCI_STATUS_UC)) {
303                         print_mce(m);
304                         if (!apei_err)
305                                 apei_err = apei_write_mce(m);
306                 }
307         }
308         /* Now print uncorrected but with the final one last */
309         for (i = 0; i < MCE_LOG_LEN; i++) {
310                 struct mce *m = &mcelog.entry[i];
311                 if (!(m->status & MCI_STATUS_VAL))
312                         continue;
313                 if (!(m->status & MCI_STATUS_UC))
314                         continue;
315                 if (!final || memcmp(m, final, sizeof(struct mce))) {
316                         print_mce(m);
317                         if (!apei_err)
318                                 apei_err = apei_write_mce(m);
319                 }
320         }
321         if (final) {
322                 print_mce(final);
323                 if (!apei_err)
324                         apei_err = apei_write_mce(final);
325         }
326         if (cpu_missing)
327                 printk(KERN_EMERG "Some CPUs didn't answer in synchronization\n");
328         print_mce_tail();
329         if (exp)
330                 printk(KERN_EMERG "Machine check: %s\n", exp);
331         if (!fake_panic) {
332                 if (panic_timeout == 0)
333                         panic_timeout = mce_panic_timeout;
334                 panic(msg);
335         } else
336                 printk(KERN_EMERG "Fake kernel panic: %s\n", msg);
337 }
338
339 /* Support code for software error injection */
340
341 static int msr_to_offset(u32 msr)
342 {
343         unsigned bank = __get_cpu_var(injectm.bank);
344
345         if (msr == rip_msr)
346                 return offsetof(struct mce, ip);
347         if (msr == MSR_IA32_MCx_STATUS(bank))
348                 return offsetof(struct mce, status);
349         if (msr == MSR_IA32_MCx_ADDR(bank))
350                 return offsetof(struct mce, addr);
351         if (msr == MSR_IA32_MCx_MISC(bank))
352                 return offsetof(struct mce, misc);
353         if (msr == MSR_IA32_MCG_STATUS)
354                 return offsetof(struct mce, mcgstatus);
355         return -1;
356 }
357
358 /* MSR access wrappers used for error injection */
359 static u64 mce_rdmsrl(u32 msr)
360 {
361         u64 v;
362
363         if (__get_cpu_var(injectm).finished) {
364                 int offset = msr_to_offset(msr);
365
366                 if (offset < 0)
367                         return 0;
368                 return *(u64 *)((char *)&__get_cpu_var(injectm) + offset);
369         }
370
371         if (rdmsrl_safe(msr, &v)) {
372                 WARN_ONCE(1, "mce: Unable to read msr %d!\n", msr);
373                 /*
374                  * Return zero in case the access faulted. This should
375                  * not happen normally but can happen if the CPU does
376                  * something weird, or if the code is buggy.
377                  */
378                 v = 0;
379         }
380
381         return v;
382 }
383
384 static void mce_wrmsrl(u32 msr, u64 v)
385 {
386         if (__get_cpu_var(injectm).finished) {
387                 int offset = msr_to_offset(msr);
388
389                 if (offset >= 0)
390                         *(u64 *)((char *)&__get_cpu_var(injectm) + offset) = v;
391                 return;
392         }
393         wrmsrl(msr, v);
394 }
395
396 static int under_injection(void)
397 {
398         return __get_cpu_var(injectm).finished;
399 }
400
401 /*
402  * Simple lockless ring to communicate PFNs from the exception handler with the
403  * process context work function. This is vastly simplified because there's
404  * only a single reader and a single writer.
405  */
406 #define MCE_RING_SIZE 16        /* we use one entry less */
407
408 struct mce_ring {
409         unsigned short start;
410         unsigned short end;
411         unsigned long ring[MCE_RING_SIZE];
412 };
413 static DEFINE_PER_CPU(struct mce_ring, mce_ring);
414
415 /* Runs with CPU affinity in workqueue */
416 static int mce_ring_empty(void)
417 {
418         struct mce_ring *r = &__get_cpu_var(mce_ring);
419
420         return r->start == r->end;
421 }
422
423 static int mce_ring_get(unsigned long *pfn)
424 {
425         struct mce_ring *r;
426         int ret = 0;
427
428         *pfn = 0;
429         get_cpu();
430         r = &__get_cpu_var(mce_ring);
431         if (r->start == r->end)
432                 goto out;
433         *pfn = r->ring[r->start];
434         r->start = (r->start + 1) % MCE_RING_SIZE;
435         ret = 1;
436 out:
437         put_cpu();
438         return ret;
439 }
440
441 /* Always runs in MCE context with preempt off */
442 static int mce_ring_add(unsigned long pfn)
443 {
444         struct mce_ring *r = &__get_cpu_var(mce_ring);
445         unsigned next;
446
447         next = (r->end + 1) % MCE_RING_SIZE;
448         if (next == r->start)
449                 return -1;
450         r->ring[r->end] = pfn;
451         wmb();
452         r->end = next;
453         return 0;
454 }
455
456 int mce_available(struct cpuinfo_x86 *c)
457 {
458         if (mce_disabled)
459                 return 0;
460         return cpu_has(c, X86_FEATURE_MCE) && cpu_has(c, X86_FEATURE_MCA);
461 }
462
463 static void mce_schedule_work(void)
464 {
465         if (!mce_ring_empty()) {
466                 struct work_struct *work = &__get_cpu_var(mce_work);
467                 if (!work_pending(work))
468                         schedule_work(work);
469         }
470 }
471
472 /*
473  * Get the address of the instruction at the time of the machine check
474  * error.
475  */
476 static inline void mce_get_rip(struct mce *m, struct pt_regs *regs)
477 {
478
479         if (regs && (m->mcgstatus & (MCG_STATUS_RIPV|MCG_STATUS_EIPV))) {
480                 m->ip = regs->ip;
481                 m->cs = regs->cs;
482         } else {
483                 m->ip = 0;
484                 m->cs = 0;
485         }
486         if (rip_msr)
487                 m->ip = mce_rdmsrl(rip_msr);
488 }
489
490 #ifdef CONFIG_X86_LOCAL_APIC
491 /*
492  * Called after interrupts have been reenabled again
493  * when a MCE happened during an interrupts off region
494  * in the kernel.
495  */
496 asmlinkage void smp_mce_self_interrupt(struct pt_regs *regs)
497 {
498 #ifndef CONFIG_XEN
499         ack_APIC_irq();
500 #endif
501         exit_idle();
502         irq_enter();
503         mce_notify_irq();
504         mce_schedule_work();
505         irq_exit();
506 }
507 #endif
508
509 static void mce_report_event(struct pt_regs *regs)
510 {
511         if (regs->flags & (X86_VM_MASK|X86_EFLAGS_IF)) {
512                 mce_notify_irq();
513                 /*
514                  * Triggering the work queue here is just an insurance
515                  * policy in case the syscall exit notify handler
516                  * doesn't run soon enough or ends up running on the
517                  * wrong CPU (can happen when audit sleeps)
518                  */
519                 mce_schedule_work();
520                 return;
521         }
522
523 #if defined(CONFIG_X86_LOCAL_APIC) && !defined(CONFIG_XEN)
524         /*
525          * Without APIC do not notify. The event will be picked
526          * up eventually.
527          */
528         if (!cpu_has_apic)
529                 return;
530
531         /*
532          * When interrupts are disabled we cannot use
533          * kernel services safely. Trigger an self interrupt
534          * through the APIC to instead do the notification
535          * after interrupts are reenabled again.
536          */
537         apic->send_IPI_self(MCE_SELF_VECTOR);
538
539         /*
540          * Wait for idle afterwards again so that we don't leave the
541          * APIC in a non idle state because the normal APIC writes
542          * cannot exclude us.
543          */
544         apic_wait_icr_idle();
545 #endif
546 }
547
548 DEFINE_PER_CPU(unsigned, mce_poll_count);
549
550 /*
551  * Poll for corrected events or events that happened before reset.
552  * Those are just logged through /dev/mcelog.
553  *
554  * This is executed in standard interrupt context.
555  *
556  * Note: spec recommends to panic for fatal unsignalled
557  * errors here. However this would be quite problematic --
558  * we would need to reimplement the Monarch handling and
559  * it would mess up the exclusion between exception handler
560  * and poll hander -- * so we skip this for now.
561  * These cases should not happen anyways, or only when the CPU
562  * is already totally * confused. In this case it's likely it will
563  * not fully execute the machine check handler either.
564  */
565 void machine_check_poll(enum mcp_flags flags, mce_banks_t *b)
566 {
567         struct mce m;
568         int i;
569
570         percpu_inc(mce_poll_count);
571
572         mce_setup(&m);
573
574         m.mcgstatus = mce_rdmsrl(MSR_IA32_MCG_STATUS);
575         for (i = 0; i < banks; i++) {
576                 if (!mce_banks[i].ctl || !test_bit(i, *b))
577                         continue;
578
579                 m.misc = 0;
580                 m.addr = 0;
581                 m.bank = i;
582                 m.tsc = 0;
583
584                 barrier();
585                 m.status = mce_rdmsrl(MSR_IA32_MCx_STATUS(i));
586                 if (!(m.status & MCI_STATUS_VAL))
587                         continue;
588
589                 /*
590                  * Uncorrected or signalled events are handled by the exception
591                  * handler when it is enabled, so don't process those here.
592                  *
593                  * TBD do the same check for MCI_STATUS_EN here?
594                  */
595                 if (!(flags & MCP_UC) &&
596                     (m.status & (mce_ser ? MCI_STATUS_S : MCI_STATUS_UC)))
597                         continue;
598
599                 if (m.status & MCI_STATUS_MISCV)
600                         m.misc = mce_rdmsrl(MSR_IA32_MCx_MISC(i));
601                 if (m.status & MCI_STATUS_ADDRV)
602                         m.addr = mce_rdmsrl(MSR_IA32_MCx_ADDR(i));
603
604                 if (!(flags & MCP_TIMESTAMP))
605                         m.tsc = 0;
606
607                 if (mce_cpu_specific_poll && !under_injection() && !mce_dont_log_ce)
608                         mce_cpu_specific_poll(&m);
609
610                 /*
611                  * Don't get the IP here because it's unlikely to
612                  * have anything to do with the actual error location.
613                  */
614                 if (!(flags & MCP_DONTLOG) && !mce_dont_log_ce) {
615                         mce_log(&m);
616                         add_taint(TAINT_MACHINE_CHECK);
617                 }
618
619                 /*
620                  * Clear state for this bank.
621                  */
622                 mce_wrmsrl(MSR_IA32_MCx_STATUS(i), 0);
623         }
624
625         /*
626          * Don't clear MCG_STATUS here because it's only defined for
627          * exceptions.
628          */
629
630         sync_core();
631 }
632 EXPORT_SYMBOL_GPL(machine_check_poll);
633
634 /*
635  * Do a quick check if any of the events requires a panic.
636  * This decides if we keep the events around or clear them.
637  */
638 static int mce_no_way_out(struct mce *m, char **msg)
639 {
640         int i;
641
642         for (i = 0; i < banks; i++) {
643                 m->status = mce_rdmsrl(MSR_IA32_MCx_STATUS(i));
644                 if (mce_severity(m, tolerant, msg) >= MCE_PANIC_SEVERITY)
645                         return 1;
646         }
647         return 0;
648 }
649
650 /*
651  * Variable to establish order between CPUs while scanning.
652  * Each CPU spins initially until executing is equal its number.
653  */
654 static atomic_t mce_executing;
655
656 /*
657  * Defines order of CPUs on entry. First CPU becomes Monarch.
658  */
659 static atomic_t mce_callin;
660
661 /*
662  * Check if a timeout waiting for other CPUs happened.
663  */
664 static int mce_timed_out(u64 *t)
665 {
666         /*
667          * The others already did panic for some reason.
668          * Bail out like in a timeout.
669          * rmb() to tell the compiler that system_state
670          * might have been modified by someone else.
671          */
672         rmb();
673         if (atomic_read(&mce_paniced))
674                 wait_for_panic();
675         if (!monarch_timeout)
676                 goto out;
677         if ((s64)*t < SPINUNIT) {
678                 /* CHECKME: Make panic default for 1 too? */
679                 if (tolerant < 1)
680                         mce_panic("Timeout synchronizing machine check over CPUs",
681                                   NULL, NULL);
682                 cpu_missing = 1;
683                 return 1;
684         }
685         *t -= SPINUNIT;
686 out:
687         touch_nmi_watchdog();
688         return 0;
689 }
690
691 /*
692  * The Monarch's reign.  The Monarch is the CPU who entered
693  * the machine check handler first. It waits for the others to
694  * raise the exception too and then grades them. When any
695  * error is fatal panic. Only then let the others continue.
696  *
697  * The other CPUs entering the MCE handler will be controlled by the
698  * Monarch. They are called Subjects.
699  *
700  * This way we prevent any potential data corruption in a unrecoverable case
701  * and also makes sure always all CPU's errors are examined.
702  *
703  * Also this detects the case of a machine check event coming from outer
704  * space (not detected by any CPUs) In this case some external agent wants
705  * us to shut down, so panic too.
706  *
707  * The other CPUs might still decide to panic if the handler happens
708  * in a unrecoverable place, but in this case the system is in a semi-stable
709  * state and won't corrupt anything by itself. It's ok to let the others
710  * continue for a bit first.
711  *
712  * All the spin loops have timeouts; when a timeout happens a CPU
713  * typically elects itself to be Monarch.
714  */
715 static void mce_reign(void)
716 {
717         int cpu;
718         struct mce *m = NULL;
719         int global_worst = 0;
720         char *msg = NULL;
721         char *nmsg = NULL;
722
723         /*
724          * This CPU is the Monarch and the other CPUs have run
725          * through their handlers.
726          * Grade the severity of the errors of all the CPUs.
727          */
728         for_each_possible_cpu(cpu) {
729                 int severity = mce_severity(&per_cpu(mces_seen, cpu), tolerant,
730                                             &nmsg);
731                 if (severity > global_worst) {
732                         msg = nmsg;
733                         global_worst = severity;
734                         m = &per_cpu(mces_seen, cpu);
735                 }
736         }
737
738         /*
739          * Cannot recover? Panic here then.
740          * This dumps all the mces in the log buffer and stops the
741          * other CPUs.
742          */
743         if (m && global_worst >= MCE_PANIC_SEVERITY && tolerant < 3)
744                 mce_panic("Fatal Machine check", m, msg);
745
746         /*
747          * For UC somewhere we let the CPU who detects it handle it.
748          * Also must let continue the others, otherwise the handling
749          * CPU could deadlock on a lock.
750          */
751
752         /*
753          * No machine check event found. Must be some external
754          * source or one CPU is hung. Panic.
755          */
756         if (global_worst <= MCE_KEEP_SEVERITY && tolerant < 3)
757                 mce_panic("Machine check from unknown source", NULL, NULL);
758
759         /*
760          * Now clear all the mces_seen so that they don't reappear on
761          * the next mce.
762          */
763         for_each_possible_cpu(cpu)
764                 memset(&per_cpu(mces_seen, cpu), 0, sizeof(struct mce));
765 }
766
767 static atomic_t global_nwo;
768
769 /*
770  * Start of Monarch synchronization. This waits until all CPUs have
771  * entered the exception handler and then determines if any of them
772  * saw a fatal event that requires panic. Then it executes them
773  * in the entry order.
774  * TBD double check parallel CPU hotunplug
775  */
776 static int mce_start(int *no_way_out)
777 {
778         int order;
779         int cpus = num_online_cpus();
780         u64 timeout = (u64)monarch_timeout * NSEC_PER_USEC;
781
782         if (!timeout)
783                 return -1;
784
785         atomic_add(*no_way_out, &global_nwo);
786         /*
787          * global_nwo should be updated before mce_callin
788          */
789         smp_wmb();
790         order = atomic_inc_return(&mce_callin);
791
792         /*
793          * Wait for everyone.
794          */
795         while (atomic_read(&mce_callin) != cpus) {
796                 if (mce_timed_out(&timeout)) {
797                         atomic_set(&global_nwo, 0);
798                         return -1;
799                 }
800                 ndelay(SPINUNIT);
801         }
802
803         /*
804          * mce_callin should be read before global_nwo
805          */
806         smp_rmb();
807
808         if (order == 1) {
809                 /*
810                  * Monarch: Starts executing now, the others wait.
811                  */
812                 atomic_set(&mce_executing, 1);
813         } else {
814                 /*
815                  * Subject: Now start the scanning loop one by one in
816                  * the original callin order.
817                  * This way when there are any shared banks it will be
818                  * only seen by one CPU before cleared, avoiding duplicates.
819                  */
820                 while (atomic_read(&mce_executing) < order) {
821                         if (mce_timed_out(&timeout)) {
822                                 atomic_set(&global_nwo, 0);
823                                 return -1;
824                         }
825                         ndelay(SPINUNIT);
826                 }
827         }
828
829         /*
830          * Cache the global no_way_out state.
831          */
832         *no_way_out = atomic_read(&global_nwo);
833
834         return order;
835 }
836
837 /*
838  * Synchronize between CPUs after main scanning loop.
839  * This invokes the bulk of the Monarch processing.
840  */
841 static int mce_end(int order)
842 {
843         int ret = -1;
844         u64 timeout = (u64)monarch_timeout * NSEC_PER_USEC;
845
846         if (!timeout)
847                 goto reset;
848         if (order < 0)
849                 goto reset;
850
851         /*
852          * Allow others to run.
853          */
854         atomic_inc(&mce_executing);
855
856         if (order == 1) {
857                 /* CHECKME: Can this race with a parallel hotplug? */
858                 int cpus = num_online_cpus();
859
860                 /*
861                  * Monarch: Wait for everyone to go through their scanning
862                  * loops.
863                  */
864                 while (atomic_read(&mce_executing) <= cpus) {
865                         if (mce_timed_out(&timeout))
866                                 goto reset;
867                         ndelay(SPINUNIT);
868                 }
869
870                 mce_reign();
871                 barrier();
872                 ret = 0;
873         } else {
874                 /*
875                  * Subject: Wait for Monarch to finish.
876                  */
877                 while (atomic_read(&mce_executing) != 0) {
878                         if (mce_timed_out(&timeout))
879                                 goto reset;
880                         ndelay(SPINUNIT);
881                 }
882
883                 /*
884                  * Don't reset anything. That's done by the Monarch.
885                  */
886                 return 0;
887         }
888
889         /*
890          * Reset all global state.
891          */
892 reset:
893         atomic_set(&global_nwo, 0);
894         atomic_set(&mce_callin, 0);
895         barrier();
896
897         /*
898          * Let others run again.
899          */
900         atomic_set(&mce_executing, 0);
901         return ret;
902 }
903
904 /*
905  * Check if the address reported by the CPU is in a format we can parse.
906  * It would be possible to add code for most other cases, but all would
907  * be somewhat complicated (e.g. segment offset would require an instruction
908  * parser). So only support physical addresses upto page granuality for now.
909  */
910 static int mce_usable_address(struct mce *m)
911 {
912         if (!(m->status & MCI_STATUS_MISCV) || !(m->status & MCI_STATUS_ADDRV))
913                 return 0;
914         if ((m->misc & 0x3f) > PAGE_SHIFT)
915                 return 0;
916         if (((m->misc >> 6) & 7) != MCM_ADDR_PHYS)
917                 return 0;
918         return 1;
919 }
920
921 static void mce_clear_state(unsigned long *toclear)
922 {
923         int i;
924
925         for (i = 0; i < banks; i++) {
926                 if (test_bit(i, toclear))
927                         mce_wrmsrl(MSR_IA32_MCx_STATUS(i), 0);
928         }
929 }
930
931 /*
932  * The actual machine check handler. This only handles real
933  * exceptions when something got corrupted coming in through int 18.
934  *
935  * This is executed in NMI context not subject to normal locking rules. This
936  * implies that most kernel services cannot be safely used. Don't even
937  * think about putting a printk in there!
938  *
939  * On Intel systems this is entered on all CPUs in parallel through
940  * MCE broadcast. However some CPUs might be broken beyond repair,
941  * so be always careful when synchronizing with others.
942  */
943 void do_machine_check(struct pt_regs *regs, long error_code)
944 {
945         struct mce m, *final;
946         int i;
947         int worst = 0;
948         int severity;
949         /*
950          * Establish sequential order between the CPUs entering the machine
951          * check handler.
952          */
953         int order;
954         /*
955          * If no_way_out gets set, there is no safe way to recover from this
956          * MCE.  If tolerant is cranked up, we'll try anyway.
957          */
958         int no_way_out = 0;
959         /*
960          * If kill_it gets set, there might be a way to recover from this
961          * error.
962          */
963         int kill_it = 0;
964         DECLARE_BITMAP(toclear, MAX_NR_BANKS);
965         char *msg = "Unknown";
966
967         atomic_inc(&mce_entry);
968
969         percpu_inc(mce_exception_count);
970
971         if (notify_die(DIE_NMI, "machine check", regs, error_code,
972                            18, SIGKILL) == NOTIFY_STOP)
973                 goto out;
974         if (!banks)
975                 goto out;
976
977         mce_setup(&m);
978
979         m.mcgstatus = mce_rdmsrl(MSR_IA32_MCG_STATUS);
980         final = &__get_cpu_var(mces_seen);
981         *final = m;
982
983         no_way_out = mce_no_way_out(&m, &msg);
984
985         barrier();
986
987         /*
988          * When no restart IP must always kill or panic.
989          */
990         if (!(m.mcgstatus & MCG_STATUS_RIPV))
991                 kill_it = 1;
992
993         /*
994          * Go through all the banks in exclusion of the other CPUs.
995          * This way we don't report duplicated events on shared banks
996          * because the first one to see it will clear it.
997          */
998         order = mce_start(&no_way_out);
999         for (i = 0; i < banks; i++) {
1000                 __clear_bit(i, toclear);
1001                 if (!mce_banks[i].ctl)
1002                         continue;
1003
1004                 m.misc = 0;
1005                 m.addr = 0;
1006                 m.bank = i;
1007
1008                 m.status = mce_rdmsrl(MSR_IA32_MCx_STATUS(i));
1009                 if ((m.status & MCI_STATUS_VAL) == 0)
1010                         continue;
1011
1012                 /*
1013                  * Non uncorrected or non signaled errors are handled by
1014                  * machine_check_poll. Leave them alone, unless this panics.
1015                  */
1016                 if (!(m.status & (mce_ser ? MCI_STATUS_S : MCI_STATUS_UC)) &&
1017                         !no_way_out)
1018                         continue;
1019
1020                 /*
1021                  * Set taint even when machine check was not enabled.
1022                  */
1023                 add_taint(TAINT_MACHINE_CHECK);
1024
1025                 severity = mce_severity(&m, tolerant, NULL);
1026
1027                 /*
1028                  * When machine check was for corrected handler don't touch,
1029                  * unless we're panicing.
1030                  */
1031                 if (severity == MCE_KEEP_SEVERITY && !no_way_out)
1032                         continue;
1033                 __set_bit(i, toclear);
1034                 if (severity == MCE_NO_SEVERITY) {
1035                         /*
1036                          * Machine check event was not enabled. Clear, but
1037                          * ignore.
1038                          */
1039                         continue;
1040                 }
1041
1042                 /*
1043                  * Kill on action required.
1044                  */
1045                 if (severity == MCE_AR_SEVERITY)
1046                         kill_it = 1;
1047
1048                 if (m.status & MCI_STATUS_MISCV)
1049                         m.misc = mce_rdmsrl(MSR_IA32_MCx_MISC(i));
1050                 if (m.status & MCI_STATUS_ADDRV)
1051                         m.addr = mce_rdmsrl(MSR_IA32_MCx_ADDR(i));
1052
1053                 /*
1054                  * Action optional error. Queue address for later processing.
1055                  * When the ring overflows we just ignore the AO error.
1056                  * RED-PEN add some logging mechanism when
1057                  * usable_address or mce_add_ring fails.
1058                  * RED-PEN don't ignore overflow for tolerant == 0
1059                  */
1060                 if (severity == MCE_AO_SEVERITY && mce_usable_address(&m))
1061                         mce_ring_add(m.addr >> PAGE_SHIFT);
1062
1063                 mce_get_rip(&m, regs);
1064                 mce_log(&m);
1065
1066                 if (severity > worst) {
1067                         *final = m;
1068                         worst = severity;
1069                 }
1070         }
1071
1072         if (!no_way_out)
1073                 mce_clear_state(toclear);
1074
1075         /*
1076          * Do most of the synchronization with other CPUs.
1077          * When there's any problem use only local no_way_out state.
1078          */
1079         if (mce_end(order) < 0)
1080                 no_way_out = worst >= MCE_PANIC_SEVERITY;
1081
1082         /*
1083          * If we have decided that we just CAN'T continue, and the user
1084          * has not set tolerant to an insane level, give up and die.
1085          *
1086          * This is mainly used in the case when the system doesn't
1087          * support MCE broadcasting or it has been disabled.
1088          */
1089         if (no_way_out && tolerant < 3)
1090                 mce_panic("Fatal machine check on current CPU", final, msg);
1091
1092         /*
1093          * If the error seems to be unrecoverable, something should be
1094          * done.  Try to kill as little as possible.  If we can kill just
1095          * one task, do that.  If the user has set the tolerance very
1096          * high, don't try to do anything at all.
1097          */
1098
1099         if (kill_it && tolerant < 3)
1100                 force_sig(SIGBUS, current);
1101
1102         /* notify userspace ASAP */
1103         set_thread_flag(TIF_MCE_NOTIFY);
1104
1105         if (worst > 0)
1106                 mce_report_event(regs);
1107         mce_wrmsrl(MSR_IA32_MCG_STATUS, 0);
1108 out:
1109         atomic_dec(&mce_entry);
1110         sync_core();
1111 }
1112 EXPORT_SYMBOL_GPL(do_machine_check);
1113
1114 /* dummy to break dependency. actual code is in mm/memory-failure.c */
1115 void __attribute__((weak)) memory_failure(unsigned long pfn, int vector)
1116 {
1117         printk(KERN_ERR "Action optional memory failure at %lx ignored\n", pfn);
1118 }
1119
1120 /*
1121  * Called after mce notification in process context. This code
1122  * is allowed to sleep. Call the high level VM handler to process
1123  * any corrupted pages.
1124  * Assume that the work queue code only calls this one at a time
1125  * per CPU.
1126  * Note we don't disable preemption, so this code might run on the wrong
1127  * CPU. In this case the event is picked up by the scheduled work queue.
1128  * This is merely a fast path to expedite processing in some common
1129  * cases.
1130  */
1131 void mce_notify_process(void)
1132 {
1133         unsigned long pfn;
1134         mce_notify_irq();
1135         while (mce_ring_get(&pfn))
1136                 memory_failure(pfn, MCE_VECTOR);
1137 }
1138
1139 static void mce_process_work(struct work_struct *dummy)
1140 {
1141         mce_notify_process();
1142 }
1143
1144 #ifdef CONFIG_X86_MCE_INTEL
1145 /***
1146  * mce_log_therm_throt_event - Logs the thermal throttling event to mcelog
1147  * @cpu: The CPU on which the event occurred.
1148  * @status: Event status information
1149  *
1150  * This function should be called by the thermal interrupt after the
1151  * event has been processed and the decision was made to log the event
1152  * further.
1153  *
1154  * The status parameter will be saved to the 'status' field of 'struct mce'
1155  * and historically has been the register value of the
1156  * MSR_IA32_THERMAL_STATUS (Intel) msr.
1157  */
1158 void mce_log_therm_throt_event(__u64 status)
1159 {
1160         struct mce m;
1161
1162         mce_setup(&m);
1163         m.bank = MCE_THERMAL_BANK;
1164         m.status = status;
1165         mce_log(&m);
1166 }
1167 #endif /* CONFIG_X86_MCE_INTEL */
1168
1169 /*
1170  * Periodic polling timer for "silent" machine check errors.  If the
1171  * poller finds an MCE, poll 2x faster.  When the poller finds no more
1172  * errors, poll 2x slower (up to check_interval seconds).
1173  *
1174  * We will disable polling in DOM0 since all CMCI/Polling
1175  * mechanism will be done in XEN for Intel CPUs
1176  */
1177 #if defined (CONFIG_X86_XEN_MCE)
1178 static int check_interval = 0; /* disable polling */
1179 #else
1180 static int check_interval = 5 * 60; /* 5 minutes */
1181 #endif
1182
1183 static DEFINE_PER_CPU(int, mce_next_interval); /* in jiffies */
1184 static DEFINE_PER_CPU(struct timer_list, mce_timer);
1185
1186 static void mce_start_timer(unsigned long data)
1187 {
1188         struct timer_list *t = &per_cpu(mce_timer, data);
1189         int *n;
1190
1191         WARN_ON(smp_processor_id() != data);
1192
1193         if (mce_available(&current_cpu_data)) {
1194                 machine_check_poll(MCP_TIMESTAMP,
1195                                 &__get_cpu_var(mce_poll_banks));
1196         }
1197
1198         /*
1199          * Alert userspace if needed.  If we logged an MCE, reduce the
1200          * polling interval, otherwise increase the polling interval.
1201          */
1202         n = &__get_cpu_var(mce_next_interval);
1203         if (mce_notify_irq())
1204                 *n = max(*n/2, HZ/100);
1205         else
1206                 *n = min(*n*2, (int)round_jiffies_relative(check_interval*HZ));
1207
1208         t->expires = jiffies + *n;
1209         add_timer_on(t, smp_processor_id());
1210 }
1211
1212 static void mce_do_trigger(struct work_struct *work)
1213 {
1214         call_usermodehelper(mce_helper, mce_helper_argv, NULL, UMH_NO_WAIT);
1215 }
1216
1217 static DECLARE_WORK(mce_trigger_work, mce_do_trigger);
1218
1219 /*
1220  * Notify the user(s) about new machine check events.
1221  * Can be called from interrupt context, but not from machine check/NMI
1222  * context.
1223  */
1224 int mce_notify_irq(void)
1225 {
1226         /* Not more than two messages every minute */
1227         static DEFINE_RATELIMIT_STATE(ratelimit, 60*HZ, 2);
1228
1229         clear_thread_flag(TIF_MCE_NOTIFY);
1230
1231         if (test_and_clear_bit(0, &mce_need_notify)) {
1232                 wake_up_interruptible(&mce_wait);
1233
1234                 /*
1235                  * There is no risk of missing notifications because
1236                  * work_pending is always cleared before the function is
1237                  * executed.
1238                  */
1239                 if (mce_helper[0] && !work_pending(&mce_trigger_work))
1240                         schedule_work(&mce_trigger_work);
1241
1242                 if (__ratelimit(&ratelimit))
1243                         printk(KERN_INFO "Machine check events logged\n");
1244
1245                 return 1;
1246         }
1247         return 0;
1248 }
1249 EXPORT_SYMBOL_GPL(mce_notify_irq);
1250
1251 static int __cpuinit __mcheck_cpu_mce_banks_init(void)
1252 {
1253         int i;
1254
1255         mce_banks = kzalloc(banks * sizeof(struct mce_bank), GFP_KERNEL);
1256         if (!mce_banks)
1257                 return -ENOMEM;
1258         for (i = 0; i < banks; i++) {
1259                 struct mce_bank *b = &mce_banks[i];
1260
1261                 b->ctl = -1ULL;
1262                 b->init = 1;
1263         }
1264         return 0;
1265 }
1266
1267 /*
1268  * Initialize Machine Checks for a CPU.
1269  */
1270 static int __cpuinit __mcheck_cpu_cap_init(void)
1271 {
1272         unsigned b;
1273         u64 cap;
1274
1275         rdmsrl(MSR_IA32_MCG_CAP, cap);
1276
1277         b = cap & MCG_BANKCNT_MASK;
1278         if (!banks)
1279                 printk(KERN_INFO "mce: CPU supports %d MCE banks\n", b);
1280
1281         if (b > MAX_NR_BANKS) {
1282                 printk(KERN_WARNING
1283                        "MCE: Using only %u machine check banks out of %u\n",
1284                         MAX_NR_BANKS, b);
1285                 b = MAX_NR_BANKS;
1286         }
1287
1288         /* Don't support asymmetric configurations today */
1289         WARN_ON(banks != 0 && b != banks);
1290         banks = b;
1291         if (!mce_banks) {
1292                 int err = __mcheck_cpu_mce_banks_init();
1293
1294                 if (err)
1295                         return err;
1296         }
1297
1298         /* Use accurate RIP reporting if available. */
1299         if ((cap & MCG_EXT_P) && MCG_EXT_CNT(cap) >= 9)
1300                 rip_msr = MSR_IA32_MCG_EIP;
1301
1302         if (cap & MCG_SER_P)
1303                 mce_ser = 1;
1304
1305         return 0;
1306 }
1307
1308 static void __mcheck_cpu_init_generic(void)
1309 {
1310         mce_banks_t all_banks;
1311         u64 cap;
1312         int i;
1313
1314         /*
1315          * Log the machine checks left over from the previous reset.
1316          */
1317         bitmap_fill(all_banks, MAX_NR_BANKS);
1318         machine_check_poll(MCP_UC|(!mce_bootlog ? MCP_DONTLOG : 0), &all_banks);
1319
1320         set_in_cr4(X86_CR4_MCE);
1321
1322         rdmsrl(MSR_IA32_MCG_CAP, cap);
1323         if (cap & MCG_CTL_P)
1324                 wrmsr(MSR_IA32_MCG_CTL, 0xffffffff, 0xffffffff);
1325
1326         for (i = 0; i < banks; i++) {
1327                 struct mce_bank *b = &mce_banks[i];
1328
1329                 if (!b->init)
1330                         continue;
1331                 wrmsrl(MSR_IA32_MCx_CTL(i), b->ctl);
1332                 wrmsrl(MSR_IA32_MCx_STATUS(i), 0);
1333         }
1334 }
1335
1336 /* Add per CPU specific workarounds here */
1337 static int __cpuinit __mcheck_cpu_apply_quirks(struct cpuinfo_x86 *c)
1338 {
1339         if (c->x86_vendor == X86_VENDOR_UNKNOWN) {
1340                 pr_info("MCE: unknown CPU type - not enabling MCE support.\n");
1341                 return -EOPNOTSUPP;
1342         }
1343
1344         /* This should be disabled by the BIOS, but isn't always */
1345         if (c->x86_vendor == X86_VENDOR_AMD) {
1346 #ifndef CONFIG_XEN
1347                 if (c->x86 == 15 && banks > 4) {
1348                         /*
1349                          * disable GART TBL walk error reporting, which
1350                          * trips off incorrectly with the IOMMU & 3ware
1351                          * & Cerberus:
1352                          */
1353                         clear_bit(10, (unsigned long *)&mce_banks[4].ctl);
1354                 }
1355 #endif
1356                 if (c->x86 <= 17 && mce_bootlog < 0) {
1357                         /*
1358                          * Lots of broken BIOS around that don't clear them
1359                          * by default and leave crap in there. Don't log:
1360                          */
1361                         mce_bootlog = 0;
1362                 }
1363                 /*
1364                  * Various K7s with broken bank 0 around. Always disable
1365                  * by default.
1366                  */
1367                  if (c->x86 == 6 && banks > 0)
1368                         mce_banks[0].ctl = 0;
1369         }
1370
1371         if (c->x86_vendor == X86_VENDOR_INTEL) {
1372                 /*
1373                  * SDM documents that on family 6 bank 0 should not be written
1374                  * because it aliases to another special BIOS controlled
1375                  * register.
1376                  * But it's not aliased anymore on model 0x1a+
1377                  * Don't ignore bank 0 completely because there could be a
1378                  * valid event later, merely don't write CTL0.
1379                  */
1380
1381                 if (c->x86 == 6 && c->x86_model < 0x1A && banks > 0)
1382                         mce_banks[0].init = 0;
1383
1384                 /*
1385                  * All newer Intel systems support MCE broadcasting. Enable
1386                  * synchronization with a one second timeout.
1387                  */
1388                 if ((c->x86 > 6 || (c->x86 == 6 && c->x86_model >= 0xe)) &&
1389                         monarch_timeout < 0)
1390                         monarch_timeout = USEC_PER_SEC;
1391
1392                 /*
1393                  * There are also broken BIOSes on some Pentium M and
1394                  * earlier systems:
1395                  */
1396                 if (c->x86 == 6 && c->x86_model <= 13 && mce_bootlog < 0)
1397                         mce_bootlog = 0;
1398         }
1399         if (monarch_timeout < 0)
1400                 monarch_timeout = 0;
1401         if (mce_bootlog != 0)
1402                 mce_panic_timeout = 30;
1403
1404         return 0;
1405 }
1406
1407 static void __cpuinit __mcheck_cpu_ancient_init(struct cpuinfo_x86 *c)
1408 {
1409         if (c->x86 != 5)
1410                 return;
1411         switch (c->x86_vendor) {
1412         case X86_VENDOR_INTEL:
1413                 intel_p5_mcheck_init(c);
1414                 break;
1415         case X86_VENDOR_CENTAUR:
1416                 winchip_mcheck_init(c);
1417                 break;
1418         }
1419 }
1420
1421 static void __mcheck_cpu_init_vendor(struct cpuinfo_x86 *c)
1422 {
1423 #ifndef CONFIG_X86_64_XEN
1424         switch (c->x86_vendor) {
1425         case X86_VENDOR_INTEL:
1426                 mce_intel_feature_init(c);
1427                 break;
1428         case X86_VENDOR_AMD:
1429                 mce_amd_feature_init(c);
1430                 break;
1431         default:
1432                 break;
1433         }
1434 #endif
1435 }
1436
1437 static void __mcheck_cpu_init_timer(void)
1438 {
1439         struct timer_list *t = &__get_cpu_var(mce_timer);
1440         int *n = &__get_cpu_var(mce_next_interval);
1441
1442         setup_timer(t, mce_start_timer, smp_processor_id());
1443
1444         if (mce_ignore_ce)
1445                 return;
1446
1447         *n = check_interval * HZ;
1448         if (!*n)
1449                 return;
1450         t->expires = round_jiffies(jiffies + *n);
1451         add_timer_on(t, smp_processor_id());
1452 }
1453
1454 /* Handle unconfigured int18 (should never happen) */
1455 static void unexpected_machine_check(struct pt_regs *regs, long error_code)
1456 {
1457         printk(KERN_ERR "CPU#%d: Unexpected int18 (Machine Check).\n",
1458                smp_processor_id());
1459 }
1460
1461 /* Call the installed machine check handler for this CPU setup. */
1462 void (*machine_check_vector)(struct pt_regs *, long error_code) =
1463                                                 unexpected_machine_check;
1464
1465 /*
1466  * Called for each booted CPU to set up machine checks.
1467  * Must be called with preempt off:
1468  */
1469 void __cpuinit mcheck_cpu_init(struct cpuinfo_x86 *c)
1470 {
1471         if (mce_disabled)
1472                 return;
1473
1474         __mcheck_cpu_ancient_init(c);
1475
1476         if (!mce_available(c))
1477                 return;
1478
1479         if (__mcheck_cpu_cap_init() < 0 || __mcheck_cpu_apply_quirks(c) < 0) {
1480                 mce_disabled = 1;
1481                 return;
1482         }
1483
1484         machine_check_vector = do_machine_check;
1485
1486         __mcheck_cpu_init_generic();
1487         __mcheck_cpu_init_vendor(c);
1488         __mcheck_cpu_init_timer();
1489         INIT_WORK(&__get_cpu_var(mce_work), mce_process_work);
1490
1491 }
1492
1493 /*
1494  * Character device to read and clear the MCE log.
1495  */
1496
1497 static DEFINE_SPINLOCK(mce_state_lock);
1498 static int              open_count;             /* #times opened */
1499 static int              open_exclu;             /* already open exclusive? */
1500
1501 static int mce_open(struct inode *inode, struct file *file)
1502 {
1503         spin_lock(&mce_state_lock);
1504
1505         if (open_exclu || (open_count && (file->f_flags & O_EXCL))) {
1506                 spin_unlock(&mce_state_lock);
1507
1508                 return -EBUSY;
1509         }
1510
1511         if (file->f_flags & O_EXCL)
1512                 open_exclu = 1;
1513         open_count++;
1514
1515         spin_unlock(&mce_state_lock);
1516
1517         return nonseekable_open(inode, file);
1518 }
1519
1520 static int mce_release(struct inode *inode, struct file *file)
1521 {
1522         spin_lock(&mce_state_lock);
1523
1524         open_count--;
1525         open_exclu = 0;
1526
1527         spin_unlock(&mce_state_lock);
1528
1529         return 0;
1530 }
1531
1532 static void collect_tscs(void *data)
1533 {
1534         unsigned long *cpu_tsc = (unsigned long *)data;
1535
1536         rdtscll(cpu_tsc[smp_processor_id()]);
1537 }
1538
1539 static int mce_apei_read_done;
1540
1541 /* Collect MCE record of previous boot in persistent storage via APEI ERST. */
1542 static int __mce_read_apei(char __user **ubuf, size_t usize)
1543 {
1544         int rc;
1545         u64 record_id;
1546         struct mce m;
1547
1548         if (usize < sizeof(struct mce))
1549                 return -EINVAL;
1550
1551         rc = apei_read_mce(&m, &record_id);
1552         /* Error or no more MCE record */
1553         if (rc <= 0) {
1554                 mce_apei_read_done = 1;
1555                 return rc;
1556         }
1557         rc = -EFAULT;
1558         if (copy_to_user(*ubuf, &m, sizeof(struct mce)))
1559                 return rc;
1560         /*
1561          * In fact, we should have cleared the record after that has
1562          * been flushed to the disk or sent to network in
1563          * /sbin/mcelog, but we have no interface to support that now,
1564          * so just clear it to avoid duplication.
1565          */
1566         rc = apei_clear_mce(record_id);
1567         if (rc) {
1568                 mce_apei_read_done = 1;
1569                 return rc;
1570         }
1571         *ubuf += sizeof(struct mce);
1572
1573         return 0;
1574 }
1575
1576 static ssize_t mce_read(struct file *filp, char __user *ubuf, size_t usize,
1577                         loff_t *off)
1578 {
1579         char __user *buf = ubuf;
1580         unsigned long *cpu_tsc;
1581         unsigned prev, next;
1582         int i, err;
1583
1584         cpu_tsc = kmalloc(nr_cpu_ids * sizeof(long), GFP_KERNEL);
1585         if (!cpu_tsc)
1586                 return -ENOMEM;
1587
1588         mutex_lock(&mce_read_mutex);
1589
1590         if (!mce_apei_read_done) {
1591                 err = __mce_read_apei(&buf, usize);
1592                 if (err || buf != ubuf)
1593                         goto out;
1594         }
1595
1596         next = rcu_dereference_check_mce(mcelog.next);
1597
1598         /* Only supports full reads right now */
1599         err = -EINVAL;
1600         if (*off != 0 || usize < MCE_LOG_LEN*sizeof(struct mce))
1601                 goto out;
1602
1603         err = 0;
1604         prev = 0;
1605         do {
1606                 for (i = prev; i < next; i++) {
1607                         unsigned long start = jiffies;
1608
1609                         while (!mcelog.entry[i].finished) {
1610                                 if (time_after_eq(jiffies, start + 2)) {
1611                                         memset(mcelog.entry + i, 0,
1612                                                sizeof(struct mce));
1613                                         goto timeout;
1614                                 }
1615                                 cpu_relax();
1616                         }
1617                         smp_rmb();
1618                         err |= copy_to_user(buf, mcelog.entry + i,
1619                                             sizeof(struct mce));
1620                         buf += sizeof(struct mce);
1621 timeout:
1622                         ;
1623                 }
1624
1625                 memset(mcelog.entry + prev, 0,
1626                        (next - prev) * sizeof(struct mce));
1627                 prev = next;
1628                 next = cmpxchg(&mcelog.next, prev, 0);
1629         } while (next != prev);
1630
1631         synchronize_sched();
1632
1633         /*
1634          * Collect entries that were still getting written before the
1635          * synchronize.
1636          */
1637         on_each_cpu(collect_tscs, cpu_tsc, 1);
1638
1639         for (i = next; i < MCE_LOG_LEN; i++) {
1640                 if (mcelog.entry[i].finished &&
1641                     mcelog.entry[i].tsc < cpu_tsc[mcelog.entry[i].cpu]) {
1642                         err |= copy_to_user(buf, mcelog.entry+i,
1643                                             sizeof(struct mce));
1644                         smp_rmb();
1645                         buf += sizeof(struct mce);
1646                         memset(&mcelog.entry[i], 0, sizeof(struct mce));
1647                 }
1648         }
1649
1650         if (err)
1651                 err = -EFAULT;
1652
1653 out:
1654         mutex_unlock(&mce_read_mutex);
1655         kfree(cpu_tsc);
1656
1657         return err ? err : buf - ubuf;
1658 }
1659
1660 static unsigned int mce_poll(struct file *file, poll_table *wait)
1661 {
1662         poll_wait(file, &mce_wait, wait);
1663         if (rcu_dereference_check_mce(mcelog.next))
1664                 return POLLIN | POLLRDNORM;
1665         if (!mce_apei_read_done && apei_check_mce())
1666                 return POLLIN | POLLRDNORM;
1667         return 0;
1668 }
1669
1670 static long mce_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
1671 {
1672         int __user *p = (int __user *)arg;
1673
1674         if (!capable(CAP_SYS_ADMIN))
1675                 return -EPERM;
1676
1677         switch (cmd) {
1678         case MCE_GET_RECORD_LEN:
1679                 return put_user(sizeof(struct mce), p);
1680         case MCE_GET_LOG_LEN:
1681                 return put_user(MCE_LOG_LEN, p);
1682         case MCE_GETCLEAR_FLAGS: {
1683                 unsigned flags;
1684
1685                 do {
1686                         flags = mcelog.flags;
1687                 } while (cmpxchg(&mcelog.flags, flags, 0) != flags);
1688
1689                 return put_user(flags, p);
1690         }
1691         default:
1692                 return -ENOTTY;
1693         }
1694 }
1695
1696 /* Modified in mce-inject.c, so not static or const */
1697 struct file_operations mce_chrdev_ops = {
1698         .open                   = mce_open,
1699         .release                = mce_release,
1700         .read                   = mce_read,
1701         .poll                   = mce_poll,
1702         .unlocked_ioctl         = mce_ioctl,
1703 };
1704 EXPORT_SYMBOL_GPL(mce_chrdev_ops);
1705
1706 static struct miscdevice mce_log_device = {
1707         MISC_MCELOG_MINOR,
1708         "mcelog",
1709         &mce_chrdev_ops,
1710 };
1711
1712 /*
1713  * mce=off Disables machine check
1714  * mce=no_cmci Disables CMCI
1715  * mce=dont_log_ce Clears corrected events silently, no log created for CEs.
1716  * mce=ignore_ce Disables polling and CMCI, corrected events are not cleared.
1717  * mce=TOLERANCELEVEL[,monarchtimeout] (number, see above)
1718  *      monarchtimeout is how long to wait for other CPUs on machine
1719  *      check, or 0 to not wait
1720  * mce=bootlog Log MCEs from before booting. Disabled by default on AMD.
1721  * mce=nobootlog Don't log MCEs from before booting.
1722  */
1723 static int __init mcheck_enable(char *str)
1724 {
1725         if (*str == 0) {
1726                 enable_p5_mce();
1727                 return 1;
1728         }
1729         if (*str == '=')
1730                 str++;
1731         if (!strcmp(str, "off"))
1732                 mce_disabled = 1;
1733         else if (!strcmp(str, "no_cmci"))
1734                 mce_cmci_disabled = 1;
1735         else if (!strcmp(str, "dont_log_ce"))
1736                 mce_dont_log_ce = 1;
1737         else if (!strcmp(str, "ignore_ce"))
1738                 mce_ignore_ce = 1;
1739         else if (!strcmp(str, "bootlog") || !strcmp(str, "nobootlog"))
1740                 mce_bootlog = (str[0] == 'b');
1741         else if (isdigit(str[0])) {
1742                 get_option(&str, &tolerant);
1743                 if (*str == ',') {
1744                         ++str;
1745                         get_option(&str, &monarch_timeout);
1746                 }
1747         } else {
1748                 printk(KERN_INFO "mce argument %s ignored. Please use /sys\n",
1749                        str);
1750                 return 0;
1751         }
1752         return 1;
1753 }
1754 __setup("mce", mcheck_enable);
1755
1756 int __init mcheck_init(void)
1757 {
1758         atomic_notifier_chain_register(&x86_mce_decoder_chain, &mce_dec_nb);
1759
1760         mcheck_intel_therm_init();
1761
1762         return 0;
1763 }
1764
1765 /*
1766  * Sysfs support
1767  */
1768
1769 /*
1770  * Disable machine checks on suspend and shutdown. We can't really handle
1771  * them later.
1772  */
1773 static int mce_disable_error_reporting(void)
1774 {
1775         int i;
1776
1777         for (i = 0; i < banks; i++) {
1778                 struct mce_bank *b = &mce_banks[i];
1779
1780                 if (b->init)
1781                         wrmsrl(MSR_IA32_MCx_CTL(i), 0);
1782         }
1783         return 0;
1784 }
1785
1786 static int mce_suspend(struct sys_device *dev, pm_message_t state)
1787 {
1788         return mce_disable_error_reporting();
1789 }
1790
1791 static int mce_shutdown(struct sys_device *dev)
1792 {
1793         return mce_disable_error_reporting();
1794 }
1795
1796 /*
1797  * On resume clear all MCE state. Don't want to see leftovers from the BIOS.
1798  * Only one CPU is active at this time, the others get re-added later using
1799  * CPU hotplug:
1800  */
1801 static int mce_resume(struct sys_device *dev)
1802 {
1803         __mcheck_cpu_init_generic();
1804         __mcheck_cpu_init_vendor(&current_cpu_data);
1805
1806         return 0;
1807 }
1808
1809 static void mce_cpu_restart(void *data)
1810 {
1811         del_timer_sync(&__get_cpu_var(mce_timer));
1812         if (!mce_available(&current_cpu_data))
1813                 return;
1814         __mcheck_cpu_init_generic();
1815         __mcheck_cpu_init_timer();
1816 }
1817
1818 /* Reinit MCEs after user configuration changes */
1819 static void mce_restart(void)
1820 {
1821         on_each_cpu(mce_cpu_restart, NULL, 1);
1822 }
1823
1824 /* Toggle features for corrected errors */
1825 static void mce_disable_ce(void *all)
1826 {
1827         if (!mce_available(&current_cpu_data))
1828                 return;
1829         if (all)
1830                 del_timer_sync(&__get_cpu_var(mce_timer));
1831         cmci_clear();
1832 }
1833
1834 static void mce_enable_ce(void *all)
1835 {
1836         if (!mce_available(&current_cpu_data))
1837                 return;
1838         cmci_reenable();
1839         cmci_recheck();
1840         if (all)
1841                 __mcheck_cpu_init_timer();
1842 }
1843
1844 static struct sysdev_class mce_sysclass = {
1845         .suspend        = mce_suspend,
1846         .shutdown       = mce_shutdown,
1847         .resume         = mce_resume,
1848         .name           = "machinecheck",
1849 };
1850
1851 DEFINE_PER_CPU(struct sys_device, mce_dev);
1852
1853 __cpuinitdata
1854 void (*threshold_cpu_callback)(unsigned long action, unsigned int cpu);
1855
1856 static inline struct mce_bank *attr_to_bank(struct sysdev_attribute *attr)
1857 {
1858         return container_of(attr, struct mce_bank, attr);
1859 }
1860
1861 static ssize_t show_bank(struct sys_device *s, struct sysdev_attribute *attr,
1862                          char *buf)
1863 {
1864         return sprintf(buf, "%llx\n", attr_to_bank(attr)->ctl);
1865 }
1866
1867 static ssize_t set_bank(struct sys_device *s, struct sysdev_attribute *attr,
1868                         const char *buf, size_t size)
1869 {
1870         u64 new;
1871
1872         if (strict_strtoull(buf, 0, &new) < 0)
1873                 return -EINVAL;
1874
1875         attr_to_bank(attr)->ctl = new;
1876         mce_restart();
1877
1878         return size;
1879 }
1880
1881 static ssize_t
1882 show_trigger(struct sys_device *s, struct sysdev_attribute *attr, char *buf)
1883 {
1884         strcpy(buf, mce_helper);
1885         strcat(buf, "\n");
1886         return strlen(mce_helper) + 1;
1887 }
1888
1889 static ssize_t set_trigger(struct sys_device *s, struct sysdev_attribute *attr,
1890                                 const char *buf, size_t siz)
1891 {
1892         char *p;
1893
1894         strncpy(mce_helper, buf, sizeof(mce_helper));
1895         mce_helper[sizeof(mce_helper)-1] = 0;
1896         p = strchr(mce_helper, '\n');
1897
1898         if (p)
1899                 *p = 0;
1900
1901         return strlen(mce_helper) + !!p;
1902 }
1903
1904 static ssize_t set_ignore_ce(struct sys_device *s,
1905                              struct sysdev_attribute *attr,
1906                              const char *buf, size_t size)
1907 {
1908         u64 new;
1909
1910         if (strict_strtoull(buf, 0, &new) < 0)
1911                 return -EINVAL;
1912
1913         if (mce_ignore_ce ^ !!new) {
1914                 if (new) {
1915                         /* disable ce features */
1916                         on_each_cpu(mce_disable_ce, (void *)1, 1);
1917                         mce_ignore_ce = 1;
1918                 } else {
1919                         /* enable ce features */
1920                         mce_ignore_ce = 0;
1921                         on_each_cpu(mce_enable_ce, (void *)1, 1);
1922                 }
1923         }
1924         return size;
1925 }
1926
1927 static ssize_t set_cmci_disabled(struct sys_device *s,
1928                                  struct sysdev_attribute *attr,
1929                                  const char *buf, size_t size)
1930 {
1931         u64 new;
1932
1933         if (strict_strtoull(buf, 0, &new) < 0)
1934                 return -EINVAL;
1935
1936         if (mce_cmci_disabled ^ !!new) {
1937                 if (new) {
1938                         /* disable cmci */
1939                         on_each_cpu(mce_disable_ce, NULL, 1);
1940                         mce_cmci_disabled = 1;
1941                 } else {
1942                         /* enable cmci */
1943                         mce_cmci_disabled = 0;
1944                         on_each_cpu(mce_enable_ce, NULL, 1);
1945                 }
1946         }
1947         return size;
1948 }
1949
1950 static ssize_t store_int_with_restart(struct sys_device *s,
1951                                       struct sysdev_attribute *attr,
1952                                       const char *buf, size_t size)
1953 {
1954         ssize_t ret = sysdev_store_int(s, attr, buf, size);
1955         mce_restart();
1956         return ret;
1957 }
1958
1959 static SYSDEV_ATTR(trigger, 0644, show_trigger, set_trigger);
1960 static SYSDEV_INT_ATTR(tolerant, 0644, tolerant);
1961 static SYSDEV_INT_ATTR(monarch_timeout, 0644, monarch_timeout);
1962 static SYSDEV_INT_ATTR(dont_log_ce, 0644, mce_dont_log_ce);
1963
1964 static struct sysdev_ext_attribute attr_check_interval = {
1965         _SYSDEV_ATTR(check_interval, 0644, sysdev_show_int,
1966                      store_int_with_restart),
1967         &check_interval
1968 };
1969
1970 static struct sysdev_ext_attribute attr_ignore_ce = {
1971         _SYSDEV_ATTR(ignore_ce, 0644, sysdev_show_int, set_ignore_ce),
1972         &mce_ignore_ce
1973 };
1974
1975 static struct sysdev_ext_attribute attr_cmci_disabled = {
1976         _SYSDEV_ATTR(cmci_disabled, 0644, sysdev_show_int, set_cmci_disabled),
1977         &mce_cmci_disabled
1978 };
1979
1980 static struct sysdev_attribute *mce_attrs[] = {
1981         &attr_tolerant.attr,
1982         &attr_check_interval.attr,
1983         &attr_trigger,
1984         &attr_monarch_timeout.attr,
1985         &attr_dont_log_ce.attr,
1986         &attr_ignore_ce.attr,
1987         &attr_cmci_disabled.attr,
1988         NULL
1989 };
1990
1991 static cpumask_var_t mce_dev_initialized;
1992
1993 /* Per cpu sysdev init. All of the cpus still share the same ctrl bank: */
1994 static __cpuinit int mce_create_device(unsigned int cpu)
1995 {
1996         int err;
1997         int i, j;
1998
1999         if (!mce_available(&boot_cpu_data))
2000                 return -EIO;
2001
2002         memset(&per_cpu(mce_dev, cpu).kobj, 0, sizeof(struct kobject));
2003         per_cpu(mce_dev, cpu).id        = cpu;
2004         per_cpu(mce_dev, cpu).cls       = &mce_sysclass;
2005
2006         err = sysdev_register(&per_cpu(mce_dev, cpu));
2007         if (err)
2008                 return err;
2009
2010         for (i = 0; mce_attrs[i]; i++) {
2011                 err = sysdev_create_file(&per_cpu(mce_dev, cpu), mce_attrs[i]);
2012                 if (err)
2013                         goto error;
2014         }
2015         for (j = 0; j < banks; j++) {
2016                 err = sysdev_create_file(&per_cpu(mce_dev, cpu),
2017                                         &mce_banks[j].attr);
2018                 if (err)
2019                         goto error2;
2020         }
2021         cpumask_set_cpu(cpu, mce_dev_initialized);
2022
2023         return 0;
2024 error2:
2025         while (--j >= 0)
2026                 sysdev_remove_file(&per_cpu(mce_dev, cpu), &mce_banks[j].attr);
2027 error:
2028         while (--i >= 0)
2029                 sysdev_remove_file(&per_cpu(mce_dev, cpu), mce_attrs[i]);
2030
2031         sysdev_unregister(&per_cpu(mce_dev, cpu));
2032
2033         return err;
2034 }
2035
2036 static __cpuinit void mce_remove_device(unsigned int cpu)
2037 {
2038         int i;
2039
2040         if (!cpumask_test_cpu(cpu, mce_dev_initialized))
2041                 return;
2042
2043         for (i = 0; mce_attrs[i]; i++)
2044                 sysdev_remove_file(&per_cpu(mce_dev, cpu), mce_attrs[i]);
2045
2046         for (i = 0; i < banks; i++)
2047                 sysdev_remove_file(&per_cpu(mce_dev, cpu), &mce_banks[i].attr);
2048
2049         sysdev_unregister(&per_cpu(mce_dev, cpu));
2050         cpumask_clear_cpu(cpu, mce_dev_initialized);
2051 }
2052
2053 /* Make sure there are no machine checks on offlined CPUs. */
2054 static void __cpuinit mce_disable_cpu(void *h)
2055 {
2056         unsigned long action = *(unsigned long *)h;
2057         int i;
2058
2059         if (!mce_available(&current_cpu_data))
2060                 return;
2061
2062         if (!(action & CPU_TASKS_FROZEN))
2063                 cmci_clear();
2064         for (i = 0; i < banks; i++) {
2065                 struct mce_bank *b = &mce_banks[i];
2066
2067                 if (b->init)
2068                         wrmsrl(MSR_IA32_MCx_CTL(i), 0);
2069         }
2070 }
2071
2072 static void __cpuinit mce_reenable_cpu(void *h)
2073 {
2074         unsigned long action = *(unsigned long *)h;
2075         int i;
2076
2077         if (!mce_available(&current_cpu_data))
2078                 return;
2079
2080         if (!(action & CPU_TASKS_FROZEN))
2081                 cmci_reenable();
2082         for (i = 0; i < banks; i++) {
2083                 struct mce_bank *b = &mce_banks[i];
2084
2085                 if (b->init)
2086                         wrmsrl(MSR_IA32_MCx_CTL(i), b->ctl);
2087         }
2088 }
2089
2090 /* Get notified when a cpu comes on/off. Be hotplug friendly. */
2091 static int __cpuinit
2092 mce_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
2093 {
2094         unsigned int cpu = (unsigned long)hcpu;
2095         struct timer_list *t = &per_cpu(mce_timer, cpu);
2096
2097         switch (action) {
2098         case CPU_ONLINE:
2099         case CPU_ONLINE_FROZEN:
2100                 mce_create_device(cpu);
2101                 if (threshold_cpu_callback)
2102                         threshold_cpu_callback(action, cpu);
2103                 break;
2104         case CPU_DEAD:
2105         case CPU_DEAD_FROZEN:
2106                 if (threshold_cpu_callback)
2107                         threshold_cpu_callback(action, cpu);
2108                 mce_remove_device(cpu);
2109                 break;
2110         case CPU_DOWN_PREPARE:
2111         case CPU_DOWN_PREPARE_FROZEN:
2112                 del_timer_sync(t);
2113                 smp_call_function_single(cpu, mce_disable_cpu, &action, 1);
2114                 break;
2115         case CPU_DOWN_FAILED:
2116         case CPU_DOWN_FAILED_FROZEN:
2117                 if (!mce_ignore_ce && check_interval) {
2118                         t->expires = round_jiffies(jiffies +
2119                                            __get_cpu_var(mce_next_interval));
2120                         add_timer_on(t, cpu);
2121                 }
2122                 smp_call_function_single(cpu, mce_reenable_cpu, &action, 1);
2123                 break;
2124         case CPU_POST_DEAD:
2125                 /* intentionally ignoring frozen here */
2126                 cmci_rediscover(cpu);
2127                 break;
2128         }
2129         return NOTIFY_OK;
2130 }
2131
2132 static struct notifier_block mce_cpu_notifier __cpuinitdata = {
2133         .notifier_call = mce_cpu_callback,
2134 };
2135
2136 static __init void mce_init_banks(void)
2137 {
2138         int i;
2139
2140         for (i = 0; i < banks; i++) {
2141                 struct mce_bank *b = &mce_banks[i];
2142                 struct sysdev_attribute *a = &b->attr;
2143
2144                 sysfs_attr_init(&a->attr);
2145                 a->attr.name    = b->attrname;
2146                 snprintf(b->attrname, ATTR_LEN, "bank%d", i);
2147
2148                 a->attr.mode    = 0644;
2149                 a->show         = show_bank;
2150                 a->store        = set_bank;
2151         }
2152 }
2153
2154 static __init int mcheck_init_device(void)
2155 {
2156         int err;
2157         int i = 0;
2158
2159         if (!mce_available(&boot_cpu_data))
2160                 return -EIO;
2161
2162         zalloc_cpumask_var(&mce_dev_initialized, GFP_KERNEL);
2163
2164         mce_init_banks();
2165
2166         err = sysdev_class_register(&mce_sysclass);
2167         if (err)
2168                 return err;
2169
2170         for_each_online_cpu(i) {
2171                 err = mce_create_device(i);
2172                 if (err)
2173                         return err;
2174         }
2175
2176         register_hotcpu_notifier(&mce_cpu_notifier);
2177         misc_register(&mce_log_device);
2178
2179 #ifdef CONFIG_X86_XEN_MCE
2180         if (is_initial_xendomain()) {
2181                 /* Register vIRQ handler for MCE LOG processing */
2182                 extern int bind_virq_for_mce(void);
2183
2184                 printk(KERN_DEBUG "MCE: bind virq for DOM0 logging\n");
2185                 bind_virq_for_mce();
2186         }
2187 #endif
2188
2189         return err;
2190 }
2191
2192 device_initcall(mcheck_init_device);
2193
2194 /*
2195  * Old style boot options parsing. Only for compatibility.
2196  */
2197 static int __init mcheck_disable(char *str)
2198 {
2199         mce_disabled = 1;
2200         return 1;
2201 }
2202 __setup("nomce", mcheck_disable);
2203
2204 #ifdef CONFIG_DEBUG_FS
2205 struct dentry *mce_get_debugfs_dir(void)
2206 {
2207         static struct dentry *dmce;
2208
2209         if (!dmce)
2210                 dmce = debugfs_create_dir("mce", NULL);
2211
2212         return dmce;
2213 }
2214
2215 static void mce_reset(void)
2216 {
2217         cpu_missing = 0;
2218         atomic_set(&mce_fake_paniced, 0);
2219         atomic_set(&mce_executing, 0);
2220         atomic_set(&mce_callin, 0);
2221         atomic_set(&global_nwo, 0);
2222 }
2223
2224 static int fake_panic_get(void *data, u64 *val)
2225 {
2226         *val = fake_panic;
2227         return 0;
2228 }
2229
2230 static int fake_panic_set(void *data, u64 val)
2231 {
2232         mce_reset();
2233         fake_panic = val;
2234         return 0;
2235 }
2236
2237 DEFINE_SIMPLE_ATTRIBUTE(fake_panic_fops, fake_panic_get,
2238                         fake_panic_set, "%llu\n");
2239
2240 static int __init mcheck_debugfs_init(void)
2241 {
2242         struct dentry *dmce, *ffake_panic;
2243
2244         dmce = mce_get_debugfs_dir();
2245         if (!dmce)
2246                 return -ENOMEM;
2247         ffake_panic = debugfs_create_file("fake_panic", 0444, dmce, NULL,
2248                                           &fake_panic_fops);
2249         if (!ffake_panic)
2250                 return -ENOMEM;
2251
2252         return 0;
2253 }
2254 late_initcall(mcheck_debugfs_init);
2255 #endif