x86/mce: Remove duplicated tracing interrupt code
authorThomas Gleixner <tglx@linutronix.de>
Mon, 28 Aug 2017 06:47:28 +0000 (08:47 +0200)
committerIngo Molnar <mingo@kernel.org>
Tue, 29 Aug 2017 09:42:26 +0000 (11:42 +0200)
Machine checks are not really high frequency events. The extra two NOP5s for
the disabled tracepoints are noise vs. the heavy lifting which needs to be
done in the MCE handler.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Link: http://lkml.kernel.org/r/20170828064957.144301907@linutronix.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/include/asm/hw_irq.h
arch/x86/kernel/cpu/mcheck/mce_amd.c
arch/x86/kernel/cpu/mcheck/therm_throt.c
arch/x86/kernel/cpu/mcheck/threshold.c

index fd7e7e67ff79b8720e6f133f1a51f2791b5e9cb2..5f042ec1b4ee8b5006ab8c5b25b255cfee5676b9 100644 (file)
@@ -48,12 +48,12 @@ extern asmlinkage void call_function_single_interrupt(void);
 
 #ifdef CONFIG_TRACING
 /* Interrupt handlers registered during init_IRQ */
-extern void trace_thermal_interrupt(void);
 extern void trace_reschedule_interrupt(void);
-extern void trace_threshold_interrupt(void);
-extern void trace_deferred_error_interrupt(void);
 extern void trace_call_function_interrupt(void);
 extern void trace_call_function_single_interrupt(void);
+#define trace_thermal_interrupt        thermal_interrupt
+#define trace_threshold_interrupt      threshold_interrupt
+#define trace_deferred_error_interrupt deferred_error_interrupt
 #define trace_irq_work_interrupt irq_work_interrupt
 #define trace_error_interrupt error_interrupt
 #define trace_spurious_interrupt spurious_interrupt
index 9e314bcf67ccdd53e585c3047ad682f4bc20dad5..172924d57d2449b202b7ba0b31c1d123964dc1a5 100644 (file)
@@ -776,24 +776,12 @@ static void __log_error(unsigned int bank, u64 status, u64 addr, u64 misc)
        mce_log(&m);
 }
 
-static inline void __smp_deferred_error_interrupt(void)
-{
-       inc_irq_stat(irq_deferred_error_count);
-       deferred_error_int_vector();
-}
-
 asmlinkage __visible void __irq_entry smp_deferred_error_interrupt(void)
-{
-       entering_irq();
-       __smp_deferred_error_interrupt();
-       exiting_ack_irq();
-}
-
-asmlinkage __visible void __irq_entry smp_trace_deferred_error_interrupt(void)
 {
        entering_irq();
        trace_deferred_error_apic_entry(DEFERRED_ERROR_VECTOR);
-       __smp_deferred_error_interrupt();
+       inc_irq_stat(irq_deferred_error_count);
+       deferred_error_int_vector();
        trace_deferred_error_apic_exit(DEFERRED_ERROR_VECTOR);
        exiting_ack_irq();
 }
index f7370abd33c67570ad713a03a20f9114e6ad6399..2da67b70ba989821db25e3190a5c68964f9e1c26 100644 (file)
@@ -390,26 +390,12 @@ static void unexpected_thermal_interrupt(void)
 
 static void (*smp_thermal_vector)(void) = unexpected_thermal_interrupt;
 
-static inline void __smp_thermal_interrupt(void)
-{
-       inc_irq_stat(irq_thermal_count);
-       smp_thermal_vector();
-}
-
-asmlinkage __visible void __irq_entry
-smp_thermal_interrupt(struct pt_regs *regs)
-{
-       entering_irq();
-       __smp_thermal_interrupt();
-       exiting_ack_irq();
-}
-
-asmlinkage __visible void __irq_entry
-smp_trace_thermal_interrupt(struct pt_regs *regs)
+asmlinkage __visible void __irq_entry smp_thermal_interrupt(struct pt_regs *r)
 {
        entering_irq();
        trace_thermal_apic_entry(THERMAL_APIC_VECTOR);
-       __smp_thermal_interrupt();
+       inc_irq_stat(irq_thermal_count);
+       smp_thermal_vector();
        trace_thermal_apic_exit(THERMAL_APIC_VECTOR);
        exiting_ack_irq();
 }
index bb0e75eed10a10a1b19daf82eeef12aefd8be2db..5e7249e42f8ff9f5410e0999420c953575e1dd34 100644 (file)
@@ -17,24 +17,12 @@ static void default_threshold_interrupt(void)
 
 void (*mce_threshold_vector)(void) = default_threshold_interrupt;
 
-static inline void __smp_threshold_interrupt(void)
-{
-       inc_irq_stat(irq_threshold_count);
-       mce_threshold_vector();
-}
-
 asmlinkage __visible void __irq_entry smp_threshold_interrupt(void)
-{
-       entering_irq();
-       __smp_threshold_interrupt();
-       exiting_ack_irq();
-}
-
-asmlinkage __visible void __irq_entry smp_trace_threshold_interrupt(void)
 {
        entering_irq();
        trace_threshold_apic_entry(THRESHOLD_APIC_VECTOR);
-       __smp_threshold_interrupt();
+       inc_irq_stat(irq_threshold_count);
+       mce_threshold_vector();
        trace_threshold_apic_exit(THRESHOLD_APIC_VECTOR);
        exiting_ack_irq();
 }