Skip to content

Commit

Permalink
powerpc: Improve behaviour of irq tracing on 64-bit exception entry
Browse files Browse the repository at this point in the history
Some exceptions would unconditionally disable interrupts on entry,
which is fine, but calling lockdep every time not only adds more
overhead than strictly needed, but also means we get quite a few
"redudant" disable logged, which makes it hard to spot the really
bad ones.

So instead, split the macro used by the exception code into a
normal one and a separate one used when CONFIG_TRACE_IRQFLAGS is
enabled, and make the later skip th tracing if interrupts were
already disabled.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
  • Loading branch information
Benjamin Herrenschmidt committed Mar 8, 2012
1 parent 1421ae0 commit 1b70117
Showing 1 changed file with 22 additions and 3 deletions.
25 changes: 22 additions & 3 deletions arch/powerpc/include/asm/exception-64s.h
Original file line number Diff line number Diff line change
Expand Up @@ -272,15 +272,34 @@ label##_hv: \
_MASKABLE_EXCEPTION_PSERIES(vec, label, \
EXC_HV, SOFTEN_TEST_HV)

/*
* Our exception common code can be passed various "additions"
* to specify the behaviour of interrupts, whether to kick the
* runlatch, etc...
*/

/* Exception addition: Hard disable interrupts */
#ifdef CONFIG_TRACE_IRQFLAGS
#define DISABLE_INTS \
lbz r10,PACASOFTIRQEN(r13); \
li r11,0; \
stb r11,PACASOFTIRQEN(r13); \
cmpwi cr0,r10,0; \
stb r11,PACAHARDIRQEN(r13); \
TRACE_DISABLE_INTS
beq 44f; \
stb r11,PACASOFTIRQEN(r13); \
TRACE_DISABLE_INTS; \
44:
#else
#define DISABLE_INTS \
li r11,0; \
stb r11,PACASOFTIRQEN(r13); \
stb r11,PACAHARDIRQEN(r13)
#endif /* CONFIG_TRACE_IRQFLAGS */

/* Exception addition: Keep interrupt state */
#define ENABLE_INTS \
ld r12,_MSR(r1); \
mfmsr r11; \
ld r12,_MSR(r1); \
rlwimi r11,r12,0,MSR_EE; \
mtmsrd r11,1

Expand Down

0 comments on commit 1b70117

Please sign in to comment.