summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2005-09-03 18:20:20 +0000
committeralc <alc@FreeBSD.org>2005-09-03 18:20:20 +0000
commit39788de49ed8c451980050349cf26ad80c4f6eb1 (patch)
tree15a723ce98510b7ad44411dc2c1fe9370aed91b1 /sys/vm
parentdcf881b1eb5cd7d4101ff068dead8b12f344a057 (diff)
downloadFreeBSD-src-39788de49ed8c451980050349cf26ad80c4f6eb1.zip
FreeBSD-src-39788de49ed8c451980050349cf26ad80c4f6eb1.tar.gz
Pass a value of type vm_prot_t to pmap_enter_quick() so that it determine
whether the mapping should permit execute access.
Diffstat (limited to 'sys/vm')
-rw-r--r--sys/vm/pmap.h2
-rw-r--r--sys/vm/vm_fault.c3
-rw-r--r--sys/vm/vm_map.c4
3 files changed, 5 insertions, 4 deletions
diff --git a/sys/vm/pmap.h b/sys/vm/pmap.h
index 4eb8f5a..d5b64c3 100644
--- a/sys/vm/pmap.h
+++ b/sys/vm/pmap.h
@@ -100,7 +100,7 @@ void pmap_copy_page(vm_page_t, vm_page_t);
void pmap_enter(pmap_t, vm_offset_t, vm_page_t, vm_prot_t,
boolean_t);
vm_page_t pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m,
- vm_page_t mpte);
+ vm_prot_t prot, vm_page_t mpte);
vm_paddr_t pmap_extract(pmap_t pmap, vm_offset_t va);
vm_page_t pmap_extract_and_hold(pmap_t pmap, vm_offset_t va,
vm_prot_t prot);
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c
index 57fbca0..2dc873a 100644
--- a/sys/vm/vm_fault.c
+++ b/sys/vm/vm_fault.c
@@ -1007,7 +1007,8 @@ vm_fault_prefault(pmap_t pmap, vm_offset_t addra, vm_map_entry_t entry)
vm_page_lock_queues();
if ((m->queue - m->pc) == PQ_CACHE)
vm_page_deactivate(m);
- mpte = pmap_enter_quick(pmap, addr, m, mpte);
+ mpte = pmap_enter_quick(pmap, addr, m,
+ entry->protection, mpte);
vm_page_unlock_queues();
}
VM_OBJECT_UNLOCK(lobject);
diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c
index 519163b..c162c50 100644
--- a/sys/vm/vm_map.c
+++ b/sys/vm/vm_map.c
@@ -1375,7 +1375,7 @@ vm_map_pmap_enter(vm_map_t map, vm_offset_t addr, vm_prot_t prot,
vm_page_t p, mpte;
boolean_t are_queues_locked;
- if ((prot & VM_PROT_READ) == 0 || object == NULL)
+ if ((prot & (VM_PROT_READ | VM_PROT_EXECUTE)) == 0 || object == NULL)
return;
VM_OBJECT_LOCK(object);
if (object->type == OBJT_DEVICE) {
@@ -1433,7 +1433,7 @@ vm_map_pmap_enter(vm_map_t map, vm_offset_t addr, vm_prot_t prot,
if ((p->queue - p->pc) == PQ_CACHE)
vm_page_deactivate(p);
mpte = pmap_enter_quick(map->pmap,
- addr + ptoa(tmpidx), p, mpte);
+ addr + ptoa(tmpidx), p, prot, mpte);
}
}
if (are_queues_locked)
OpenPOWER on IntegriCloud