diff options
author | alc <alc@FreeBSD.org> | 2005-09-03 18:20:20 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2005-09-03 18:20:20 +0000 |
commit | 39788de49ed8c451980050349cf26ad80c4f6eb1 (patch) | |
tree | 15a723ce98510b7ad44411dc2c1fe9370aed91b1 /sys/vm | |
parent | dcf881b1eb5cd7d4101ff068dead8b12f344a057 (diff) | |
download | FreeBSD-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.h | 2 | ||||
-rw-r--r-- | sys/vm/vm_fault.c | 3 | ||||
-rw-r--r-- | sys/vm/vm_map.c | 4 |
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) |