OSDN Git Service

x86: Consolidate irq entering inlines
authorThomas Gleixner <tglx@linutronix.de>
Fri, 15 May 2015 13:50:45 +0000 (15:50 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 15 May 2015 14:04:49 +0000 (16:04 +0200)
smp.c and irq_work.c implement the same inline helper. Move it to
apic.h and use it everywhere.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
arch/x86/include/asm/apic.h
arch/x86/kernel/irq_work.c
arch/x86/kernel/smp.c

index 976b86a..c839363 100644 (file)
@@ -644,6 +644,12 @@ static inline void entering_ack_irq(void)
        entering_irq();
 }
 
+static inline void ipi_entering_ack_irq(void)
+{
+       ack_APIC_irq();
+       irq_enter();
+}
+
 static inline void exiting_irq(void)
 {
        irq_exit();
index 15d741d..dc5fa6a 100644 (file)
 #include <asm/apic.h>
 #include <asm/trace/irq_vectors.h>
 
-static inline void irq_work_entering_irq(void)
-{
-       irq_enter();
-       ack_APIC_irq();
-}
-
 static inline void __smp_irq_work_interrupt(void)
 {
        inc_irq_stat(apic_irq_work_irqs);
@@ -24,14 +18,14 @@ static inline void __smp_irq_work_interrupt(void)
 
 __visible void smp_irq_work_interrupt(struct pt_regs *regs)
 {
-       irq_work_entering_irq();
+       ipi_entering_ack_irq();
        __smp_irq_work_interrupt();
        exiting_irq();
 }
 
 __visible void smp_trace_irq_work_interrupt(struct pt_regs *regs)
 {
-       irq_work_entering_irq();
+       ipi_entering_ack_irq();
        trace_irq_work_entry(IRQ_WORK_VECTOR);
        __smp_irq_work_interrupt();
        trace_irq_work_exit(IRQ_WORK_VECTOR);
index be8e1bd..15aaa69 100644 (file)
@@ -170,8 +170,7 @@ static int smp_stop_nmi_callback(unsigned int val, struct pt_regs *regs)
 
 asmlinkage __visible void smp_reboot_interrupt(void)
 {
-       ack_APIC_irq();
-       irq_enter();
+       ipi_entering_ack_irq();
        stop_this_cpu(NULL);
        irq_exit();
 }
@@ -265,12 +264,6 @@ __visible void smp_reschedule_interrupt(struct pt_regs *regs)
         */
 }
 
-static inline void smp_entering_irq(void)
-{
-       ack_APIC_irq();
-       irq_enter();
-}
-
 __visible void smp_trace_reschedule_interrupt(struct pt_regs *regs)
 {
        /*
@@ -279,7 +272,7 @@ __visible void smp_trace_reschedule_interrupt(struct pt_regs *regs)
         * scheduler_ipi(). This is OK, since those functions are allowed
         * to nest.
         */
-       smp_entering_irq();
+       ipi_entering_ack_irq();
        trace_reschedule_entry(RESCHEDULE_VECTOR);
        __smp_reschedule_interrupt();
        trace_reschedule_exit(RESCHEDULE_VECTOR);
@@ -297,14 +290,14 @@ static inline void __smp_call_function_interrupt(void)
 
 __visible void smp_call_function_interrupt(struct pt_regs *regs)
 {
-       smp_entering_irq();
+       ipi_entering_ack_irq();
        __smp_call_function_interrupt();
        exiting_irq();
 }
 
 __visible void smp_trace_call_function_interrupt(struct pt_regs *regs)
 {
-       smp_entering_irq();
+       ipi_entering_ack_irq();
        trace_call_function_entry(CALL_FUNCTION_VECTOR);
        __smp_call_function_interrupt();
        trace_call_function_exit(CALL_FUNCTION_VECTOR);
@@ -319,14 +312,14 @@ static inline void __smp_call_function_single_interrupt(void)
 
 __visible void smp_call_function_single_interrupt(struct pt_regs *regs)
 {
-       smp_entering_irq();
+       ipi_entering_ack_irq();
        __smp_call_function_single_interrupt();
        exiting_irq();
 }
 
 __visible void smp_trace_call_function_single_interrupt(struct pt_regs *regs)
 {
-       smp_entering_irq();
+       ipi_entering_ack_irq();
        trace_call_function_single_entry(CALL_FUNCTION_SINGLE_VECTOR);
        __smp_call_function_single_interrupt();
        trace_call_function_single_exit(CALL_FUNCTION_SINGLE_VECTOR);