vm_mmap.c (281776) | vm_mmap.c (284665) |
---|---|
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: stable/10/sys/vm/vm_mmap.c 281776 2015-04-20 17:36:43Z alc $"); | 44__FBSDID("$FreeBSD: stable/10/sys/vm/vm_mmap.c 284665 2015-06-21 06:28:26Z trasz $"); |
45 46#include "opt_compat.h" 47#include "opt_hwpmc_hooks.h" 48 49#include <sys/param.h> 50#include <sys/systm.h> 51#include <sys/capsicum.h> 52#include <sys/kernel.h> --- 1037 unchanged lines hidden (view full) --- 1090 if (nsize > lim_cur(proc, RLIMIT_MEMLOCK)) { 1091 PROC_UNLOCK(proc); 1092 return (ENOMEM); 1093 } 1094 PROC_UNLOCK(proc); 1095 if (npages + cnt.v_wire_count > vm_page_max_wired) 1096 return (EAGAIN); 1097#ifdef RACCT | 45 46#include "opt_compat.h" 47#include "opt_hwpmc_hooks.h" 48 49#include <sys/param.h> 50#include <sys/systm.h> 51#include <sys/capsicum.h> 52#include <sys/kernel.h> --- 1037 unchanged lines hidden (view full) --- 1090 if (nsize > lim_cur(proc, RLIMIT_MEMLOCK)) { 1091 PROC_UNLOCK(proc); 1092 return (ENOMEM); 1093 } 1094 PROC_UNLOCK(proc); 1095 if (npages + cnt.v_wire_count > vm_page_max_wired) 1096 return (EAGAIN); 1097#ifdef RACCT |
1098 PROC_LOCK(proc); 1099 error = racct_set(proc, RACCT_MEMLOCK, nsize); 1100 PROC_UNLOCK(proc); 1101 if (error != 0) 1102 return (ENOMEM); | 1098 if (racct_enable) { 1099 PROC_LOCK(proc); 1100 error = racct_set(proc, RACCT_MEMLOCK, nsize); 1101 PROC_UNLOCK(proc); 1102 if (error != 0) 1103 return (ENOMEM); 1104 } |
1103#endif 1104 error = vm_map_wire(map, start, end, 1105 VM_MAP_WIRE_USER | VM_MAP_WIRE_NOHOLES); 1106#ifdef RACCT | 1105#endif 1106 error = vm_map_wire(map, start, end, 1107 VM_MAP_WIRE_USER | VM_MAP_WIRE_NOHOLES); 1108#ifdef RACCT |
1107 if (error != KERN_SUCCESS) { | 1109 if (racct_enable && error != KERN_SUCCESS) { |
1108 PROC_LOCK(proc); 1109 racct_set(proc, RACCT_MEMLOCK, 1110 ptoa(pmap_wired_count(map->pmap))); 1111 PROC_UNLOCK(proc); 1112 } 1113#endif 1114 return (error == KERN_SUCCESS ? 0 : ENOMEM); 1115} --- 31 unchanged lines hidden (view full) --- 1147 PROC_LOCK(td->td_proc); 1148 if (map->size > lim_cur(td->td_proc, RLIMIT_MEMLOCK)) { 1149 PROC_UNLOCK(td->td_proc); 1150 return (ENOMEM); 1151 } 1152 PROC_UNLOCK(td->td_proc); 1153 } 1154#ifdef RACCT | 1110 PROC_LOCK(proc); 1111 racct_set(proc, RACCT_MEMLOCK, 1112 ptoa(pmap_wired_count(map->pmap))); 1113 PROC_UNLOCK(proc); 1114 } 1115#endif 1116 return (error == KERN_SUCCESS ? 0 : ENOMEM); 1117} --- 31 unchanged lines hidden (view full) --- 1149 PROC_LOCK(td->td_proc); 1150 if (map->size > lim_cur(td->td_proc, RLIMIT_MEMLOCK)) { 1151 PROC_UNLOCK(td->td_proc); 1152 return (ENOMEM); 1153 } 1154 PROC_UNLOCK(td->td_proc); 1155 } 1156#ifdef RACCT |
1155 PROC_LOCK(td->td_proc); 1156 error = racct_set(td->td_proc, RACCT_MEMLOCK, map->size); 1157 PROC_UNLOCK(td->td_proc); 1158 if (error != 0) 1159 return (ENOMEM); | 1157 if (racct_enable) { 1158 PROC_LOCK(td->td_proc); 1159 error = racct_set(td->td_proc, RACCT_MEMLOCK, map->size); 1160 PROC_UNLOCK(td->td_proc); 1161 if (error != 0) 1162 return (ENOMEM); 1163 } |
1160#endif 1161 1162 if (uap->how & MCL_FUTURE) { 1163 vm_map_lock(map); 1164 vm_map_modflags(map, MAP_WIREFUTURE, 0); 1165 vm_map_unlock(map); 1166 error = 0; 1167 } --- 5 unchanged lines hidden (view full) --- 1173 * from mlockall(). vm_map_wire() will wire pages, by 1174 * calling vm_fault_wire() for each page in the region. 1175 */ 1176 error = vm_map_wire(map, vm_map_min(map), vm_map_max(map), 1177 VM_MAP_WIRE_USER|VM_MAP_WIRE_HOLESOK); 1178 error = (error == KERN_SUCCESS ? 0 : EAGAIN); 1179 } 1180#ifdef RACCT | 1164#endif 1165 1166 if (uap->how & MCL_FUTURE) { 1167 vm_map_lock(map); 1168 vm_map_modflags(map, MAP_WIREFUTURE, 0); 1169 vm_map_unlock(map); 1170 error = 0; 1171 } --- 5 unchanged lines hidden (view full) --- 1177 * from mlockall(). vm_map_wire() will wire pages, by 1178 * calling vm_fault_wire() for each page in the region. 1179 */ 1180 error = vm_map_wire(map, vm_map_min(map), vm_map_max(map), 1181 VM_MAP_WIRE_USER|VM_MAP_WIRE_HOLESOK); 1182 error = (error == KERN_SUCCESS ? 0 : EAGAIN); 1183 } 1184#ifdef RACCT |
1181 if (error != KERN_SUCCESS) { | 1185 if (racct_enable && error != KERN_SUCCESS) { |
1182 PROC_LOCK(td->td_proc); 1183 racct_set(td->td_proc, RACCT_MEMLOCK, 1184 ptoa(pmap_wired_count(map->pmap))); 1185 PROC_UNLOCK(td->td_proc); 1186 } 1187#endif 1188 1189 return (error); --- 25 unchanged lines hidden (view full) --- 1215 vm_map_lock(map); 1216 vm_map_modflags(map, 0, MAP_WIREFUTURE); 1217 vm_map_unlock(map); 1218 1219 /* Forcibly unwire all pages. */ 1220 error = vm_map_unwire(map, vm_map_min(map), vm_map_max(map), 1221 VM_MAP_WIRE_USER|VM_MAP_WIRE_HOLESOK); 1222#ifdef RACCT | 1186 PROC_LOCK(td->td_proc); 1187 racct_set(td->td_proc, RACCT_MEMLOCK, 1188 ptoa(pmap_wired_count(map->pmap))); 1189 PROC_UNLOCK(td->td_proc); 1190 } 1191#endif 1192 1193 return (error); --- 25 unchanged lines hidden (view full) --- 1219 vm_map_lock(map); 1220 vm_map_modflags(map, 0, MAP_WIREFUTURE); 1221 vm_map_unlock(map); 1222 1223 /* Forcibly unwire all pages. */ 1224 error = vm_map_unwire(map, vm_map_min(map), vm_map_max(map), 1225 VM_MAP_WIRE_USER|VM_MAP_WIRE_HOLESOK); 1226#ifdef RACCT |
1223 if (error == KERN_SUCCESS) { | 1227 if (racct_enable && error == KERN_SUCCESS) { |
1224 PROC_LOCK(td->td_proc); 1225 racct_set(td->td_proc, RACCT_MEMLOCK, 0); 1226 PROC_UNLOCK(td->td_proc); 1227 } 1228#endif 1229 1230 return (error); 1231} --- 27 unchanged lines hidden (view full) --- 1259 last = addr + size; 1260 start = trunc_page(addr); 1261 end = round_page(last); 1262 if (last < addr || end < addr) 1263 return (EINVAL); 1264 error = vm_map_unwire(&td->td_proc->p_vmspace->vm_map, start, end, 1265 VM_MAP_WIRE_USER | VM_MAP_WIRE_NOHOLES); 1266#ifdef RACCT | 1228 PROC_LOCK(td->td_proc); 1229 racct_set(td->td_proc, RACCT_MEMLOCK, 0); 1230 PROC_UNLOCK(td->td_proc); 1231 } 1232#endif 1233 1234 return (error); 1235} --- 27 unchanged lines hidden (view full) --- 1263 last = addr + size; 1264 start = trunc_page(addr); 1265 end = round_page(last); 1266 if (last < addr || end < addr) 1267 return (EINVAL); 1268 error = vm_map_unwire(&td->td_proc->p_vmspace->vm_map, start, end, 1269 VM_MAP_WIRE_USER | VM_MAP_WIRE_NOHOLES); 1270#ifdef RACCT |
1267 if (error == KERN_SUCCESS) { | 1271 if (racct_enable && error == KERN_SUCCESS) { |
1268 PROC_LOCK(td->td_proc); 1269 map = &td->td_proc->p_vmspace->vm_map; 1270 racct_set(td->td_proc, RACCT_MEMLOCK, 1271 ptoa(pmap_wired_count(map->pmap))); 1272 PROC_UNLOCK(td->td_proc); 1273 } 1274#endif 1275 return (error == KERN_SUCCESS ? 0 : ENOMEM); --- 421 unchanged lines hidden --- | 1272 PROC_LOCK(td->td_proc); 1273 map = &td->td_proc->p_vmspace->vm_map; 1274 racct_set(td->td_proc, RACCT_MEMLOCK, 1275 ptoa(pmap_wired_count(map->pmap))); 1276 PROC_UNLOCK(td->td_proc); 1277 } 1278#endif 1279 return (error == KERN_SUCCESS ? 0 : ENOMEM); --- 421 unchanged lines hidden --- |