Re: [PATCH 1/3] nmi: create generic NMI backtrace implementation

From: Daniel Thompson
Date: Tue Jul 28 2015 - 04:30:02 EST


On 25/07/15 15:42, Russell King - ARM Linux wrote:
On Thu, Jul 16, 2015 at 10:51:25AM +0100, Daniel Thompson wrote:
On 16/07/15 10:37, Russell King - ARM Linux wrote:
That can be implemented in the arch raise() method if needed - most
architectures shouldn't need it as if they are properly raising a NMI
which is, by definition, deliverable with normal IRQs disabled.

Agreed. The bug certainly could be fixed in the ARM raise() function.

However I'm still curious whether there is any architecture that benefits
from forcing the current CPU into an NMI handler? Why doesn't the
don't-run-unnecessary-code argument apply here as well?

The benefit is that we get a consistent way of invoking the backtrace,
since causing the NMI exception gives us a 'struct pt_regs' to work
with, which we wouldn't otherwise have if we tried to call it "inline".

The NMI backtrace includes dumping the register state of the NMI-
receiving CPUs, which needs a 'struct pt_regs' and generating a that in
arch-independent code wouldn't be nice.

Previously I have relied on dump_stack() for this. That should work everywhere although guess the arch code might display the stack display differently.


In any case, if this area needs changing in the generic code, it should
be done as a separate change so that it can be properly assessed and
validated on x86.

Do you want me to supply a patch to fix the IRQ issue in the arm specific code for now?

If we don't fix that then the behaviour of SysRq-L on ARM will change and the output will no longer include the CPU that executed SysRq-L.


In the mean time, I will action Thomas' request to put it into my tree
so that we can get some reasonable linux-next time with it, and hopefully
have some progress towards FIQ-based backtracing for ARM.

Great!

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/