Deleted Added
full compact
vm_mmap.c (84783) vm_mmap.c (89306)
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.

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

33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 * SUCH DAMAGE.
37 *
38 * from: Utah $Hdr: vm_mmap.c 1.6 91/10/21$
39 *
40 * @(#)vm_mmap.c 8.4 (Berkeley) 1/12/94
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.

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

33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 * SUCH DAMAGE.
37 *
38 * from: Utah $Hdr: vm_mmap.c 1.6 91/10/21$
39 *
40 * @(#)vm_mmap.c 8.4 (Berkeley) 1/12/94
41 * $FreeBSD: head/sys/vm/vm_mmap.c 84783 2001-10-10 23:06:54Z ps $
41 * $FreeBSD: head/sys/vm/vm_mmap.c 89306 2002-01-13 11:58:06Z alfred $
42 */
43
44/*
45 * Mapped file (mmap) interface to VM
46 */
47
48#include "opt_bleed.h"
49#include "opt_compat.h"

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

194/*
195 * MPSAFE
196 */
197int
198mmap(td, uap)
199 struct thread *td;
200 struct mmap_args *uap;
201{
42 */
43
44/*
45 * Mapped file (mmap) interface to VM
46 */
47
48#include "opt_bleed.h"
49#include "opt_compat.h"

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

194/*
195 * MPSAFE
196 */
197int
198mmap(td, uap)
199 struct thread *td;
200 struct mmap_args *uap;
201{
202 struct filedesc *fdp = td->td_proc->p_fd;
203 struct file *fp = NULL;
204 struct vnode *vp;
205 vm_offset_t addr;
206 vm_size_t size, pageoff;
207 vm_prot_t prot, maxprot;
208 void *handle;
209 int flags, error;
210 int disablexworkaround;
211 off_t pos;
212 struct vmspace *vms = td->td_proc->p_vmspace;
213 vm_object_t obj;
214
215 addr = (vm_offset_t) uap->addr;
216 size = uap->len;
217 prot = uap->prot & VM_PROT_ALL;
218 flags = uap->flags;
219 pos = uap->pos;
220
202 struct file *fp = NULL;
203 struct vnode *vp;
204 vm_offset_t addr;
205 vm_size_t size, pageoff;
206 vm_prot_t prot, maxprot;
207 void *handle;
208 int flags, error;
209 int disablexworkaround;
210 off_t pos;
211 struct vmspace *vms = td->td_proc->p_vmspace;
212 vm_object_t obj;
213
214 addr = (vm_offset_t) uap->addr;
215 size = uap->len;
216 prot = uap->prot & VM_PROT_ALL;
217 flags = uap->flags;
218 pos = uap->pos;
219
220 fp = NULL;
221 /* make sure mapping fits into numeric range etc */
222 if ((ssize_t) uap->len < 0 ||
223 ((flags & MAP_ANON) && uap->fd != -1))
224 return (EINVAL);
225
226 if (flags & MAP_STACK) {
227 if ((uap->fd != -1) ||
228 ((prot & (PROT_READ | PROT_WRITE)) != (PROT_READ | PROT_WRITE)))

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

285 */
286 handle = NULL;
287 maxprot = VM_PROT_ALL;
288 pos = 0;
289 } else {
290 /*
291 * Mapping file, get fp for validation. Obtain vnode and make
292 * sure it is of appropriate type.
221 /* make sure mapping fits into numeric range etc */
222 if ((ssize_t) uap->len < 0 ||
223 ((flags & MAP_ANON) && uap->fd != -1))
224 return (EINVAL);
225
226 if (flags & MAP_STACK) {
227 if ((uap->fd != -1) ||
228 ((prot & (PROT_READ | PROT_WRITE)) != (PROT_READ | PROT_WRITE)))

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

285 */
286 handle = NULL;
287 maxprot = VM_PROT_ALL;
288 pos = 0;
289 } else {
290 /*
291 * Mapping file, get fp for validation. Obtain vnode and make
292 * sure it is of appropriate type.
293 * don't let the descriptor disappear on us if we block
293 */
294 */
294 if (((unsigned) uap->fd) >= fdp->fd_nfiles ||
295 (fp = fdp->fd_ofiles[uap->fd]) == NULL) {
295 fp = ffind_hold(td, uap->fd);
296 if (fp == NULL) {
296 error = EBADF;
297 error = EBADF;
297 goto done2;
298 goto done;
298 }
299 if (fp->f_type != DTYPE_VNODE) {
300 error = EINVAL;
299 }
300 if (fp->f_type != DTYPE_VNODE) {
301 error = EINVAL;
301 goto done2;
302 goto done;
302 }
303
304 /*
303 }
304
305 /*
305 * don't let the descriptor disappear on us if we block
306 */
307 fhold(fp);
308
309 /*
310 * POSIX shared-memory objects are defined to have
311 * kernel persistence, and are not defined to support
312 * read(2)/write(2) -- or even open(2). Thus, we can
313 * use MAP_ASYNC to trade on-disk coherence for speed.
314 * The shm_open(3) library routine turns on the FPOSIXSHM
315 * flag to request this behavior.
316 */
317 if (fp->f_flag & FPOSIXSHM)

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

432 error = vm_mmap(&vms->vm_map, &addr, size, prot, maxprot,
433 flags, handle, pos);
434 if (error == 0)
435 td->td_retval[0] = (register_t) (addr + pageoff);
436 mtx_lock(&Giant);
437done:
438 if (fp)
439 fdrop(fp, td);
306 * POSIX shared-memory objects are defined to have
307 * kernel persistence, and are not defined to support
308 * read(2)/write(2) -- or even open(2). Thus, we can
309 * use MAP_ASYNC to trade on-disk coherence for speed.
310 * The shm_open(3) library routine turns on the FPOSIXSHM
311 * flag to request this behavior.
312 */
313 if (fp->f_flag & FPOSIXSHM)

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

428 error = vm_mmap(&vms->vm_map, &addr, size, prot, maxprot,
429 flags, handle, pos);
430 if (error == 0)
431 td->td_retval[0] = (register_t) (addr + pageoff);
432 mtx_lock(&Giant);
433done:
434 if (fp)
435 fdrop(fp, td);
440done2:
441 mtx_unlock(&Giant);
442 return (error);
443}
444
445#ifdef COMPAT_43
446#ifndef _SYS_SYSPROTO_H_
447struct ommap_args {
448 caddr_t addr;

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

637void
638munmapfd(td, fd)
639 struct thread *td;
640 int fd;
641{
642 /*
643 * XXX should unmap any regions mapped to this file
644 */
436 mtx_unlock(&Giant);
437 return (error);
438}
439
440#ifdef COMPAT_43
441#ifndef _SYS_SYSPROTO_H_
442struct ommap_args {
443 caddr_t addr;

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

632void
633munmapfd(td, fd)
634 struct thread *td;
635 int fd;
636{
637 /*
638 * XXX should unmap any regions mapped to this file
639 */
640 FILEDESC_LOCK(p->p_fd);
645 td->td_proc->p_fd->fd_ofileflags[fd] &= ~UF_MAPPED;
641 td->td_proc->p_fd->fd_ofileflags[fd] &= ~UF_MAPPED;
642 FILEDESC_UNLOCK(p->p_fd);
646}
647#endif
648
649#ifndef _SYS_SYSPROTO_H_
650struct mprotect_args {
651 const void *addr;
652 size_t len;
653 int prot;

--- 631 unchanged lines hidden ---
643}
644#endif
645
646#ifndef _SYS_SYSPROTO_H_
647struct mprotect_args {
648 const void *addr;
649 size_t len;
650 int prot;

--- 631 unchanged lines hidden ---