Date: Tue, 28 Nov 2006 15:31:47 GMT From: Oleksandr Tymoshenko <gonzo@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 110621 for review Message-ID: <200611281531.kASFVlMx008254@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=110621 Change 110621 by gonzo@gonzo_hq on 2006/11/28 15:31:06 o Use top of md_realstack area as kernelland stack pointer o Check for user mode in TLBMiss vector to jump to proper generic exception. Affected files ... .. //depot/projects/mips2/src/sys/mips/mips/exception.S#15 edit Differences ... ==== //depot/projects/mips2/src/sys/mips/mips/exception.S#15 (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/mips2/src/sys/mips/mips/exception.S#14 $ + * $P4: //depot/projects/mips2/src/sys/mips/mips/exception.S#15 $ */ /* $NetBSD: mipsX_subr.S,v 1.19 2005/12/11 12:18:09 christos Exp $ */ @@ -268,6 +268,21 @@ 1: .asciiz "ExceptionHandlerTable" .text + +/* + * This label should be right before GenericException to fall through + * the KSU_USER check + */ +slowfault: + .set noat + mfc0 k0, MIPS_COP_0_STATUS + nop + and k0, k0, MIPS_SR_KSU_USER + bne k0, zero, _C_LABEL(UserGenericException) + nop + /* fall through to GenericEception */ + .set at + LEAF(GenericException) .set noat @@ -437,7 +452,7 @@ eret tlbnotfound: - break + break ## TODO: change to panic call eret VEND(TLBInvalidVector) .data @@ -464,9 +479,9 @@ lw k1, 0(k1) mfc0 k0, MIPS_COP_0_BAD_VADDR # k0=bad address (again) + nop beq k1, zero, 7f # ==0 -- no page table srl k0, 10 # k0=VPN (aka va>>10) - nop andi k0, k0, 0xff8 # k0=page tab offset addu k1, k1, k0 # k1=pte address @@ -485,7 +500,9 @@ 5: j KVATLBMiss nop -7: j UserGenericException +7: + /* Use one jump instead of full check to reduce vector code size */ + j slowfault nop VEND(TLBMissVector) @@ -576,7 +593,6 @@ 1: .asciiz "64-bit TLB Miss Vector" .text - LEAF(VCED) .set noat la k0, panic @@ -612,7 +628,7 @@ .mask 0x80000000, -4 lw k1, pcpup lw k1, PC_CURTHREAD(k1) - lw k1, TD_MD_REALSTACK(k1) # load wired region + lw k1, TD_FRAME(k1) # load td_frame in wired region la k0, 1f j exception_save_registers nop @@ -678,7 +694,7 @@ .mask 0x80000000, -4 lw k1, pcpup lw k1, PC_CURTHREAD(k1) - lw k1, TD_MD_REALSTACK(k1) # load wired region + lw k1, TD_FRAME(k1) # load wired region la k0, 1f j exception_save_registers nop
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200611281531.kASFVlMx008254>