Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 20 Mar 2004 21:25:12 -0800 (PST)
From:      Juli Mallett <jmallett@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 49437 for review
Message-ID:  <200403210525.i2L5PCnw071510@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=49437

Change 49437 by jmallett@jmallett_oingo on 2004/03/20 21:24:34

	Handle misses/reloads with the same body of code.  This means
	the common case (miss, not reload) takes an extra branch...  Ha.

Affected files ...

.. //depot/projects/mips/sys/mips/mips/exception.S#26 edit

Differences ...

==== //depot/projects/mips/sys/mips/mips/exception.S#26 (text+ko) ====

@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $P4: //depot/projects/mips/sys/mips/mips/exception.S#25 $
+ * $P4: //depot/projects/mips/sys/mips/mips/exception.S#26 $
  */
 
 #include "opt_ddb.h"
@@ -49,8 +49,8 @@
 ExceptionHandlerTable:
 	.dword	GenericException	/* Int */
 	.dword	GenericException	/* TLBMod */
-	.dword	XTLBReload		/* TLBL */
-	.dword	XTLBReload		/* TLBS */
+	.dword	XTLBMissVector		/* TLBL */
+	.dword	XTLBMissVector		/* TLBS */
 	.dword	GenericException	/* AdEL */
 	.dword	GenericException	/* AdES */
 	.dword	GenericException	/* IBE */
@@ -184,26 +184,8 @@
 /*
  * XXX kernel only.  For now that makes sense.
  */
-LEAF(XTLBReload)
+LEAF(XTLBMissVector)
 	.set noat
-	tlbp
-	nop
-	mfc0	k0, MIPS_COP_0_TLB_INDEX
-	nop
-	blezl	k0, 1f
-	nop
-	/* We have an index, it's a reload.  XXX Copying from XTLBMiss
-	 * because I can't make that tlbwi, unless I pick a random
-	 * Index for it, and somehow that doesn't feel good.  XXX2 Note
-	 * that TLBS is just a degenerate case of Mod, it's where the
-	 * mapping needs set up into the TLB, as well, cause it was
-	 * created after the other entry in the TLB, and is invalid
-	 * in the TLB.  It actually could go through the Mod code and
-	 * work fine, but I'd rather take two exceptions.  The other
-	 * side of this argument is that tlb_enter should update the
-	 * TLB.  This is possibly true, but I like lazy loading, since
-	 * we have to reload a lot in theory, anyway.
-	 */
 	dmfc0	k0, MIPS_COP_0_BAD_VADDR
 	dli	k1, MIPS_XKSEG_START
 	tltu	k0, k1
@@ -232,47 +214,16 @@
 	dmtc0	k0, MIPS_COP_0_TLB_LO0
 	dmtc0	k1, MIPS_COP_0_TLB_LO1
 	nop
+
+	tlbp
+	mfc0	k0, MIPS_COP_0_TLB_INDEX
+	nop
+	bltz	k0, 1f
+	nop
+
 	tlbwi
 	eret
-	/* Not in TLB, it's a miss. */
-1:	j	XTLBMissVector
-	nop
-	.set at
-END(XTLBReload)
-
-/*
- * XXX kernel only.  For now that makes sense.
- */
-LEAF(XTLBMissVector)
-	.set noat
-	dmfc0	k0, MIPS_COP_0_BAD_VADDR
-	dli	k1, MIPS_XKSEG_START
-	tltu	k0, k1
-	dsubu	k0, k1
-	/*
-	 * Shift right logical to get a page index, but leaving
-	 * enough bits to index an array of 64 bit values, plus
-	 * align for the even/odd TLB stuff.
-	 */
-	dsrl	k0, PAGE_SHIFT + 1
-	dsll	k0, 3 + 1
-	dla	k1, kptmap
-	/*
-	 * Find the page table, and index it.
-	 */
-	ld	k1, 0(k1)
-	addu	k1, k0
-	/*
-	 * Write the pair.
-	 */
-	ld	k0, 0(k1)	/* Even PTE. */
-	ld	k1, 8(k1)	/* Odd PTE. */
-	/*
-	 * Write TLB entry.
-	 */
-	dmtc0	k0, MIPS_COP_0_TLB_LO0
-	dmtc0	k1, MIPS_COP_0_TLB_LO1
-	nop
+1:
 	tlbwr
 	eret
 	.set at



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200403210525.i2L5PCnw071510>