diff options
Diffstat (limited to 'arch/powerpc/include/asm/irqflags.h')
-rw-r--r-- | arch/powerpc/include/asm/irqflags.h | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/arch/powerpc/include/asm/irqflags.h b/arch/powerpc/include/asm/irqflags.h index b0b06d85788d..6f9b6e23dc5a 100644 --- a/arch/powerpc/include/asm/irqflags.h +++ b/arch/powerpc/include/asm/irqflags.h | |||
@@ -39,24 +39,31 @@ | |||
39 | #define TRACE_ENABLE_INTS TRACE_WITH_FRAME_BUFFER(.trace_hardirqs_on) | 39 | #define TRACE_ENABLE_INTS TRACE_WITH_FRAME_BUFFER(.trace_hardirqs_on) |
40 | #define TRACE_DISABLE_INTS TRACE_WITH_FRAME_BUFFER(.trace_hardirqs_off) | 40 | #define TRACE_DISABLE_INTS TRACE_WITH_FRAME_BUFFER(.trace_hardirqs_off) |
41 | 41 | ||
42 | #define TRACE_AND_RESTORE_IRQ_PARTIAL(en,skip) \ | 42 | /* |
43 | cmpdi en,0; \ | 43 | * This is used by assembly code to soft-disable interrupts |
44 | bne 95f; \ | 44 | */ |
45 | stb en,PACASOFTIRQEN(r13); \ | 45 | #define SOFT_DISABLE_INTS(__rA, __rB) \ |
46 | TRACE_WITH_FRAME_BUFFER(.trace_hardirqs_off) \ | 46 | lbz __rA,PACASOFTIRQEN(r13); \ |
47 | b skip; \ | 47 | lbz __rB,PACAIRQHAPPENED(r13); \ |
48 | 95: TRACE_WITH_FRAME_BUFFER(.trace_hardirqs_on) \ | 48 | cmpwi cr0,__rA,0; \ |
49 | li en,1; | 49 | li __rA,0; \ |
50 | #define TRACE_AND_RESTORE_IRQ(en) \ | 50 | ori __rB,__rB,PACA_IRQ_HARD_DIS; \ |
51 | TRACE_AND_RESTORE_IRQ_PARTIAL(en,96f); \ | 51 | stb __rB,PACAIRQHAPPENED(r13); \ |
52 | stb en,PACASOFTIRQEN(r13); \ | 52 | beq 44f; \ |
53 | 96: | 53 | stb __rA,PACASOFTIRQEN(r13); \ |
54 | TRACE_DISABLE_INTS; \ | ||
55 | 44: | ||
56 | |||
54 | #else | 57 | #else |
55 | #define TRACE_ENABLE_INTS | 58 | #define TRACE_ENABLE_INTS |
56 | #define TRACE_DISABLE_INTS | 59 | #define TRACE_DISABLE_INTS |
57 | #define TRACE_AND_RESTORE_IRQ_PARTIAL(en,skip) | 60 | |
58 | #define TRACE_AND_RESTORE_IRQ(en) \ | 61 | #define SOFT_DISABLE_INTS(__rA, __rB) \ |
59 | stb en,PACASOFTIRQEN(r13) | 62 | lbz __rA,PACAIRQHAPPENED(r13); \ |
63 | li __rB,0; \ | ||
64 | ori __rA,__rA,PACA_IRQ_HARD_DIS; \ | ||
65 | stb __rB,PACASOFTIRQEN(r13); \ | ||
66 | stb __rA,PACAIRQHAPPENED(r13) | ||
60 | #endif | 67 | #endif |
61 | #endif | 68 | #endif |
62 | 69 | ||