patch-2.4.22 linux-2.4.22/arch/mips64/mm/tlbex-r4k.S

Next file: linux-2.4.22/arch/mips64/mm/umap.c
Previous file: linux-2.4.22/arch/mips64/mm/tlb-sb1.c
Back to the patch index
Back to the overall index

diff -urN linux-2.4.21/arch/mips64/mm/tlbex-r4k.S linux-2.4.22/arch/mips64/mm/tlbex-r4k.S
@@ -15,6 +15,7 @@
 #include <asm/mipsregs.h>
 #include <asm/pgtable.h>
 #include <asm/stackframe.h>
+#include <asm/war.h>
 
 	.data
 	.comm	pgd_current, NR_CPUS * 8, 8
@@ -72,8 +73,9 @@
 	 * Determine that fault address is within vmalloc range.
 	 */
 	dla	\tmp, ekptbl
-	sltu	\tmp, \ptr, \tmp
+	slt	\tmp, \ptr, \tmp
 	beqz	\tmp, \not_vmalloc		# not vmalloc
+	 nop
 	.endm
 
 
@@ -96,16 +98,16 @@
 	__INIT
 
 	.align	5
-LEAF(except_vec0)
+LEAF(except_vec0_generic)
 	.set	noat
 	PANIC("Unused vector called")
 1:	b	1b
 	 nop
-END(except_vec0)
+END(except_vec0_generic)
 
 
 	/*
-	 * TLB refill handler for the R4000.
+	 * TLB refill handlers for the R4000 and SB1.
 	 * Attention:  We may only use 32 instructions / 128 bytes.
 	 */
 	.align  5
@@ -116,6 +118,23 @@
 	 nop
 END(except_vec1_r4k)
 
+LEAF(except_vec1_sb1)
+#if BCM1250_M3_WAR
+	dmfc0	k0, CP0_BADVADDR
+	dmfc0	k1, CP0_ENTRYHI
+	xor	k0, k1
+	dsrl	k0, k0, PAGE_SHIFT+1
+	bnez	k0, 1f
+#endif
+	.set    noat
+	dla     k0, handle_vec1_r4k
+	jr      k0
+	 nop
+
+1:	eret
+	nop
+END(except_vec1_sb1)
+
 	__FINIT
 
 	.align  5
@@ -141,6 +160,7 @@
 	eret
 END(handle_vec1_r4k)
 
+
 	__INIT
 
 	/*

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)