powerpc/booke64: Use SPRG_TLB_EXFRAME on bolted handlers
While bolted handlers (including e6500) do not need to deal with a TLB miss recursively causing another TLB miss, nested TLB misses can still happen with crit/mc/debug exceptions -- so we still need to honor SPRG_TLB_EXFRAME. We don't need to spend time modifying it in the TLB miss fastpath, though -- the special level exception will handle that. Signed-off-by: Scott Wood <scottwood@freescale.com> Cc: Mihai Caraman <mihai.caraman@freescale.com> Cc: kvm-ppc@vger.kernel.org
This commit is contained in:
@@ -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 */
|
||||
|
Reference in New Issue
Block a user