|
@@ -39,37 +39,49 @@
|
|
|
* *
|
|
|
**********************************************************************/
|
|
|
|
|
|
+/*
|
|
|
+ * Note that, unlike non-bolted handlers, TLB_EXFRAME is not
|
|
|
+ * modified by the TLB miss handlers themselves, since the TLB miss
|
|
|
+ * handler code will not itself cause a recursive TLB miss.
|
|
|
+ *
|
|
|
+ * TLB_EXFRAME will be modified when crit/mc/debug exceptions are
|
|
|
+ * entered/exited.
|
|
|
+ */
|
|
|
.macro tlb_prolog_bolted intnum addr
|
|
|
- mtspr SPRN_SPRG_GEN_SCRATCH,r13
|
|
|
+ mtspr SPRN_SPRG_GEN_SCRATCH,r12
|
|
|
+ mfspr r12,SPRN_SPRG_TLB_EXFRAME
|
|
|
+ std r13,EX_TLB_R13(r12)
|
|
|
+ std r10,EX_TLB_R10(r12)
|
|
|
mfspr r13,SPRN_SPRG_PACA
|
|
|
- std r10,PACA_EXTLB+EX_TLB_R10(r13)
|
|
|
+
|
|
|
mfcr r10
|
|
|
- std r11,PACA_EXTLB+EX_TLB_R11(r13)
|
|
|
+ std r11,EX_TLB_R11(r12)
|
|
|
#ifdef CONFIG_KVM_BOOKE_HV
|
|
|
BEGIN_FTR_SECTION
|
|
|
mfspr r11, SPRN_SRR1
|
|
|
END_FTR_SECTION_IFSET(CPU_FTR_EMB_HV)
|
|
|
#endif
|
|
|
DO_KVM \intnum, SPRN_SRR1
|
|
|
- std r16,PACA_EXTLB+EX_TLB_R16(r13)
|
|
|
+ std r16,EX_TLB_R16(r12)
|
|
|
mfspr r16,\addr /* get faulting address */
|
|
|
- std r14,PACA_EXTLB+EX_TLB_R14(r13)
|
|
|
+ std r14,EX_TLB_R14(r12)
|
|
|
ld r14,PACAPGD(r13)
|
|
|
- std r15,PACA_EXTLB+EX_TLB_R15(r13)
|
|
|
- std r10,PACA_EXTLB+EX_TLB_CR(r13)
|
|
|
- TLB_MISS_PROLOG_STATS_BOLTED
|
|
|
+ std r15,EX_TLB_R15(r12)
|
|
|
+ std r10,EX_TLB_CR(r12)
|
|
|
+ TLB_MISS_PROLOG_STATS
|
|
|
.endm
|
|
|
|
|
|
.macro tlb_epilog_bolted
|
|
|
- ld r14,PACA_EXTLB+EX_TLB_CR(r13)
|
|
|
- ld r10,PACA_EXTLB+EX_TLB_R10(r13)
|
|
|
- ld r11,PACA_EXTLB+EX_TLB_R11(r13)
|
|
|
+ ld r14,EX_TLB_CR(r12)
|
|
|
+ ld r10,EX_TLB_R10(r12)
|
|
|
+ ld r11,EX_TLB_R11(r12)
|
|
|
+ ld r13,EX_TLB_R13(r12)
|
|
|
mtcr r14
|
|
|
- ld r14,PACA_EXTLB+EX_TLB_R14(r13)
|
|
|
- ld r15,PACA_EXTLB+EX_TLB_R15(r13)
|
|
|
- TLB_MISS_RESTORE_STATS_BOLTED
|
|
|
- ld r16,PACA_EXTLB+EX_TLB_R16(r13)
|
|
|
- mfspr r13,SPRN_SPRG_GEN_SCRATCH
|
|
|
+ ld r14,EX_TLB_R14(r12)
|
|
|
+ ld r15,EX_TLB_R15(r12)
|
|
|
+ TLB_MISS_RESTORE_STATS
|
|
|
+ ld r16,EX_TLB_R16(r12)
|
|
|
+ mfspr r12,SPRN_SPRG_GEN_SCRATCH
|
|
|
.endm
|
|
|
|
|
|
/* Data TLB miss */
|