diff options
author | Tiejun Chen <tiejun.chen@windriver.com> | 2013-10-23 05:31:22 -0400 |
---|---|---|
committer | Scott Wood <scottwood@freescale.com> | 2014-03-19 20:57:10 -0400 |
commit | 19007b340d4ee2957938b29d63c2077ce1368ec8 (patch) | |
tree | 1e047daaeada9a48d193c94c855c185e794b08da | |
parent | 160c73243350304c09e69cbcc4fa34ff89868b68 (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.S | 22 |
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 | ||