aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/exceptions-64e.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/kernel/exceptions-64e.S')
-rw-r--r--arch/powerpc/kernel/exceptions-64e.S26
1 files changed, 25 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/exceptions-64e.S b/arch/powerpc/kernel/exceptions-64e.S
index 6d6e144a28ce..afb638778f44 100644
--- a/arch/powerpc/kernel/exceptions-64e.S
+++ b/arch/powerpc/kernel/exceptions-64e.S
@@ -296,7 +296,8 @@ ret_from_mc_except:
296 andi. r10,r11,MSR_PR; /* save stack pointer */ \ 296 andi. r10,r11,MSR_PR; /* save stack pointer */ \
297 beq 1f; /* branch around if supervisor */ \ 297 beq 1f; /* branch around if supervisor */ \
298 ld r1,PACAKSAVE(r13); /* get kernel stack coming from usr */\ 298 ld r1,PACAKSAVE(r13); /* get kernel stack coming from usr */\
2991: cmpdi cr1,r1,0; /* check if SP makes sense */ \ 2991: type##_BTB_FLUSH \
300 cmpdi cr1,r1,0; /* check if SP makes sense */ \
300 bge- cr1,exc_##n##_bad_stack;/* bad stack (TODO: out of line) */ \ 301 bge- cr1,exc_##n##_bad_stack;/* bad stack (TODO: out of line) */ \
301 mfspr r10,SPRN_##type##_SRR0; /* read SRR0 before touching stack */ 302 mfspr r10,SPRN_##type##_SRR0; /* read SRR0 before touching stack */
302 303
@@ -328,6 +329,29 @@ ret_from_mc_except:
328#define SPRN_MC_SRR0 SPRN_MCSRR0 329#define SPRN_MC_SRR0 SPRN_MCSRR0
329#define SPRN_MC_SRR1 SPRN_MCSRR1 330#define SPRN_MC_SRR1 SPRN_MCSRR1
330 331
332#ifdef CONFIG_PPC_FSL_BOOK3E
333#define GEN_BTB_FLUSH \
334 START_BTB_FLUSH_SECTION \
335 beq 1f; \
336 BTB_FLUSH(r10) \
337 1: \
338 END_BTB_FLUSH_SECTION
339
340#define CRIT_BTB_FLUSH \
341 START_BTB_FLUSH_SECTION \
342 BTB_FLUSH(r10) \
343 END_BTB_FLUSH_SECTION
344
345#define DBG_BTB_FLUSH CRIT_BTB_FLUSH
346#define MC_BTB_FLUSH CRIT_BTB_FLUSH
347#define GDBELL_BTB_FLUSH GEN_BTB_FLUSH
348#else
349#define GEN_BTB_FLUSH
350#define CRIT_BTB_FLUSH
351#define DBG_BTB_FLUSH
352#define GDBELL_BTB_FLUSH
353#endif
354
331#define NORMAL_EXCEPTION_PROLOG(n, intnum, addition) \ 355#define NORMAL_EXCEPTION_PROLOG(n, intnum, addition) \
332 EXCEPTION_PROLOG(n, intnum, GEN, addition##_GEN(n)) 356 EXCEPTION_PROLOG(n, intnum, GEN, addition##_GEN(n))
333 357