summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2006-08-01 19:06:06 +0000
committeralc <alc@FreeBSD.org>2006-08-01 19:06:06 +0000
commita152234cf9a52766984ecb9a96cc1e5740ae9d78 (patch)
tree7cf5203513490cb91de50813dfb5015b4f873256 /sys/vm
parenta2e0f77d8f100b139a19a4fc8ecece7356b6afdc (diff)
downloadFreeBSD-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.h3
-rw-r--r--sys/vm/vm_object.c6
-rw-r--r--sys/vm/vm_page.c2
-rw-r--r--sys/vm/vm_pageout.c2
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);
OpenPOWER on IntegriCloud