Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6dc17876 authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

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: default avatarThomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
parent 6af7faf6
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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();
+2 −8
Original line number Diff line number Diff line
@@ -10,12 +10,6 @@
#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);
+6 −13
Original line number Diff line number Diff line
@@ -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);