Deleted Added
full compact
vm_mmap.c (177253) vm_mmap.c (177458)
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 177253 2008-03-16 10:58:09Z rwatson $");
44__FBSDID("$FreeBSD: head/sys/vm/vm_mmap.c 177458 2008-03-20 16:08:42Z kib $");
45
46#include "opt_compat.h"
47#include "opt_hwpmc_hooks.h"
48#include "opt_mac.h"
49
50#include <sys/param.h>
51#include <sys/systm.h>
52#include <sys/kernel.h>

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

1155vm_mmap_vnode(struct thread *td, vm_size_t objsize,
1156 vm_prot_t prot, vm_prot_t *maxprotp, int *flagsp,
1157 struct vnode *vp, vm_ooffset_t foff, vm_object_t *objp)
1158{
1159 struct vattr va;
1160 void *handle;
1161 vm_object_t obj;
1162 struct mount *mp;
45
46#include "opt_compat.h"
47#include "opt_hwpmc_hooks.h"
48#include "opt_mac.h"
49
50#include <sys/param.h>
51#include <sys/systm.h>
52#include <sys/kernel.h>

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

1155vm_mmap_vnode(struct thread *td, vm_size_t objsize,
1156 vm_prot_t prot, vm_prot_t *maxprotp, int *flagsp,
1157 struct vnode *vp, vm_ooffset_t foff, vm_object_t *objp)
1158{
1159 struct vattr va;
1160 void *handle;
1161 vm_object_t obj;
1162 struct mount *mp;
1163 struct cdevsw *dsw;
1163 int error, flags, type;
1164 int vfslocked;
1165
1166 mp = vp->v_mount;
1167 vfslocked = VFS_LOCK_GIANT(mp);
1168 if ((error = vget(vp, LK_EXCLUSIVE, td)) != 0) {
1169 VFS_UNLOCK_GIANT(vfslocked);
1170 return (error);

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

1185 vget(vp, LK_EXCLUSIVE, td);
1186 }
1187 type = OBJT_VNODE;
1188 handle = vp;
1189 } else if (vp->v_type == VCHR) {
1190 type = OBJT_DEVICE;
1191 handle = vp->v_rdev;
1192
1164 int error, flags, type;
1165 int vfslocked;
1166
1167 mp = vp->v_mount;
1168 vfslocked = VFS_LOCK_GIANT(mp);
1169 if ((error = vget(vp, LK_EXCLUSIVE, td)) != 0) {
1170 VFS_UNLOCK_GIANT(vfslocked);
1171 return (error);

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

1186 vget(vp, LK_EXCLUSIVE, td);
1187 }
1188 type = OBJT_VNODE;
1189 handle = vp;
1190 } else if (vp->v_type == VCHR) {
1191 type = OBJT_DEVICE;
1192 handle = vp->v_rdev;
1193
1193 /* XXX: lack thredref on device */
1194 if(vp->v_rdev->si_devsw->d_flags & D_MMAP_ANON) {
1194 dsw = dev_refthread(handle);
1195 if (dsw == NULL) {
1196 error = ENXIO;
1197 goto done;
1198 }
1199 if (dsw->d_flags & D_MMAP_ANON) {
1200 dev_relthread(handle);
1195 *maxprotp = VM_PROT_ALL;
1196 *flagsp |= MAP_ANON;
1197 error = 0;
1198 goto done;
1199 }
1201 *maxprotp = VM_PROT_ALL;
1202 *flagsp |= MAP_ANON;
1203 error = 0;
1204 goto done;
1205 }
1206 dev_relthread(handle);
1200 /*
1201 * cdevs does not provide private mappings of any kind.
1202 */
1203 if ((*maxprotp & VM_PROT_WRITE) == 0 &&
1204 (prot & PROT_WRITE) != 0) {
1205 error = EACCES;
1206 goto done;
1207 }

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

1268 * operations on cdevs.
1269 */
1270int
1271vm_mmap_cdev(struct thread *td, vm_size_t objsize,
1272 vm_prot_t prot, vm_prot_t *maxprotp, int *flagsp,
1273 struct cdev *cdev, vm_ooffset_t foff, vm_object_t *objp)
1274{
1275 vm_object_t obj;
1207 /*
1208 * cdevs does not provide private mappings of any kind.
1209 */
1210 if ((*maxprotp & VM_PROT_WRITE) == 0 &&
1211 (prot & PROT_WRITE) != 0) {
1212 error = EACCES;
1213 goto done;
1214 }

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

1275 * operations on cdevs.
1276 */
1277int
1278vm_mmap_cdev(struct thread *td, vm_size_t objsize,
1279 vm_prot_t prot, vm_prot_t *maxprotp, int *flagsp,
1280 struct cdev *cdev, vm_ooffset_t foff, vm_object_t *objp)
1281{
1282 vm_object_t obj;
1283 struct cdevsw *dsw;
1276 int flags;
1277
1278 flags = *flagsp;
1279
1284 int flags;
1285
1286 flags = *flagsp;
1287
1280 /* XXX: lack thredref on device */
1281 if (cdev->si_devsw->d_flags & D_MMAP_ANON) {
1288 dsw = dev_refthread(cdev);
1289 if (dsw == NULL)
1290 return (ENXIO);
1291 if (dsw->d_flags & D_MMAP_ANON) {
1292 dev_relthread(cdev);
1282 *maxprotp = VM_PROT_ALL;
1283 *flagsp |= MAP_ANON;
1284 return (0);
1285 }
1293 *maxprotp = VM_PROT_ALL;
1294 *flagsp |= MAP_ANON;
1295 return (0);
1296 }
1297 dev_relthread(cdev);
1286 /*
1287 * cdevs does not provide private mappings of any kind.
1288 */
1289 if ((*maxprotp & VM_PROT_WRITE) == 0 &&
1290 (prot & PROT_WRITE) != 0)
1291 return (EACCES);
1292 if (flags & (MAP_PRIVATE|MAP_COPY))
1293 return (EINVAL);

--- 202 unchanged lines hidden ---
1298 /*
1299 * cdevs does not provide private mappings of any kind.
1300 */
1301 if ((*maxprotp & VM_PROT_WRITE) == 0 &&
1302 (prot & PROT_WRITE) != 0)
1303 return (EACCES);
1304 if (flags & (MAP_PRIVATE|MAP_COPY))
1305 return (EINVAL);

--- 202 unchanged lines hidden ---