Deleted Added
full compact
vm_mmap.c (151252) vm_mmap.c (157144)
1/*-
2 * Copyright (c) 1988 University of Utah.
3 * Copyright (c) 1991, 1993
4 * The Regents of the University of California. All rights reserved.
5 *
6 * This code is derived from software contributed to Berkeley by
7 * the Systems Programming Group of the University of Utah Computer
8 * Science Department.

--- 27 unchanged lines hidden (view full) ---

36 * @(#)vm_mmap.c 8.4 (Berkeley) 1/12/94
37 */
38
39/*
40 * Mapped file (mmap) interface to VM
41 */
42
43#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 1988 University of Utah.
3 * Copyright (c) 1991, 1993
4 * The Regents of the University of California. All rights reserved.
5 *
6 * This code is derived from software contributed to Berkeley by
7 * the Systems Programming Group of the University of Utah Computer
8 * Science Department.

--- 27 unchanged lines hidden (view full) ---

36 * @(#)vm_mmap.c 8.4 (Berkeley) 1/12/94
37 */
38
39/*
40 * Mapped file (mmap) interface to VM
41 */
42
43#include <sys/cdefs.h>
44__FBSDID("$FreeBSD: head/sys/vm/vm_mmap.c 151252 2005-10-12 06:56:00Z dds $");
44__FBSDID("$FreeBSD: head/sys/vm/vm_mmap.c 157144 2006-03-26 12:20:54Z jkoshy $");
45
46#include "opt_compat.h"
45
46#include "opt_compat.h"
47#include "opt_hwpmc_hooks.h"
47#include "opt_mac.h"
48
49#include <sys/param.h>
50#include <sys/systm.h>
51#include <sys/kernel.h>
52#include <sys/lock.h>
53#include <sys/mutex.h>
54#include <sys/sysproto.h>

--- 19 unchanged lines hidden (view full) ---

74#include <vm/vm_object.h>
75#include <vm/vm_page.h>
76#include <vm/vm_pager.h>
77#include <vm/vm_pageout.h>
78#include <vm/vm_extern.h>
79#include <vm/vm_page.h>
80#include <vm/vm_kern.h>
81
48#include "opt_mac.h"
49
50#include <sys/param.h>
51#include <sys/systm.h>
52#include <sys/kernel.h>
53#include <sys/lock.h>
54#include <sys/mutex.h>
55#include <sys/sysproto.h>

--- 19 unchanged lines hidden (view full) ---

75#include <vm/vm_object.h>
76#include <vm/vm_page.h>
77#include <vm/vm_pager.h>
78#include <vm/vm_pageout.h>
79#include <vm/vm_extern.h>
80#include <vm/vm_page.h>
81#include <vm/vm_kern.h>
82
83#ifdef HWPMC_HOOKS
84#include <sys/pmckern.h>
85#endif
86
82#ifndef _SYS_SYSPROTO_H_
83struct sbrk_args {
84 int incr;
85};
86#endif
87
88static int max_proc_mmap;
89SYSCTL_INT(_vm, OID_AUTO, max_proc_mmap, CTLFLAG_RW, &max_proc_mmap, 0, "");

--- 106 unchanged lines hidden (view full) ---

196/*
197 * MPSAFE
198 */
199int
200mmap(td, uap)
201 struct thread *td;
202 struct mmap_args *uap;
203{
87#ifndef _SYS_SYSPROTO_H_
88struct sbrk_args {
89 int incr;
90};
91#endif
92
93static int max_proc_mmap;
94SYSCTL_INT(_vm, OID_AUTO, max_proc_mmap, CTLFLAG_RW, &max_proc_mmap, 0, "");

--- 106 unchanged lines hidden (view full) ---

201/*
202 * MPSAFE
203 */
204int
205mmap(td, uap)
206 struct thread *td;
207 struct mmap_args *uap;
208{
209#ifdef HWPMC_HOOKS
210 struct pmckern_map_in pkm;
211#endif
204 struct file *fp;
205 struct vnode *vp;
206 vm_offset_t addr;
207 vm_size_t size, pageoff;
208 vm_prot_t prot, maxprot;
209 void *handle;
210 objtype_t handle_type;
211 int flags, error;

--- 147 unchanged lines hidden (view full) ---

359 if (max_proc_mmap &&
360 vms->vm_map.nentries >= max_proc_mmap * vms->vm_refcnt) {
361 error = ENOMEM;
362 goto done;
363 }
364
365 error = vm_mmap(&vms->vm_map, &addr, size, prot, maxprot,
366 flags, handle_type, handle, pos);
212 struct file *fp;
213 struct vnode *vp;
214 vm_offset_t addr;
215 vm_size_t size, pageoff;
216 vm_prot_t prot, maxprot;
217 void *handle;
218 objtype_t handle_type;
219 int flags, error;

--- 147 unchanged lines hidden (view full) ---

367 if (max_proc_mmap &&
368 vms->vm_map.nentries >= max_proc_mmap * vms->vm_refcnt) {
369 error = ENOMEM;
370 goto done;
371 }
372
373 error = vm_mmap(&vms->vm_map, &addr, size, prot, maxprot,
374 flags, handle_type, handle, pos);
375#ifdef HWPMC_HOOKS
376 /* inform hwpmc(4) if an executable is being mapped */
377 if (error == 0 && handle_type == OBJT_VNODE &&
378 (prot & PROT_EXEC)) {
379 pkm.pm_file = handle;
380 pkm.pm_address = (uintptr_t) addr;
381 PMC_CALL_HOOK(td, PMC_FN_MMAP, (void *) &pkm);
382 }
383#endif
367 if (error == 0)
368 td->td_retval[0] = (register_t) (addr + pageoff);
369done:
370 if (fp)
371 fdrop(fp, td);
372
373 return (error);
374}

--- 115 unchanged lines hidden (view full) ---

490/*
491 * MPSAFE
492 */
493int
494munmap(td, uap)
495 struct thread *td;
496 struct munmap_args *uap;
497{
384 if (error == 0)
385 td->td_retval[0] = (register_t) (addr + pageoff);
386done:
387 if (fp)
388 fdrop(fp, td);
389
390 return (error);
391}

--- 115 unchanged lines hidden (view full) ---

507/*
508 * MPSAFE
509 */
510int
511munmap(td, uap)
512 struct thread *td;
513 struct munmap_args *uap;
514{
515#ifdef HWPMC_HOOKS
516 struct pmckern_map_out pkm;
517 vm_map_entry_t entry;
518#endif
498 vm_offset_t addr;
499 vm_size_t size, pageoff;
500 vm_map_t map;
501
502 addr = (vm_offset_t) uap->addr;
503 size = uap->len;
504 if (size == 0)
505 return (EINVAL);

--- 14 unchanged lines hidden (view full) ---

520 vm_map_lock(map);
521 /*
522 * Make sure entire range is allocated.
523 */
524 if (!vm_map_check_protection(map, addr, addr + size, VM_PROT_NONE)) {
525 vm_map_unlock(map);
526 return (EINVAL);
527 }
519 vm_offset_t addr;
520 vm_size_t size, pageoff;
521 vm_map_t map;
522
523 addr = (vm_offset_t) uap->addr;
524 size = uap->len;
525 if (size == 0)
526 return (EINVAL);

--- 14 unchanged lines hidden (view full) ---

541 vm_map_lock(map);
542 /*
543 * Make sure entire range is allocated.
544 */
545 if (!vm_map_check_protection(map, addr, addr + size, VM_PROT_NONE)) {
546 vm_map_unlock(map);
547 return (EINVAL);
548 }
549#ifdef HWPMC_HOOKS
550 /*
551 * Inform hwpmc if the address range being unmapped contains
552 * an executable region.
553 */
554 if (vm_map_lookup_entry(map, addr, &entry)) {
555 for (;
556 entry != &map->header && entry->start < addr + size;
557 entry = entry->next) {
558 if (vm_map_check_protection(map, entry->start,
559 entry->end, VM_PROT_EXECUTE) == TRUE) {
560 pkm.pm_address = (uintptr_t) addr;
561 pkm.pm_size = (size_t) size;
562 PMC_CALL_HOOK(td, PMC_FN_MUNMAP,
563 (void *) &pkm);
564 break;
565 }
566 }
567 }
568#endif
528 /* returns nothing but KERN_SUCCESS anyway */
529 vm_map_delete(map, addr, addr + size);
530 vm_map_unlock(map);
531 return (0);
532}
533
534#ifndef _SYS_SYSPROTO_H_
535struct mprotect_args {

--- 837 unchanged lines hidden ---
569 /* returns nothing but KERN_SUCCESS anyway */
570 vm_map_delete(map, addr, addr + size);
571 vm_map_unlock(map);
572 return (0);
573}
574
575#ifndef _SYS_SYSPROTO_H_
576struct mprotect_args {

--- 837 unchanged lines hidden ---