Lines 128-137
__FBSDID("$FreeBSD$");
Link Here
|
128 |
static struct mtx map_sleep_mtx; |
128 |
static struct mtx map_sleep_mtx; |
129 |
static uma_zone_t mapentzone; |
129 |
static uma_zone_t mapentzone; |
130 |
static uma_zone_t kmapentzone; |
130 |
static uma_zone_t kmapentzone; |
131 |
static uma_zone_t mapzone; |
|
|
132 |
static uma_zone_t vmspace_zone; |
131 |
static uma_zone_t vmspace_zone; |
133 |
static int vmspace_zinit(void *mem, int size, int flags); |
132 |
static int vmspace_zinit(void *mem, int size, int flags); |
134 |
static int vm_map_zinit(void *mem, int ize, int flags); |
|
|
135 |
static void _vm_map_init(vm_map_t map, pmap_t pmap, vm_offset_t min, |
133 |
static void _vm_map_init(vm_map_t map, pmap_t pmap, vm_offset_t min, |
136 |
vm_offset_t max); |
134 |
vm_offset_t max); |
137 |
static void vm_map_entry_deallocate(vm_map_entry_t entry, boolean_t system_map); |
135 |
static void vm_map_entry_deallocate(vm_map_entry_t entry, boolean_t system_map); |
Lines 142-148
static int vm_map_growstack(vm_map_t map, vm_offset_t addr,
Link Here
|
142 |
static void vm_map_pmap_enter(vm_map_t map, vm_offset_t addr, vm_prot_t prot, |
140 |
static void vm_map_pmap_enter(vm_map_t map, vm_offset_t addr, vm_prot_t prot, |
143 |
vm_object_t object, vm_pindex_t pindex, vm_size_t size, int flags); |
141 |
vm_object_t object, vm_pindex_t pindex, vm_size_t size, int flags); |
144 |
#ifdef INVARIANTS |
142 |
#ifdef INVARIANTS |
145 |
static void vm_map_zdtor(void *mem, int size, void *arg); |
|
|
146 |
static void vmspace_zdtor(void *mem, int size, void *arg); |
143 |
static void vmspace_zdtor(void *mem, int size, void *arg); |
147 |
#endif |
144 |
#endif |
148 |
static int vm_map_stack_locked(vm_map_t map, vm_offset_t addrbos, |
145 |
static int vm_map_stack_locked(vm_map_t map, vm_offset_t addrbos, |
Lines 198-210
void
Link Here
|
198 |
vm_map_startup(void) |
195 |
vm_map_startup(void) |
199 |
{ |
196 |
{ |
200 |
mtx_init(&map_sleep_mtx, "vm map sleep mutex", NULL, MTX_DEF); |
197 |
mtx_init(&map_sleep_mtx, "vm map sleep mutex", NULL, MTX_DEF); |
201 |
mapzone = uma_zcreate("MAP", sizeof(struct vm_map), NULL, |
|
|
202 |
#ifdef INVARIANTS |
203 |
vm_map_zdtor, |
204 |
#else |
205 |
NULL, |
206 |
#endif |
207 |
vm_map_zinit, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE); |
208 |
kmapentzone = uma_zcreate("KMAP ENTRY", sizeof(struct vm_map_entry), |
198 |
kmapentzone = uma_zcreate("KMAP ENTRY", sizeof(struct vm_map_entry), |
209 |
NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, |
199 |
NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, |
210 |
UMA_ZONE_MTXCLASS | UMA_ZONE_VM); |
200 |
UMA_ZONE_MTXCLASS | UMA_ZONE_VM); |
Lines 223-246
static int
Link Here
|
223 |
vmspace_zinit(void *mem, int size, int flags) |
213 |
vmspace_zinit(void *mem, int size, int flags) |
224 |
{ |
214 |
{ |
225 |
struct vmspace *vm; |
215 |
struct vmspace *vm; |
|
|
216 |
vm_map_t map; |
226 |
|
217 |
|
227 |
vm = (struct vmspace *)mem; |
218 |
vm = (struct vmspace *)mem; |
|
|
219 |
map = &vm->vm_map; |
228 |
|
220 |
|
229 |
vm->vm_map.pmap = NULL; |
|
|
230 |
(void)vm_map_zinit(&vm->vm_map, sizeof(vm->vm_map), flags); |
231 |
PMAP_LOCK_INIT(vmspace_pmap(vm)); |
232 |
return (0); |
233 |
} |
234 |
|
235 |
static int |
236 |
vm_map_zinit(void *mem, int size, int flags) |
237 |
{ |
238 |
vm_map_t map; |
239 |
|
240 |
map = (vm_map_t)mem; |
241 |
memset(map, 0, sizeof(*map)); |
221 |
memset(map, 0, sizeof(*map)); |
242 |
mtx_init(&map->system_mtx, "vm map (system)", NULL, MTX_DEF | MTX_DUPOK); |
222 |
mtx_init(&map->system_mtx, "vm map (system)", NULL, |
|
|
223 |
MTX_DEF | MTX_DUPOK); |
243 |
sx_init(&map->lock, "vm map (user)"); |
224 |
sx_init(&map->lock, "vm map (user)"); |
|
|
225 |
PMAP_LOCK_INIT(vmspace_pmap(vm)); |
244 |
return (0); |
226 |
return (0); |
245 |
} |
227 |
} |
246 |
|
228 |
|
Lines 251-271
vmspace_zdtor(void *mem, int size, void *arg)
Link Here
|
251 |
struct vmspace *vm; |
233 |
struct vmspace *vm; |
252 |
|
234 |
|
253 |
vm = (struct vmspace *)mem; |
235 |
vm = (struct vmspace *)mem; |
254 |
|
236 |
KASSERT(vm->vm_map.nentries == 0, |
255 |
vm_map_zdtor(&vm->vm_map, sizeof(vm->vm_map), arg); |
237 |
("vmspace %p nentries == %d on free", vm, vm->vm_map.nentries)); |
256 |
} |
238 |
KASSERT(vm->vm_map.size == 0, |
257 |
static void |
239 |
("vmspace %p size == %ju on free", vm, (uintmax_t)vm->vm_map.size)); |
258 |
vm_map_zdtor(void *mem, int size, void *arg) |
|
|
259 |
{ |
260 |
vm_map_t map; |
261 |
|
262 |
map = (vm_map_t)mem; |
263 |
KASSERT(map->nentries == 0, |
264 |
("map %p nentries == %d on free.", |
265 |
map, map->nentries)); |
266 |
KASSERT(map->size == 0, |
267 |
("map %p size == %lu on free.", |
268 |
map, (unsigned long)map->size)); |
269 |
} |
240 |
} |
270 |
#endif /* INVARIANTS */ |
241 |
#endif /* INVARIANTS */ |
271 |
|
242 |
|
Lines 869-892
vmspace_resident_count(struct vmspace *vmspace)
Link Here
|
869 |
return pmap_resident_count(vmspace_pmap(vmspace)); |
840 |
return pmap_resident_count(vmspace_pmap(vmspace)); |
870 |
} |
841 |
} |
871 |
|
842 |
|
872 |
/* |
|
|
873 |
* vm_map_create: |
874 |
* |
875 |
* Creates and returns a new empty VM map with |
876 |
* the given physical map structure, and having |
877 |
* the given lower and upper address bounds. |
878 |
*/ |
879 |
vm_map_t |
880 |
vm_map_create(pmap_t pmap, vm_offset_t min, vm_offset_t max) |
881 |
{ |
882 |
vm_map_t result; |
883 |
|
884 |
result = uma_zalloc(mapzone, M_WAITOK); |
885 |
CTR1(KTR_VM, "vm_map_create: %p", result); |
886 |
_vm_map_init(result, pmap, min, max); |
887 |
return (result); |
888 |
} |
889 |
|
890 |
/* |
843 |
/* |
891 |
* Initialize an existing vm_map structure |
844 |
* Initialize an existing vm_map structure |
892 |
* such as that in the vmspace structure. |
845 |
* such as that in the vmspace structure. |
Lines 917-924
vm_map_init(vm_map_t map, pmap_t pmap, vm_offset_t min, vm_offset_t max)
Link Here
|
917 |
{ |
870 |
{ |
918 |
|
871 |
|
919 |
_vm_map_init(map, pmap, min, max); |
872 |
_vm_map_init(map, pmap, min, max); |
920 |
mtx_init(&map->system_mtx, "system map", NULL, MTX_DEF | MTX_DUPOK); |
873 |
mtx_init(&map->system_mtx, "vm map (system)", NULL, |
921 |
sx_init(&map->lock, "user map"); |
874 |
MTX_DEF | MTX_DUPOK); |
|
|
875 |
sx_init(&map->lock, "vm map (user)"); |
922 |
} |
876 |
} |
923 |
|
877 |
|
924 |
/* |
878 |
/* |