Always use pmap_kremove() if removing a mapping from the kernel pmap.

This commit is contained in:
thorpej 1998-08-25 23:09:08 +00:00
parent 6ab705c01b
commit 7cfa6e0972
1 changed files with 28 additions and 3 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: pmap.c,v 1.67 1998/08/25 18:21:17 thorpej Exp $ */
/* $NetBSD: pmap.c,v 1.68 1998/08/25 23:09:08 thorpej Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@ -163,7 +163,7 @@
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.67 1998/08/25 18:21:17 thorpej Exp $");
__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.68 1998/08/25 23:09:08 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -432,6 +432,10 @@ boolean_t pmap_remove_mapping __P((pmap_t, vaddr_t, pt_entry_t *,
void pmap_changebit __P((paddr_t, pt_entry_t, pt_entry_t));
void pmap_pinit __P((pmap_t));
void pmap_release __P((pmap_t));
#ifndef PMAP_NEW
/* It's an interface function if PMAP_NEW. */
void pmap_kremove __P((vaddr_t, vsize_t));
#endif
/*
* PT page management functions.
@ -1221,6 +1225,20 @@ pmap_remove(pmap, sva, eva)
if (pmap == NULL)
return;
/*
* If this is the kernel pmap, use a faster routine that
* can make some assumptions.
*/
if (pmap == pmap_kernel()) {
pmap_kremove(sva, eva - sva);
return;
}
#ifdef DIAGNOSTIC
if (sva >= VM_MAXUSER_ADDRESS || eva >= VM_MAXUSER_ADDRESS)
panic("pmap_remove: user pmap, kernel address range");
#endif
PMAP_MAP_TO_HEAD_LOCK();
simple_lock(&pmap->pm_slock);
@ -1793,12 +1811,15 @@ pmap_kenter_pgs(va, pgs, npgs)
VM_PAGE_TO_PHYS(pgs[i]),
VM_PROT_READ|VM_PROT_WRITE);
}
#endif /* PMAP_NEW */
/*
* pmap_kremove: [ INTERFACE ]
*
* Remove a mapping entered with pmap_kenter_pa() or pmap_kenter_pgs()
* starting at va, for size bytes (assumed to be page rounded).
*
* NOTE: THIS IS AN INTERNAL FUNCTION IF NOT PMAP_NEW.
*/
void
pmap_kremove(va, size)
@ -1814,6 +1835,11 @@ pmap_kremove(va, size)
va, size);
#endif
#ifdef DIAGNOSTIC
if (va < VM_MIN_KERNEL_ADDRESS)
panic("pmap_kremove: user address");
#endif
PMAP_MAP_TO_HEAD_LOCK();
simple_lock(&pmap_kernel()->pm_slock);
@ -1830,7 +1856,6 @@ pmap_kremove(va, size)
simple_unlock(&pmap_kernel()->pm_slock);
PMAP_MAP_TO_HEAD_UNLOCK();
}
#endif /* PMAP_NEW */
/*
* pmap_change_wiring: [ INTERFACE ]