diff options
author | kib <kib@FreeBSD.org> | 2015-04-04 07:52:12 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2015-04-04 07:52:12 +0000 |
commit | 7b4777f74a1a6efdf7f9c0bdcd791ead01ac3617 (patch) | |
tree | 243d4e0329932b9bab7b9224a182c65c5eedb02f /sys/kern/sysv_shm.c | |
parent | 44dfc90bcd426f5f12c49e21eace0fe5d1edd2f0 (diff) | |
download | FreeBSD-src-7b4777f74a1a6efdf7f9c0bdcd791ead01ac3617.zip FreeBSD-src-7b4777f74a1a6efdf7f9c0bdcd791ead01ac3617.tar.gz |
MFC r258056 (by alc):
Eliminate the gratuitous use of mmap(2) flags from the implementation
of kern_shmat(). Use a simpler approach to determine whether to pass
VMFS_NO_SPACE or VMFS_OPTIMAL_SPACE to vm_map_find().
Diffstat (limited to 'sys/kern/sysv_shm.c')
-rw-r--r-- | sys/kern/sysv_shm.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/sys/kern/sysv_shm.c b/sys/kern/sysv_shm.c index 1cb823f..096a4f3 100644 --- a/sys/kern/sysv_shm.c +++ b/sys/kern/sysv_shm.c @@ -342,7 +342,7 @@ kern_shmat(td, shmid, shmaddr, shmflg) int shmflg; { struct proc *p = td->td_proc; - int i, flags; + int i; struct shmid_kernel *shmseg; struct shmmap_state *shmmap_s = NULL; vm_offset_t attach_va; @@ -402,9 +402,7 @@ kern_shmat(td, shmid, shmaddr, shmflg) prot = VM_PROT_READ; if ((shmflg & SHM_RDONLY) == 0) prot |= VM_PROT_WRITE; - flags = MAP_ANON | MAP_SHARED; if (shmaddr) { - flags |= MAP_FIXED; if (shmflg & SHM_RND) { attach_va = (vm_offset_t)shmaddr & ~(SHMLBA-1); } else if (((vm_offset_t)shmaddr & (SHMLBA-1)) == 0) { @@ -426,7 +424,7 @@ kern_shmat(td, shmid, shmaddr, shmflg) vm_object_reference(shmseg->object); rv = vm_map_find(&p->p_vmspace->vm_map, shmseg->object, - 0, &attach_va, size, 0, (flags & MAP_FIXED) ? VMFS_NO_SPACE : + 0, &attach_va, size, 0, shmaddr != NULL ? VMFS_NO_SPACE : VMFS_OPTIMAL_SPACE, prot, prot, MAP_INHERIT_SHARE); if (rv != KERN_SUCCESS) { vm_object_deallocate(shmseg->object); |