From 39788de49ed8c451980050349cf26ad80c4f6eb1 Mon Sep 17 00:00:00 2001 From: alc Date: Sat, 3 Sep 2005 18:20:20 +0000 Subject: Pass a value of type vm_prot_t to pmap_enter_quick() so that it determine whether the mapping should permit execute access. --- sys/vm/pmap.h | 2 +- sys/vm/vm_fault.c | 3 ++- sys/vm/vm_map.c | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) (limited to 'sys/vm') 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) -- cgit v1.1