diff options
author | alc <alc@FreeBSD.org> | 2010-04-29 15:47:31 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2010-04-29 15:47:31 +0000 |
commit | df2257e061f55c35d76f33f91541c65c33f7a2a7 (patch) | |
tree | 3bc3eb69048a61f232f804a52e008180280b53da /sys/ia64 | |
parent | db164aeb155dac81c7d06bc5e1780b7dadebde0b (diff) | |
download | FreeBSD-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.c | 16 |
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) |