aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTiejun Chen <tiejun.chen@windriver.com>2013-10-23 05:31:22 -0400
committerScott Wood <scottwood@freescale.com>2014-03-19 20:57:10 -0400
commit19007b340d4ee2957938b29d63c2077ce1368ec8 (patch)
tree1e047daaeada9a48d193c94c855c185e794b08da
parent160c73243350304c09e69cbcc4fa34ff89868b68 (diff)
powerpc/book3e: store crit/mc/dbg exception thread info
We need to store thread info to these exception thread info like something we already did for PPC32. Signed-off-by: Tiejun Chen <tiejun.chen@windriver.com> Signed-off-by: Scott Wood <scottwood@freescale.com>
-rw-r--r--arch/powerpc/kernel/exceptions-64e.S22
1 files changed, 19 insertions, 3 deletions
diff --git a/arch/powerpc/kernel/exceptions-64e.S b/arch/powerpc/kernel/exceptions-64e.S
index 063b65dd4f27..6772512bd0bd 100644
--- a/arch/powerpc/kernel/exceptions-64e.S
+++ b/arch/powerpc/kernel/exceptions-64e.S
@@ -36,6 +36,19 @@
36 */ 36 */
37#define SPECIAL_EXC_FRAME_SIZE INT_FRAME_SIZE 37#define SPECIAL_EXC_FRAME_SIZE INT_FRAME_SIZE
38 38
39/* Now we only store something to exception thread info */
40#define EXC_LEVEL_EXCEPTION_PROLOG(type) \
41 ld r14,PACAKSAVE(r13); \
42 CURRENT_THREAD_INFO(r14, r14); \
43 CURRENT_THREAD_INFO(r15, r1); \
44 ld r10,TI_FLAGS(r14); \
45 std r10,TI_FLAGS(r15); \
46 ld r10,TI_PREEMPT(r14); \
47 std r10,TI_PREEMPT(r15); \
48 ld r10,TI_TASK(r14); \
49 std r10,TI_TASK(r15);
50
51
39/* Exception prolog code for all exceptions */ 52/* Exception prolog code for all exceptions */
40#define EXCEPTION_PROLOG(n, intnum, type, addition) \ 53#define EXCEPTION_PROLOG(n, intnum, type, addition) \
41 mtspr SPRN_SPRG_##type##_SCRATCH,r13; /* get spare registers */ \ 54 mtspr SPRN_SPRG_##type##_SCRATCH,r13; /* get spare registers */ \
@@ -69,19 +82,22 @@
69 82
70#define CRIT_SET_KSTACK \ 83#define CRIT_SET_KSTACK \
71 ld r1,PACA_CRIT_STACK(r13); \ 84 ld r1,PACA_CRIT_STACK(r13); \
72 subi r1,r1,SPECIAL_EXC_FRAME_SIZE; 85 subi r1,r1,SPECIAL_EXC_FRAME_SIZE; \
86 EXC_LEVEL_EXCEPTION_PROLOG(CRIT);
73#define SPRN_CRIT_SRR0 SPRN_CSRR0 87#define SPRN_CRIT_SRR0 SPRN_CSRR0
74#define SPRN_CRIT_SRR1 SPRN_CSRR1 88#define SPRN_CRIT_SRR1 SPRN_CSRR1
75 89
76#define DBG_SET_KSTACK \ 90#define DBG_SET_KSTACK \
77 ld r1,PACA_DBG_STACK(r13); \ 91 ld r1,PACA_DBG_STACK(r13); \
78 subi r1,r1,SPECIAL_EXC_FRAME_SIZE; 92 subi r1,r1,SPECIAL_EXC_FRAME_SIZE; \
93 EXC_LEVEL_EXCEPTION_PROLOG(DBG);
79#define SPRN_DBG_SRR0 SPRN_DSRR0 94#define SPRN_DBG_SRR0 SPRN_DSRR0
80#define SPRN_DBG_SRR1 SPRN_DSRR1 95#define SPRN_DBG_SRR1 SPRN_DSRR1
81 96
82#define MC_SET_KSTACK \ 97#define MC_SET_KSTACK \
83 ld r1,PACA_MC_STACK(r13); \ 98 ld r1,PACA_MC_STACK(r13); \
84 subi r1,r1,SPECIAL_EXC_FRAME_SIZE; 99 subi r1,r1,SPECIAL_EXC_FRAME_SIZE; \
100 EXC_LEVEL_EXCEPTION_PROLOG(MC);
85#define SPRN_MC_SRR0 SPRN_MCSRR0 101#define SPRN_MC_SRR0 SPRN_MCSRR0
86#define SPRN_MC_SRR1 SPRN_MCSRR1 102#define SPRN_MC_SRR1 SPRN_MCSRR1
87 103