diff options
author | alc <alc@FreeBSD.org> | 2006-08-01 19:06:06 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2006-08-01 19:06:06 +0000 |
commit | a152234cf9a52766984ecb9a96cc1e5740ae9d78 (patch) | |
tree | 7cf5203513490cb91de50813dfb5015b4f873256 /sys/vm | |
parent | a2e0f77d8f100b139a19a4fc8ecece7356b6afdc (diff) | |
download | FreeBSD-src-a152234cf9a52766984ecb9a96cc1e5740ae9d78.zip FreeBSD-src-a152234cf9a52766984ecb9a96cc1e5740ae9d78.tar.gz |
Complete the transition from pmap_page_protect() to pmap_remove_write().
Originally, I had adopted sparc64's name, pmap_clear_write(), for the
function that is now pmap_remove_write(). However, this function is more
like pmap_remove_all() than like pmap_clear_modify() or
pmap_clear_reference(), hence, the name change.
The higher-level rationale behind this change is described in
src/sys/amd64/amd64/pmap.c revision 1.567. The short version is that I'm
trying to clean up and fix our support for execute access.
Reviewed by: marcel@ (ia64)
Diffstat (limited to 'sys/vm')
-rw-r--r-- | sys/vm/pmap.h | 3 | ||||
-rw-r--r-- | sys/vm/vm_object.c | 6 | ||||
-rw-r--r-- | sys/vm/vm_page.c | 2 | ||||
-rw-r--r-- | sys/vm/vm_pageout.c | 2 |
4 files changed, 6 insertions, 7 deletions
diff --git a/sys/vm/pmap.h b/sys/vm/pmap.h index 8c1f9a3..44c6a82 100644 --- a/sys/vm/pmap.h +++ b/sys/vm/pmap.h @@ -93,7 +93,6 @@ extern vm_offset_t kernel_vm_end; void pmap_change_wiring(pmap_t, vm_offset_t, boolean_t); void pmap_clear_modify(vm_page_t m); void pmap_clear_reference(vm_page_t m); -void pmap_clear_write(vm_page_t m); void pmap_copy(pmap_t, pmap_t, vm_offset_t, vm_size_t, vm_offset_t); void pmap_copy_page(vm_page_t, vm_page_t); void pmap_enter(pmap_t, vm_offset_t, vm_page_t, vm_prot_t, @@ -115,7 +114,6 @@ void pmap_object_init_pt(pmap_t pmap, vm_offset_t addr, vm_object_t object, vm_pindex_t pindex, vm_size_t size); boolean_t pmap_page_exists_quick(pmap_t pmap, vm_page_t m); void pmap_page_init(vm_page_t m); -void pmap_page_protect(vm_page_t m, vm_prot_t prot); void pmap_pinit(pmap_t); void pmap_pinit0(pmap_t); void pmap_protect(pmap_t, vm_offset_t, vm_offset_t, vm_prot_t); @@ -125,6 +123,7 @@ void pmap_release(pmap_t); void pmap_remove(pmap_t, vm_offset_t, vm_offset_t); void pmap_remove_all(vm_page_t m); void pmap_remove_pages(pmap_t); +void pmap_remove_write(vm_page_t m); void pmap_zero_page(vm_page_t); void pmap_zero_page_area(vm_page_t, int off, int size); void pmap_zero_page_idle(vm_page_t); diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index 4f6696e..20cb80d 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -808,7 +808,7 @@ vm_object_page_clean(vm_object_t object, vm_pindex_t start, vm_pindex_t end, int if ((flags & OBJPC_NOSYNC) && (p->flags & PG_NOSYNC)) clearobjflags = 0; else - pmap_page_protect(p, VM_PROT_READ); + pmap_remove_write(p); } if (clearobjflags && (tstart == 0) && (tend == object->size)) { @@ -977,7 +977,7 @@ vm_object_page_collect_flush(vm_object_t object, vm_page_t p, int curgeneration, vm_pageout_flush(ma, runlen, pagerflags); for (i = 0; i < runlen; i++) { if (ma[i]->valid & ma[i]->dirty) { - pmap_page_protect(ma[i], VM_PROT_READ); + pmap_remove_write(ma[i]); vm_page_flag_set(ma[i], PG_CLEANCHK); /* @@ -1829,7 +1829,7 @@ again: if (vm_page_sleep_if_busy(p, TRUE, "vmopar")) goto again; if (clean_only && p->valid) { - pmap_page_protect(p, VM_PROT_READ | VM_PROT_EXECUTE); + pmap_remove_write(p); if (p->valid & p->dirty) continue; } diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index b36b1fa..af77ada 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -1786,7 +1786,7 @@ vm_page_cowsetup(vm_page_t m) mtx_assert(&vm_page_queue_mtx, MA_OWNED); m->cow++; - pmap_page_protect(m, VM_PROT_READ); + pmap_remove_write(m); } #include "opt_ddb.h" diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c index e7611d2..115777d 100644 --- a/sys/vm/vm_pageout.c +++ b/sys/vm/vm_pageout.c @@ -431,7 +431,7 @@ vm_pageout_flush(vm_page_t *mc, int count, int flags) ("vm_pageout_flush: partially invalid page %p index %d/%d", mc[i], i, count)); vm_page_io_start(mc[i]); - pmap_page_protect(mc[i], VM_PROT_READ); + pmap_remove_write(mc[i]); } vm_page_unlock_queues(); vm_object_pip_add(object, count); |