Module Name: src
Committed By: matt
Date: Thu Aug 19 07:21:37 UTC 2010
Modified Files:
src/sys/arch/mips/mips [matt-nb5-mips64]: mipsX_subr.S
Log Message:
in the xtlb miss handler, make sure the user address is below
VM_MAXUSER_ADDRESS
To generate a diff of this commit:
cvs rdiff -u -r1.26.36.1.2.33 -r1.26.36.1.2.34 \
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.26.36.1.2.33 src/sys/arch/mips/mips/mipsX_subr.S:1.26.36.1.2.34
--- src/sys/arch/mips/mips/mipsX_subr.S:1.26.36.1.2.33 Mon Aug 16 18:01:13 2010
+++ src/sys/arch/mips/mips/mipsX_subr.S Thu Aug 19 07:21:37 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: mipsX_subr.S,v 1.26.36.1.2.33 2010/08/16 18:01:13 matt Exp $ */
+/* $NetBSD: mipsX_subr.S,v 1.26.36.1.2.34 2010/08/19 07:21:37 matt Exp $ */
/*
* Copyright 2002 Wasabi Systems, Inc.
@@ -411,25 +411,28 @@
.set noat
dmfc0 k0, MIPS_COP_0_BAD_VADDR #00: k0=bad address
#ifdef _LP64
- lui k1, %hi(CPUVAR(PMAP_SEGTAB)) #01: k1=hi of segtab
- bltz k0, MIPSX(kernelfault) #02: k0<0 -> 4f (kernel fault)
- PTR_SRL k0, 2*(PGSHIFT-PTR_SCALESHIFT)+(PGSHIFT-2) #03: k0=seg offset (almost)
- andi k0, NBPG-(1<<PTR_SCALESHIFT) #04: k0=seg offset (mask 0x3)
- PTR_L k1, %lo(CPUVAR(PMAP_SEGTAB))(k1)#05: k1=segment tab
- PTR_ADDU k1, k0 #06: k1=seg entry address
- PTR_L k1, 0(k1) #07: k1=seg entry
+ nop #01: nop
+ bltz k0, MIPSX(kernelfault) #02: k0<0 -> kernel fault
+ PTR_SRL k1,k0,2*(PGSHIFT-PTR_SCALESHIFT)+(PGSHIFT-2)+PGSHIFT #03: clear valid bits
+ bnez k1, MIPSX(nopagetable) #04: not legal address
+ PTR_SRL k0, 2*(PGSHIFT-PTR_SCALESHIFT)+(PGSHIFT-2) #05: k0=seg offset (almost)
+ lui k1, %hi(CPUVAR(PMAP_SEGTAB)) #06: k1=hi of segtab
+ andi k0, NBPG-(1<<PTR_SCALESHIFT) #07: k0=seg offset (mask 0x3)
+ PTR_L k1, %lo(CPUVAR(PMAP_SEGTAB))(k1)#08: k1=segment tab
+ PTR_ADDU k1, k0 #09: k1=seg entry address
+ PTR_L k1, 0(k1) #0a: k1=seg entry
#else
- lui k1, %hi(CPUVAR(PMAP_SEG0TAB)) #01: k1=hi of segbase
- bltz k0, MIPSX(kernelfault) #02: k0<0 -> 4f (kernel fault)
+ lui k1, %hi(CPUVAR(PMAP_SEG0TAB)) #01: k1=hi of seg0tab
+ bltz k0, MIPSX(kernelfault) #02: k0<0 -> kernel fault
dsrl k0, 31 #03: clear low 31 bits
bnez k0, MIPSX(nopagetable) #04: not legal address
nop
PTR_L k1, %lo(CPUVAR(PMAP_SEG0TAB))(k1)#05: k1=segment tab base
#endif /* _LP64 */
- dmfc0 k0, MIPS_COP_0_BAD_VADDR #08: k0=bad address (again)
- PTR_SRL k0, 1*(PGSHIFT-PTR_SCALESHIFT)+(PGSHIFT-2) #09: k0=seg offset (almost)
- b MIPSX(tlb_miss_common) #0a
- nop
+ dmfc0 k0, MIPS_COP_0_BAD_VADDR #0b: k0=bad address (again)
+ nop #0c
+ b MIPSX(tlb_miss_common) #0d
+ PTR_SRL k0, 1*(PGSHIFT-PTR_SCALESHIFT)+(PGSHIFT-2) #0e: k0=seg offset (almost)
.set at
_VECTOR_END(MIPSX(xtlb_miss))
#else