From owner-p4-projects@FreeBSD.ORG Fri Feb 16 00:34:38 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id DE6D216A409; Fri, 16 Feb 2007 00:34:37 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 9BF6F16A402 for ; Fri, 16 Feb 2007 00:34:37 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id 9084013C4B9 for ; Fri, 16 Feb 2007 00:34:37 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id l1G0YbWU029824 for ; Fri, 16 Feb 2007 00:34:37 GMT (envelope-from gonzo@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id l1G0YbA5029821 for perforce@freebsd.org; Fri, 16 Feb 2007 00:34:37 GMT (envelope-from gonzo@FreeBSD.org) Date: Fri, 16 Feb 2007 00:34:37 GMT Message-Id: <200702160034.l1G0YbA5029821@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to gonzo@FreeBSD.org using -f From: Oleksandr Tymoshenko To: Perforce Change Reviews Cc: Subject: PERFORCE change 114603 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 16 Feb 2007 00:34:38 -0000 http://perforce.freebsd.org/chv.cgi?CH=114603 Change 114603 by gonzo@gonzo_jeeves on 2007/02/16 00:34:11 o Prevent pmap_remove_pte on invalid pte. This happened when there was no segtab for proviede va. Affected files ... .. //depot/projects/mips2/src/sys/mips/mips/pmap.c#20 edit Differences ... ==== //depot/projects/mips2/src/sys/mips/mips/pmap.c#20 (text+ko) ==== @@ -228,6 +228,13 @@ if (va < MIPS_KSEG0_START) { pte = pmap_segmap(pmap, va); + /* + * If there is no segtab for this va return NULL + * to indicate absence of mapping instead of broken + * pte address. + */ + if(pte == NULL) + return NULL; pte += (va >> PAGE_SHIFT) & (NPTEPG - 1); } else pte = tlb_kern_pte_find(kptmap, va); @@ -1017,8 +1024,12 @@ va = sva; while (count--) { pte = pmap_pte(pmap, va); - pmap_remove_pte(pmap, pte, va); - tlb_remove(pmap, va); + /* NULL means there is no segtab for this area */ + if(pte != NULL) + { + pmap_remove_pte(pmap, pte, va); + tlb_remove(pmap, va); + } va += PAGE_SIZE; }