Module Name: src Committed By: uwe Date: Tue Jun 9 02:38:27 UTC 2009
Modified Files: src/sys/arch/sh3/sh3: pmap.c Log Message: In pmap_protect(), compute the bitmask to set in the ptes only once, instead of every iteration. From OpenBSD. To generate a diff of this commit: cvs rdiff -u -r1.72 -r1.73 src/sys/arch/sh3/sh3/pmap.c 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/sh3/sh3/pmap.c diff -u src/sys/arch/sh3/sh3/pmap.c:1.72 src/sys/arch/sh3/sh3/pmap.c:1.73 --- src/sys/arch/sh3/sh3/pmap.c:1.72 Tue Apr 21 21:30:00 2009 +++ src/sys/arch/sh3/sh3/pmap.c Tue Jun 9 02:38:27 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.72 2009/04/21 21:30:00 cegger Exp $ */ +/* $NetBSD: pmap.c,v 1.73 2009/06/09 02:38:27 uwe Exp $ */ /*- * Copyright (c) 2002 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.72 2009/04/21 21:30:00 cegger Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.73 2009/06/09 02:38:27 uwe Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -649,7 +649,7 @@ pmap_protect(pmap_t pmap, vaddr_t sva, vaddr_t eva, vm_prot_t prot) { bool kernel = pmap == pmap_kernel(); - pt_entry_t *pte, entry; + pt_entry_t *pte, entry, protbits; vaddr_t va; sva = trunc_page(sva); @@ -659,6 +659,22 @@ return; } + switch (prot) { + default: + panic("pmap_protect: invalid protection mode %x", prot); + /* NOTREACHED */ + case VM_PROT_READ: + /* FALLTHROUGH */ + case VM_PROT_READ | VM_PROT_EXECUTE: + protbits = kernel ? PG_PR_KRO : PG_PR_URO; + break; + case VM_PROT_READ | VM_PROT_WRITE: + /* FALLTHROUGH */ + case VM_PROT_ALL: + protbits = kernel ? PG_PR_KRW : PG_PR_URW; + break; + } + for (va = sva; va < eva; va += PAGE_SIZE) { if (((pte = __pmap_pte_lookup(pmap, va)) == NULL) || @@ -672,22 +688,7 @@ sh_dcache_wbinv_range_index(va, PAGE_SIZE); } - entry &= ~PG_PR_MASK; - switch (prot) { - default: - panic("pmap_protect: invalid protection mode %x", prot); - /* NOTREACHED */ - case VM_PROT_READ: - /* FALLTHROUGH */ - case VM_PROT_READ | VM_PROT_EXECUTE: - entry |= kernel ? PG_PR_KRO : PG_PR_URO; - break; - case VM_PROT_READ | VM_PROT_WRITE: - /* FALLTHROUGH */ - case VM_PROT_ALL: - entry |= kernel ? PG_PR_KRW : PG_PR_URW; - break; - } + entry = (entry & ~PG_PR_MASK) | protbits; *pte = entry; if (pmap->pm_asid != -1)