diff options
Diffstat (limited to 'arch/powerpc/kernel/head_booke.h')
| -rw-r--r-- | arch/powerpc/kernel/head_booke.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/head_booke.h b/arch/powerpc/kernel/head_booke.h index d0862a100d29..15ac51072eb3 100644 --- a/arch/powerpc/kernel/head_booke.h +++ b/arch/powerpc/kernel/head_booke.h | |||
| @@ -43,6 +43,9 @@ | |||
| 43 | andi. r11, r11, MSR_PR; /* check whether user or kernel */\ | 43 | andi. r11, r11, MSR_PR; /* check whether user or kernel */\ |
| 44 | mr r11, r1; \ | 44 | mr r11, r1; \ |
| 45 | beq 1f; \ | 45 | beq 1f; \ |
| 46 | START_BTB_FLUSH_SECTION \ | ||
| 47 | BTB_FLUSH(r11) \ | ||
| 48 | END_BTB_FLUSH_SECTION \ | ||
| 46 | /* if from user, start at top of this thread's kernel stack */ \ | 49 | /* if from user, start at top of this thread's kernel stack */ \ |
| 47 | lwz r11, THREAD_INFO-THREAD(r10); \ | 50 | lwz r11, THREAD_INFO-THREAD(r10); \ |
| 48 | ALLOC_STACK_FRAME(r11, THREAD_SIZE); \ | 51 | ALLOC_STACK_FRAME(r11, THREAD_SIZE); \ |
| @@ -128,6 +131,9 @@ | |||
| 128 | stw r9,_CCR(r8); /* save CR on stack */\ | 131 | stw r9,_CCR(r8); /* save CR on stack */\ |
| 129 | mfspr r11,exc_level_srr1; /* check whether user or kernel */\ | 132 | mfspr r11,exc_level_srr1; /* check whether user or kernel */\ |
| 130 | DO_KVM BOOKE_INTERRUPT_##intno exc_level_srr1; \ | 133 | DO_KVM BOOKE_INTERRUPT_##intno exc_level_srr1; \ |
| 134 | START_BTB_FLUSH_SECTION \ | ||
| 135 | BTB_FLUSH(r10) \ | ||
| 136 | END_BTB_FLUSH_SECTION \ | ||
| 131 | andi. r11,r11,MSR_PR; \ | 137 | andi. r11,r11,MSR_PR; \ |
| 132 | mfspr r11,SPRN_SPRG_THREAD; /* if from user, start at top of */\ | 138 | mfspr r11,SPRN_SPRG_THREAD; /* if from user, start at top of */\ |
| 133 | lwz r11,THREAD_INFO-THREAD(r11); /* this thread's kernel stack */\ | 139 | lwz r11,THREAD_INFO-THREAD(r11); /* this thread's kernel stack */\ |
