diff options
Diffstat (limited to 'arch/powerpc/kernel/exceptions-64e.S')
-rw-r--r-- | arch/powerpc/kernel/exceptions-64e.S | 26 |
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 */\ |
299 | 1: cmpdi cr1,r1,0; /* check if SP makes sense */ \ | 299 | 1: 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 | ||