diff options
author | alc <alc@FreeBSD.org> | 2002-11-18 01:36:09 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2002-11-18 01:36:09 +0000 |
commit | 8ebcb8237164e4662037f02b98cc426e8367ceec (patch) | |
tree | a9ab6f95276a519036c2b2557d990734da0f030b /sys/alpha | |
parent | b80f7ad39fcd5c6c37fa3a736bcc054736ce666b (diff) | |
download | FreeBSD-src-8ebcb8237164e4662037f02b98cc426e8367ceec.zip FreeBSD-src-8ebcb8237164e4662037f02b98cc426e8367ceec.tar.gz |
MFi386 r1.369
- Clear the PG_WRITEABLE flag in pmap_changebit() if write access is
being removed. Return immediately if write access is being removed and
PG_WRITEABLE is already clear.
Note: For efficiency, pmap_changebit() should be replaced by a function
similar to sparc64's pmap_clear_write().
Diffstat (limited to 'sys/alpha')
-rw-r--r-- | sys/alpha/alpha/pmap.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/alpha/alpha/pmap.c b/sys/alpha/alpha/pmap.c index 24d6a0a..5da92e53 100644 --- a/sys/alpha/alpha/pmap.c +++ b/sys/alpha/alpha/pmap.c @@ -2734,7 +2734,9 @@ pmap_changebit(vm_page_t m, int bit, boolean_t setem) int changed; int s; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) + if (!pmap_initialized || (m->flags & PG_FICTITIOUS) || + (!setem && bit == (PG_UWE|PG_KWE) && + (m->flags & PG_WRITEABLE) == 0)) return; s = splvm(); @@ -2776,6 +2778,8 @@ pmap_changebit(vm_page_t m, int bit, boolean_t setem) if (changed) pmap_invalidate_page(pv->pv_pmap, pv->pv_va); } + if (!setem && bit == (PG_UWE|PG_KWE)) + vm_page_flag_clear(m, PG_WRITEABLE); splx(s); } |