提交 6dc17876 编写于 作者: T Thomas Gleixner

x86: Consolidate irq entering inlines

smp.c and irq_work.c implement the same inline helper. Move it to
apic.h and use it everywhere.
Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
上级 6af7faf6
...@@ -644,6 +644,12 @@ static inline void entering_ack_irq(void) ...@@ -644,6 +644,12 @@ static inline void entering_ack_irq(void)
entering_irq(); entering_irq();
} }
static inline void ipi_entering_ack_irq(void)
{
ack_APIC_irq();
irq_enter();
}
static inline void exiting_irq(void) static inline void exiting_irq(void)
{ {
irq_exit(); irq_exit();
......
...@@ -10,12 +10,6 @@ ...@@ -10,12 +10,6 @@
#include <asm/apic.h> #include <asm/apic.h>
#include <asm/trace/irq_vectors.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) static inline void __smp_irq_work_interrupt(void)
{ {
inc_irq_stat(apic_irq_work_irqs); inc_irq_stat(apic_irq_work_irqs);
...@@ -24,14 +18,14 @@ static inline void __smp_irq_work_interrupt(void) ...@@ -24,14 +18,14 @@ static inline void __smp_irq_work_interrupt(void)
__visible void smp_irq_work_interrupt(struct pt_regs *regs) __visible void smp_irq_work_interrupt(struct pt_regs *regs)
{ {
irq_work_entering_irq(); ipi_entering_ack_irq();
__smp_irq_work_interrupt(); __smp_irq_work_interrupt();
exiting_irq(); exiting_irq();
} }
__visible void smp_trace_irq_work_interrupt(struct pt_regs *regs) __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); trace_irq_work_entry(IRQ_WORK_VECTOR);
__smp_irq_work_interrupt(); __smp_irq_work_interrupt();
trace_irq_work_exit(IRQ_WORK_VECTOR); trace_irq_work_exit(IRQ_WORK_VECTOR);
......
...@@ -170,8 +170,7 @@ static int smp_stop_nmi_callback(unsigned int val, struct pt_regs *regs) ...@@ -170,8 +170,7 @@ static int smp_stop_nmi_callback(unsigned int val, struct pt_regs *regs)
asmlinkage __visible void smp_reboot_interrupt(void) asmlinkage __visible void smp_reboot_interrupt(void)
{ {
ack_APIC_irq(); ipi_entering_ack_irq();
irq_enter();
stop_this_cpu(NULL); stop_this_cpu(NULL);
irq_exit(); irq_exit();
} }
...@@ -265,12 +264,6 @@ __visible void smp_reschedule_interrupt(struct pt_regs *regs) ...@@ -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) __visible void smp_trace_reschedule_interrupt(struct pt_regs *regs)
{ {
/* /*
...@@ -279,7 +272,7 @@ __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 * scheduler_ipi(). This is OK, since those functions are allowed
* to nest. * to nest.
*/ */
smp_entering_irq(); ipi_entering_ack_irq();
trace_reschedule_entry(RESCHEDULE_VECTOR); trace_reschedule_entry(RESCHEDULE_VECTOR);
__smp_reschedule_interrupt(); __smp_reschedule_interrupt();
trace_reschedule_exit(RESCHEDULE_VECTOR); trace_reschedule_exit(RESCHEDULE_VECTOR);
...@@ -297,14 +290,14 @@ static inline void __smp_call_function_interrupt(void) ...@@ -297,14 +290,14 @@ static inline void __smp_call_function_interrupt(void)
__visible void smp_call_function_interrupt(struct pt_regs *regs) __visible void smp_call_function_interrupt(struct pt_regs *regs)
{ {
smp_entering_irq(); ipi_entering_ack_irq();
__smp_call_function_interrupt(); __smp_call_function_interrupt();
exiting_irq(); exiting_irq();
} }
__visible void smp_trace_call_function_interrupt(struct pt_regs *regs) __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); trace_call_function_entry(CALL_FUNCTION_VECTOR);
__smp_call_function_interrupt(); __smp_call_function_interrupt();
trace_call_function_exit(CALL_FUNCTION_VECTOR); trace_call_function_exit(CALL_FUNCTION_VECTOR);
...@@ -319,14 +312,14 @@ static inline void __smp_call_function_single_interrupt(void) ...@@ -319,14 +312,14 @@ static inline void __smp_call_function_single_interrupt(void)
__visible void smp_call_function_single_interrupt(struct pt_regs *regs) __visible void smp_call_function_single_interrupt(struct pt_regs *regs)
{ {
smp_entering_irq(); ipi_entering_ack_irq();
__smp_call_function_single_interrupt(); __smp_call_function_single_interrupt();
exiting_irq(); exiting_irq();
} }
__visible void smp_trace_call_function_single_interrupt(struct pt_regs *regs) __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); trace_call_function_single_entry(CALL_FUNCTION_SINGLE_VECTOR);
__smp_call_function_single_interrupt(); __smp_call_function_single_interrupt();
trace_call_function_single_exit(CALL_FUNCTION_SINGLE_VECTOR); trace_call_function_single_exit(CALL_FUNCTION_SINGLE_VECTOR);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册