sparc64: Adjust __raw_local_irq_save() to cooperate in NMIs.
commit28a1bdd6c2e46a94d86929d5283b72808ee147e9
authorDavid S. Miller <davem@davemloft.net>
Mon, 10 May 2010 12:19:10 +0000 (10 05:19 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 12 May 2010 22:03:05 +0000 (12 15:03 -0700)
treef20a5625a4cc87cf59b1d351db09ce51f8c348d2
parentd59547af05037f84707a57c90cee3fdfecc8c4b7
sparc64: Adjust __raw_local_irq_save() to cooperate in NMIs.

[ Upstream commits 0c25e9e6cbe7b233bb91d14d0e2c258bf8e6ec83 and
   c011f80ba0912486fe51dd2b3f71d9b33a151188 ]

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
arch/sparc/include/asm/irqflags_64.h