1/*
2 * Common corrected MCE threshold handler code:
3 */
4#include <linux/interrupt.h>
5#include <linux/kernel.h>
6
7#include <asm/irq_vectors.h>
8#include <asm/apic.h>
9#include <asm/idle.h>
10#include <asm/mce.h>
11#include <asm/trace/irq_vectors.h>
12
13static void default_threshold_interrupt(void)
14{
15	printk(KERN_ERR "Unexpected threshold interrupt at vector %x\n",
16			 THRESHOLD_APIC_VECTOR);
17}
18
19void (*mce_threshold_vector)(void) = default_threshold_interrupt;
20
21static inline void __smp_threshold_interrupt(void)
22{
23	inc_irq_stat(irq_threshold_count);
24	mce_threshold_vector();
25}
26
27asmlinkage __visible void smp_threshold_interrupt(void)
28{
29	entering_irq();
30	__smp_threshold_interrupt();
31	exiting_ack_irq();
32}
33
34asmlinkage __visible void smp_trace_threshold_interrupt(void)
35{
36	entering_irq();
37	trace_threshold_apic_entry(THRESHOLD_APIC_VECTOR);
38	__smp_threshold_interrupt();
39	trace_threshold_apic_exit(THRESHOLD_APIC_VECTOR);
40	exiting_ack_irq();
41}
42