summaryrefslogtreecommitdiffstats
path: root/sys/alpha
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2002-11-18 01:36:09 +0000
committeralc <alc@FreeBSD.org>2002-11-18 01:36:09 +0000
commit8ebcb8237164e4662037f02b98cc426e8367ceec (patch)
treea9ab6f95276a519036c2b2557d990734da0f030b /sys/alpha
parentb80f7ad39fcd5c6c37fa3a736bcc054736ce666b (diff)
downloadFreeBSD-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.c6
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);
}
OpenPOWER on IntegriCloud