diff options
author | Kumar Gala <galak@kernel.crashing.org> | 2008-04-30 05:17:22 -0400 |
---|---|---|
committer | Kumar Gala <galak@kernel.crashing.org> | 2008-06-02 15:56:06 -0400 |
commit | 369e757b65d4a5e49bae7cfaf671e784f891cfbe (patch) | |
tree | aa144c5db61f00384a552c33ace99c454fe5ea23 /arch/powerpc/kernel/entry_32.S | |
parent | bcf0b0880710409420a4e3b15dbf4b9a63542c0b (diff) |
[POWERPC] Rework EXC_LEVEL_EXCEPTION_PROLOG code
* Cleanup the code a bit my allocating an INT_FRAME on our exception
stack there by make references go from GPR11-INT_FRAME_SIZE(r8) to
just GPR11(r8)
* simplify {lvl}_transfer_to_handler code by moving the copying of the
temp registers we use if we come from user space into the PROLOG
* If the exception came from kernel mode copy thread_info flags,
preempt, and task pointer from the process thread_info.
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Acked-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/kernel/entry_32.S')
-rw-r--r-- | arch/powerpc/kernel/entry_32.S | 13 |
1 files changed, 0 insertions, 13 deletions
diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S index 888a364043a8..c94aba54b5dd 100644 --- a/arch/powerpc/kernel/entry_32.S +++ b/arch/powerpc/kernel/entry_32.S | |||
@@ -44,29 +44,16 @@ | |||
44 | #endif | 44 | #endif |
45 | 45 | ||
46 | #ifdef CONFIG_BOOKE | 46 | #ifdef CONFIG_BOOKE |
47 | #include "head_booke.h" | ||
48 | #define TRANSFER_TO_HANDLER_EXC_LEVEL(exc_level) \ | ||
49 | mtspr exc_level##_SPRG,r8; \ | ||
50 | BOOKE_LOAD_EXC_LEVEL_STACK(exc_level); \ | ||
51 | lwz r0,GPR10-INT_FRAME_SIZE(r8); \ | ||
52 | stw r0,GPR10(r11); \ | ||
53 | lwz r0,GPR11-INT_FRAME_SIZE(r8); \ | ||
54 | stw r0,GPR11(r11); \ | ||
55 | mfspr r8,exc_level##_SPRG | ||
56 | |||
57 | .globl mcheck_transfer_to_handler | 47 | .globl mcheck_transfer_to_handler |
58 | mcheck_transfer_to_handler: | 48 | mcheck_transfer_to_handler: |
59 | TRANSFER_TO_HANDLER_EXC_LEVEL(MCHECK) | ||
60 | b transfer_to_handler_full | 49 | b transfer_to_handler_full |
61 | 50 | ||
62 | .globl debug_transfer_to_handler | 51 | .globl debug_transfer_to_handler |
63 | debug_transfer_to_handler: | 52 | debug_transfer_to_handler: |
64 | TRANSFER_TO_HANDLER_EXC_LEVEL(DEBUG) | ||
65 | b transfer_to_handler_full | 53 | b transfer_to_handler_full |
66 | 54 | ||
67 | .globl crit_transfer_to_handler | 55 | .globl crit_transfer_to_handler |
68 | crit_transfer_to_handler: | 56 | crit_transfer_to_handler: |
69 | TRANSFER_TO_HANDLER_EXC_LEVEL(CRIT) | ||
70 | /* fall through */ | 57 | /* fall through */ |
71 | #endif | 58 | #endif |
72 | 59 | ||