summaryrefslogtreecommitdiffstats
path: root/sys/kern/imgact_elf.c
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>1999-05-17 00:53:56 +0000
committeralc <alc@FreeBSD.org>1999-05-17 00:53:56 +0000
commit936a55303324f390417668b877ccabddca5cc384 (patch)
tree710bb6c848d0b2fdbb018a2b9eeaac6b17679b33 /sys/kern/imgact_elf.c
parent1762400fc86f27481374190b1694040c5e805fcc (diff)
downloadFreeBSD-src-936a55303324f390417668b877ccabddca5cc384.zip
FreeBSD-src-936a55303324f390417668b877ccabddca5cc384.tar.gz
Add the options MAP_PREFAULT and MAP_PREFAULT_PARTIAL to vm_map_find/insert,
eliminating the need for the pmap_object_init_pt calls in imgact_* and mmap. Reviewed by: David Greenman <dg@root.com>
Diffstat (limited to 'sys/kern/imgact_elf.c')
-rw-r--r--sys/kern/imgact_elf.c17
1 files changed, 3 insertions, 14 deletions
diff --git a/sys/kern/imgact_elf.c b/sys/kern/imgact_elf.c
index 2934b94..e3cceb3 100644
--- a/sys/kern/imgact_elf.c
+++ b/sys/kern/imgact_elf.c
@@ -26,7 +26,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: imgact_elf.c,v 1.56 1999/05/09 16:04:08 peter Exp $
+ * $Id: imgact_elf.c,v 1.57 1999/05/14 23:09:00 alc Exp $
*/
#include "opt_rlimit.h"
@@ -220,19 +220,11 @@ elf_load_section(struct proc *p, struct vmspace *vmspace, struct vnode *vp, vm_o
map_addr + map_len,/* virtual end */
prot,
VM_PROT_ALL,
- MAP_COPY_ON_WRITE);
+ MAP_COPY_ON_WRITE | MAP_PREFAULT);
vm_map_unlock(&vmspace->vm_map);
if (rv != KERN_SUCCESS)
return EINVAL;
- /* prefault the page tables */
- pmap_object_init_pt(vmspace_pmap(vmspace),
- map_addr,
- object,
- (vm_pindex_t) OFF_TO_IDX(file_addr),
- map_len,
- 0);
-
/* we can stop now if we've covered it all */
if (memsz == filsz)
return 0;
@@ -270,14 +262,11 @@ elf_load_section(struct proc *p, struct vmspace *vmspace, struct vnode *vp, vm_o
TRUE,
VM_PROT_READ,
VM_PROT_ALL,
- MAP_COPY_ON_WRITE);
+ MAP_COPY_ON_WRITE | MAP_PREFAULT_PARTIAL);
if (rv != KERN_SUCCESS) {
vm_object_deallocate(object);
return EINVAL;
}
- pmap_object_init_pt(exec_map->pmap, data_buf, object,
- (vm_pindex_t) OFF_TO_IDX(trunc_page(offset + filsz)),
- PAGE_SIZE, 1);
/* send the page fragment to user space */
error = copyout((caddr_t)data_buf, (caddr_t)map_addr, copy_len);
OpenPOWER on IntegriCloud