Commit 1b1b6a6f authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Michael Ellerman
Browse files

powerpc: handle irq_enter/irq_exit in interrupt handler wrappers



Move irq_enter/irq_exit into asynchronous interrupt handler wrappers.

Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20210130130852.2952424-35-npiggin@gmail.com
parent 6fdb0f41
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -43,10 +43,12 @@ static inline void interrupt_exit_prepare(struct pt_regs *regs, struct interrupt
static inline void interrupt_async_enter_prepare(struct pt_regs *regs, struct interrupt_state *state)
{
	interrupt_enter_prepare(regs, state);
	irq_enter();
}

static inline void interrupt_async_exit_prepare(struct pt_regs *regs, struct interrupt_state *state)
{
	irq_exit();
	interrupt_exit_prepare(regs, state);
}

+1 −2
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@ DEFINE_INTERRUPT_HANDLER_ASYNC(doorbell_exception)
{
	struct pt_regs *old_regs = set_irq_regs(regs);

	irq_enter();
	trace_doorbell_entry(regs);

	ppc_msgsync();
@@ -36,7 +35,7 @@ DEFINE_INTERRUPT_HANDLER_ASYNC(doorbell_exception)
	smp_ipi_demux_relaxed(); /* already performed the barrier */

	trace_doorbell_exit(regs);
	irq_exit();

	set_irq_regs(old_regs);
}
#else /* CONFIG_SMP */
+0 −4
Original line number Diff line number Diff line
@@ -641,8 +641,6 @@ void __do_irq(struct pt_regs *regs)
{
	unsigned int irq;

	irq_enter();

	trace_irq_entry(regs);

	/*
@@ -662,8 +660,6 @@ void __do_irq(struct pt_regs *regs)
		generic_handle_irq(irq);

	trace_irq_exit(regs);

	irq_exit();
}

DEFINE_INTERRUPT_HANDLER_ASYNC(do_IRQ)
+0 −3
Original line number Diff line number Diff line
@@ -105,12 +105,9 @@ DEFINE_INTERRUPT_HANDLER_ASYNC(TAUException)
{
	int cpu = smp_processor_id();

	irq_enter();
	tau[cpu].interrupts++;

	TAUupdate(cpu);

	irq_exit();
}
#endif /* CONFIG_TAU_INT */

+2 −2
Original line number Diff line number Diff line
@@ -611,7 +611,7 @@ DEFINE_INTERRUPT_HANDLER_ASYNC(timer_interrupt)
#endif

	old_regs = set_irq_regs(regs);
	irq_enter();

	trace_timer_interrupt_entry(regs);

	if (test_irq_work_pending()) {
@@ -636,7 +636,7 @@ DEFINE_INTERRUPT_HANDLER_ASYNC(timer_interrupt)
	}

	trace_timer_interrupt_exit(regs);
	irq_exit();

	set_irq_regs(old_regs);
}
EXPORT_SYMBOL(timer_interrupt);
Loading