summaryrefslogtreecommitdiffstats
path: root/sys/ia64
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2010-04-29 15:47:31 +0000
committeralc <alc@FreeBSD.org>2010-04-29 15:47:31 +0000
commitdf2257e061f55c35d76f33f91541c65c33f7a2a7 (patch)
tree3bc3eb69048a61f232f804a52e008180280b53da /sys/ia64
parentdb164aeb155dac81c7d06bc5e1780b7dadebde0b (diff)
downloadFreeBSD-src-df2257e061f55c35d76f33f91541c65c33f7a2a7.zip
FreeBSD-src-df2257e061f55c35d76f33f91541c65c33f7a2a7.tar.gz
MFamd64/i386 r207205
Clearing a page table entry's accessed bit and setting the page's PG_REFERENCED flag in pmap_protect() can't really be justified, so don't do it. Moreover, on ia64, don't set the page's dirty field unless pmap_protect() is removing write access.
Diffstat (limited to 'sys/ia64')
-rw-r--r--sys/ia64/ia64/pmap.c16
1 files changed, 5 insertions, 11 deletions
diff --git a/sys/ia64/ia64/pmap.c b/sys/ia64/ia64/pmap.c
index a7c47ef..91b2e07 100644
--- a/sys/ia64/ia64/pmap.c
+++ b/sys/ia64/ia64/pmap.c
@@ -1450,19 +1450,13 @@ pmap_protect(pmap_t pmap, vm_offset_t sva, vm_offset_t eva, vm_prot_t prot)
if (pmap_prot(pte) == prot)
continue;
- if (pmap_managed(pte)) {
- vm_offset_t pa = pmap_ppn(pte);
+ if ((prot & VM_PROT_WRITE) == 0 &&
+ pmap_managed(pte) && pmap_dirty(pte)) {
+ vm_paddr_t pa = pmap_ppn(pte);
vm_page_t m = PHYS_TO_VM_PAGE(pa);
- if (pmap_dirty(pte)) {
- vm_page_dirty(m);
- pmap_clear_dirty(pte);
- }
-
- if (pmap_accessed(pte)) {
- vm_page_flag_set(m, PG_REFERENCED);
- pmap_clear_accessed(pte);
- }
+ vm_page_dirty(m);
+ pmap_clear_dirty(pte);
}
if (prot & VM_PROT_EXECUTE)
OpenPOWER on IntegriCloud