sparc64: Adjust __raw_local_irq_save() to cooperate in NMIs.
authorDavid S. Miller <davem@davemloft.net>
Tue, 13 Apr 2010 05:21:52 +0000 (22:21 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 13 Apr 2010 05:21:52 +0000 (22:21 -0700)
commit0c25e9e6cbe7b233bb91d14d0e2c258bf8e6ec83
tree5861eaf8ece8ad9bdd9b23c0f69f2d61c994961c
parentcb256aa60409efd803806cfb0528a4b3f8397dba
sparc64: Adjust __raw_local_irq_save() to cooperate in NMIs.

If we are in an NMI then doing a plain raw_local_irq_disable() will
write PIL_NORMAL_MAX into %pil, which is lower than PIL_NMI, and thus
we'll re-enable NMIs and recurse.

Doing a simple:

%pil = %pil | PIL_NORMAL_MAX

does what we want, if we're already at PIL_NMI (15) we leave it at
that setting, else we set it to PIL_NORMAL_MAX (14).

This should get the function tracer working on sparc64.

Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc/include/asm/irqflags_64.h