Module Name: src Committed By: matt Date: Wed Apr 6 05:13:36 UTC 2011
Modified Files: src/sys/arch/mips/mips: mipsX_subr.S Log Message: Rename kernel_tlb_miss to kern_tlb_miss (everything else kern_xxx) Don't load k1 in delay slot to MIPS_CURLWP before branching to kern_gen_exception since that doesn't use the lwp pointer in k1 (since it can the lwp in MIPS_CURLWP instead). Use nop instead. Rework tlb_invalid_exception a bit so the result of the tlbp is done before seeing if the tlb slot was even or odd. Makes the routine slightly smaller. To generate a diff of this commit: cvs rdiff -u -r1.41 -r1.42 src/sys/arch/mips/mips/mipsX_subr.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/mips/mips/mipsX_subr.S diff -u src/sys/arch/mips/mips/mipsX_subr.S:1.41 src/sys/arch/mips/mips/mipsX_subr.S:1.42 --- src/sys/arch/mips/mips/mipsX_subr.S:1.41 Tue Mar 15 07:39:22 2011 +++ src/sys/arch/mips/mips/mipsX_subr.S Wed Apr 6 05:13:36 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: mipsX_subr.S,v 1.41 2011/03/15 07:39:22 matt Exp $ */ +/* $NetBSD: mipsX_subr.S,v 1.42 2011/04/06 05:13:36 matt Exp $ */ /* * Copyright 2002 Wasabi Systems, Inc. @@ -480,7 +480,7 @@ #endif .p2align 4 MIPSX(kernelfault): - j _C_LABEL(MIPSX(kernel_tlb_miss)) #10: kernel exception + j _C_LABEL(MIPSX(kern_tlb_miss)) #10: kernel exception nop #11: branch delay slot nop nop @@ -1486,7 +1486,7 @@ /*---------------------------------------------------------------------------- * - * mipsN_kernel_tlb_miss -- + * mipsN_kern_tlb_miss -- * * Handle a TLB miss exception from kernel mode in kernel space. * The BaddVAddr, Context, and EntryHi registers contain the failed @@ -1500,7 +1500,7 @@ * *---------------------------------------------------------------------------- */ -LEAF_NOPROFILE(MIPSX(kernel_tlb_miss)) +LEAF_NOPROFILE(MIPSX(kern_tlb_miss)) .set noat _MFC0 k0, MIPS_COP_0_BAD_VADDR # get the fault address #if VM_MIN_KERNEL_ADDRESS == MIPS_KSEG2_START @@ -1525,7 +1525,7 @@ * If we are beyond the bounds of Sysmap, let trap panic for us. */ beqz k1, _C_LABEL(MIPSX(kern_gen_exception)) # full trap processing - move k1, MIPS_CURLWP # - delay slot - + nop # - delay slot - #endif PTR_L k1, _C_LABEL(Sysmap) PTR_SRL k0, 1 @@ -1549,7 +1549,7 @@ #endif eret .set at -END(MIPSX(kernel_tlb_miss)) +END(MIPSX(kern_tlb_miss)) /*---------------------------------------------------------------------------- * @@ -1585,27 +1585,33 @@ dsll32 k1, k1, 0 #endif bgez k0, _C_LABEL(MIPSX(kern_gen_exception)) # full trap processing - move k1, MIPS_CURLWP + nop PTR_SUBU k0, k1 INT_L k1, _C_LABEL(Sysmapsize) # index within range? PTR_SRL k0, PGSHIFT sltu k1, k0, k1 beqz k1, _C_LABEL(MIPSX(kern_gen_exception)) # No. Failing beyond... - move k1, MIPS_CURLWP # - delay slot - + nop # - delay slot - PTR_L k1, _C_LABEL(Sysmap) PTR_SLL k0, 2 # compute offset from index PTR_ADDU k1, k0 tlbp # Probe the invalid entry COP0_SYNC - and k0, 4 # check even/odd page - nop # required for QED 5230 - bnez k0, MIPSX(kern_tlbi_odd) - nop mfc0 k0, MIPS_COP_0_TLB_INDEX +#ifdef MIPS3 nop +#endif bltz k0, _C_LABEL(MIPSX(kern_gen_exception)) # ASSERT(TLB entry exists) - move k1, MIPS_CURLWP + nop + + and k0, k1, 4 # check even/odd page +#ifdef MIPS3 + nop # required for QED 5230 +#endif + bnez k0, MIPSX(kern_tlbi_odd) + nop + INT_L k0, 0(k1) # get PTE entry _SLL k0, k0, WIRED_SHIFT # get rid of "wired" bit @@ -1617,7 +1623,7 @@ nop # required for QED5230 #endif beqz k0, _C_LABEL(MIPSX(kern_gen_exception)) # PTE invalid - move k1, MIPS_CURLWP + nop INT_L k0, 4(k1) # get odd PTE entry _SLL k0, k0, WIRED_SHIFT mfc0 k1, MIPS_COP_0_TLB_INDEX @@ -1639,10 +1645,6 @@ eret MIPSX(kern_tlbi_odd): - mfc0 k0, MIPS_COP_0_TLB_INDEX - nop - bltz k0, _C_LABEL(MIPSX(kern_gen_exception)) # assert(TLB Entry exists) - move k1, MIPS_CURLWP INT_L k0, 0(k1) # get PTE entry _SLL k0, k0, WIRED_SHIFT # get rid of wired bit @@ -1650,9 +1652,11 @@ _MTC0 k0, MIPS_COP_0_TLB_LO1 # save PTE entry COP0_SYNC and k0, k0, MIPS3_PG_V # check for valid entry +#ifdef MIPS3 nop # required for QED5230 +#endif beqz k0, _C_LABEL(MIPSX(kern_gen_exception)) # PTE invalid - move k1, MIPS_CURLWP + nop INT_L k0, -4(k1) # get even PTE entry _SLL k0, k0, WIRED_SHIFT mfc0 k1, MIPS_COP_0_TLB_INDEX