On Sat, 23 Jan 2021 16:12:44 +1000, Nicholas Piggin wrote: > When an asynchronous interrupt calls irq_exit, it checks for softirqs > that may have been created, and runs them. Running softirqs enables > local irqs, which can replay pending interrupts causing recursion in > replay_soft_interrupts. This abridged trace shows how this can occur: > > ! NIP replay_soft_interrupts > LR interrupt_exit_kernel_prepare > Call Trace: > interrupt_exit_kernel_prepare (unreliable) > interrupt_return > --- interrupt: ea0 at __rb_reserve_next > NIP __rb_reserve_next > LR __rb_reserve_next > Call Trace: > ring_buffer_lock_reserve > trace_function > function_trace_call > ftrace_call > __do_softirq > irq_exit > timer_interrupt > ! replay_soft_interrupts > interrupt_exit_kernel_prepare > interrupt_return > --- interrupt: ea0 at arch_local_irq_restore > > [...]
Applied to powerpc/fixes. [1/1] powerpc/64s: prevent recursive replay_soft_interrupts causing superfluous interrupt https://git.kernel.org/powerpc/c/4025c784c573cab7e3f84746cc82b8033923ec62 cheers