Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 Oct 2006 14:44:07 GMT
From:      Oleksandr Tymoshenko <gonzo@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 107824 for review
Message-ID:  <200610131444.k9DEi74J035961@repoman.freebsd.org>

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

Change 107824 by gonzo@gonzo_hq on 2006/10/13 14:43:46

	o Tweak exception handlers to conform new pmap model. Kernel map 
	    works fine, userland still in action.

Affected files ...

.. //depot/projects/mips2/src/sys/mips/mips/exception.S#11 edit

Differences ...

==== //depot/projects/mips2/src/sys/mips/mips/exception.S#11 (text+ko) ====

@@ -23,9 +23,128 @@
  * 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#10 $
+ * $P4: //depot/projects/mips2/src/sys/mips/mips/exception.S#11 $
+ */
+
+/*	$NetBSD: mipsX_subr.S,v 1.19 2005/12/11 12:18:09 christos Exp $	*/
+
+/*
+ * Copyright 2002 Wasabi Systems, Inc.
+ * All rights reserved.
+ *
+ * Written by Simon Burge for Wasabi Systems, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed for the NetBSD Project by
+ *	Wasabi Systems, Inc.
+ * 4. The name of Wasabi Systems, Inc. may not be used to endorse
+ *    or promote products derived from this software without specific prior
+ *    written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Copyright (c) 1997 Jonathan Stone (hereinafter referred to as the author)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *      This product includes software developed by Jonathan R. Stone for
+ *      the NetBSD Project.
+ * 4. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Digital Equipment Corporation and Ralph Campbell.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * Copyright (C) 1989 Digital Equipment Corporation.
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appears in all copies.
+ * Digital Equipment Corporation makes no representations about the
+ * suitability of this software for any purpose.  It is provided "as is"
+ * without express or implied warranty.
+ *
+ * from: Header: /sprite/src/kernel/mach/ds3100.md/RCS/loMem.s,
+ *	v 1.1 89/07/11 17:55:04 nelson Exp  SPRITE (DECWRL)
+ * from: Header: /sprite/src/kernel/mach/ds3100.md/RCS/machAsm.s,
+ *	v 9.2 90/01/29 18:00:39 shirriff Exp  SPRITE (DECWRL)
+ * from: Header: /sprite/src/kernel/vm/ds3100.md/vmPmaxAsm.s,
+ *	v 1.1 89/07/10 14:27:41 nelson Exp  SPRITE (DECWRL)
+ *
+ *	@(#)locore.s	8.5 (Berkeley) 1/4/94
  */
 
+
 #include "opt_ddb.h"
 
 #include <machine/asm.h>
@@ -201,38 +320,31 @@
 LEAF(TLBMissVector)
 	.set noat
 
-	mfc0	k0, MIPS_COP_0_BAD_VADDR
+	mfc0	k0, MIPS_COP_0_BAD_VADDR	# k0=badaddr
+	bltz	k0, 5f				# k0<0 -> 5f (kernel fault)
 	nop
-	bltz	k0, 5f
-	nop
 
+6:
 	/* Userland */
-6:
-	/* XXX We should switch stack elsewhere. */
-	subu	sp, sp, TF_SIZE
-	lw	k1, PC_CURTHREAD(t2)
-	lw	k1, TD_KSTACK(k1)
-	subu	k1, k1, TF_SIZE
+	lui	k1, %hi(segtab_active)	
+	lw	k1, %lo(segtab_active)(k1)
+	srl	k0, 20
+	andi	k0, k0, 0xffc
+	addu	k1, k0, k1
+	lw	k1, 0(k1)
 
-	la	k0, 4f
-	j	exception_save_registers
-	nop
+	mfc0	k0, MIPS_COP_0_BAD_VADDR        # k0=bad address (again)
+	beq	k1, zero, 7f                    # ==0 -- no page table
+	srl	k0, 10                          # k0=VPN (aka va>>10)
 
-	move	sp, k1
-
-4:	mfc0    a1, MIPS_COP_0_CAUSE
-	mfc0    a2, MIPS_COP_0_BAD_VADDR
-	jal     trap
-	move	a0, k1
+	break					# XXX: Not ready yet
 
-	move	k1, sp
-	jal	exception_restore_registers
-	nop
-
-	addu	sp, sp, TF_SIZE
 	eret
 5:
-	j	kernfault
+	j	KVATLBMiss
+	nop
+7:	j	GenericException
+	nop
 
 VEND(TLBMissVector)
 	.data
@@ -240,7 +352,8 @@
 	.text
 
 
-kernfault:
+LEAF(KVATLBMiss)
+	.set noat
 	/*
 	 * Shift right logical to get a page index, but leaving
 	 * enough bits to index an array of 64 bit values, plus
@@ -281,32 +394,17 @@
 
 	tlbp
 
-	mfc0	k1, MIPS_COP_0_BAD_VADDR
-	srl	k1, PAGE_SHIFT
-	andi	k1, k1, 1
-	bne	k1, zero, 2f
+	mfc0    k0, MIPS_COP_0_TLB_INDEX
+	nop
+	bltz    k0, 2f
 	nop
 
-	mfc0	k1, MIPS_COP_0_TLB_LO0
-	b	3f
-	nop
+	tlbwi
+	eret
 2:
-	mfc0	k1, MIPS_COP_0_TLB_LO1
-	nop
-3:	
-	andi	k1, 2
-	bne	k1, zero, 4f
-	nop
-	/*
-	 * The PTE that triggered the fault is not valid. We need to do a
-	 * "real" page fault.
-	 *
-	 * XXX Maybe we should just ignore the fact that it's not valid here
-	 * and just let the TLB Invalid Exception (vector 0x80000180) handler
-	 * deal with it.
-	 */
-	j	6b
-	nop
+	tlbwr
+	eret
+
 
 4:
 	mfc0	k0, MIPS_COP_0_TLB_INDEX
@@ -322,6 +420,7 @@
 
 	eret
 	.set at
+END(KVATLBMiss)
 
 
 LEAF(XTLBMissVector)



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