diff options
author | marcel <marcel@FreeBSD.org> | 2003-05-16 07:57:44 +0000 |
---|---|---|
committer | marcel <marcel@FreeBSD.org> | 2003-05-16 07:57:44 +0000 |
commit | 7658c8da7d7d2e9c9207edbad64b2d40206bab3f (patch) | |
tree | f391b5e5ae048c5091959defe57105f0031c92fa | |
parent | 98685b881472fb002a0509b6090a994365270c9e (diff) | |
download | FreeBSD-src-7658c8da7d7d2e9c9207edbad64b2d40206bab3f.zip FreeBSD-src-7658c8da7d7d2e9c9207edbad64b2d40206bab3f.tar.gz |
o In pmap_install, don't prevent switching the pmap if we're
switching to kernel_pmap. The pmap is not special enough.
o Clear the active bit on the pmap we're switching out.
o Fix some nearby style(9) bugs.
Approved by: re@
-rw-r--r-- | sys/ia64/ia64/pmap.c | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/sys/ia64/ia64/pmap.c b/sys/ia64/ia64/pmap.c index 2022c1a..dcb49b9 100644 --- a/sys/ia64/ia64/pmap.c +++ b/sys/ia64/ia64/pmap.c @@ -2557,39 +2557,37 @@ pmap_install(pmap_t pmap) critical_enter(); oldpmap = PCPU_GET(current_pmap); - - if (pmap == oldpmap || pmap == kernel_pmap) { + if (oldpmap == pmap) { critical_exit(); - return pmap; + return (oldpmap); } - if (oldpmap) { - atomic_clear_32(&pmap->pm_active, PCPU_GET(cpumask)); - } + if (oldpmap != NULL) + atomic_clear_32(&oldpmap->pm_active, PCPU_GET(cpumask)); PCPU_SET(current_pmap, pmap); - if (!pmap) { - /* - * RIDs 0..4 have no mappings to make sure we generate - * page faults on accesses. - */ + + if (pmap == NULL) { + /* Invalidate regions 0-4. */ ia64_set_rr(IA64_RR_BASE(0), (0 << 8)|(PAGE_SHIFT << 2)|1); ia64_set_rr(IA64_RR_BASE(1), (1 << 8)|(PAGE_SHIFT << 2)|1); ia64_set_rr(IA64_RR_BASE(2), (2 << 8)|(PAGE_SHIFT << 2)|1); ia64_set_rr(IA64_RR_BASE(3), (3 << 8)|(PAGE_SHIFT << 2)|1); ia64_set_rr(IA64_RR_BASE(4), (4 << 8)|(PAGE_SHIFT << 2)|1); critical_exit(); - return oldpmap; + return (oldpmap); } atomic_set_32(&pmap->pm_active, PCPU_GET(cpumask)); - for (i = 0; i < 5; i++) + for (i = 0; i < 5; i++) { ia64_set_rr(IA64_RR_BASE(i), - (pmap->pm_rid[i] << 8)|(PAGE_SHIFT << 2)|1); + (pmap->pm_rid[i] << 8)|(PAGE_SHIFT << 2)|1); + } critical_exit(); - return oldpmap; + + return (oldpmap); } vm_offset_t |