73#include <sys/_mutex.h>
120#define MAP_ENTRY_NOSYNC 0x00000001
121#define MAP_ENTRY_IS_SUB_MAP 0x00000002
122#define MAP_ENTRY_COW 0x00000004
123#define MAP_ENTRY_NEEDS_COPY 0x00000008
124#define MAP_ENTRY_NOFAULT 0x00000010
125#define MAP_ENTRY_USER_WIRED 0x00000020
127#define MAP_ENTRY_BEHAV_NORMAL 0x00000000
128#define MAP_ENTRY_BEHAV_SEQUENTIAL 0x00000040
130#define MAP_ENTRY_BEHAV_RANDOM 0x00000080
132#define MAP_ENTRY_BEHAV_RESERVED 0x000000c0
133#define MAP_ENTRY_BEHAV_MASK 0x000000c0
134#define MAP_ENTRY_IN_TRANSITION 0x00000100
136#define MAP_ENTRY_NEEDS_WAKEUP 0x00000200
138#define MAP_ENTRY_NOCOREDUMP 0x00000400
140#define MAP_ENTRY_VN_EXEC 0x00000800
141#define MAP_ENTRY_GROWS_DOWN 0x00001000
142#define MAP_ENTRY_GROWS_UP 0x00002000
144#define MAP_ENTRY_WIRE_SKIPPED 0x00004000
145#define MAP_ENTRY_WRITECNT 0x00008000
147#define MAP_ENTRY_GUARD 0x00010000
148#define MAP_ENTRY_STACK_GAP_DN 0x00020000
149#define MAP_ENTRY_STACK_GAP_UP 0x00040000
150#define MAP_ENTRY_HEADER 0x00080000
152#define MAP_ENTRY_SPLIT_BOUNDARY_MASK 0x00300000
154#define MAP_ENTRY_SPLIT_BOUNDARY_SHIFT 20
157static __inline u_char
225#define MAP_WIREFUTURE 0x01
226#define MAP_BUSY_WAKEUP 0x02
227#define MAP_IS_SUB_MAP 0x04
229#define MAP_ASLR_IGNSTART 0x10
230#define MAP_REPLENISH 0x20
231#define MAP_WXORX 0x40
232#define MAP_ASLR_STACK 0x80
235#if defined(KLD_MODULE) && !defined(KLD_TIED)
236#define vm_map_max(map) vm_map_max_KBI((map))
237#define vm_map_min(map) vm_map_min_KBI((map))
238#define vm_map_pmap(map) vm_map_pmap_KBI((map))
239#define vm_map_range_valid(map, start, end) \
240 vm_map_range_valid_KBI((map), (start), (end))
242static __inline vm_offset_t
249static __inline vm_offset_t
256static __inline pmap_t
308static __inline pmap_t
345#define vm_map_lock(map) _vm_map_lock(map, LOCK_FILE, LOCK_LINE)
346#define vm_map_unlock(map) _vm_map_unlock(map, LOCK_FILE, LOCK_LINE)
347#define vm_map_unlock_and_wait(map, timo) \
348 _vm_map_unlock_and_wait(map, timo, LOCK_FILE, LOCK_LINE)
349#define vm_map_lock_read(map) _vm_map_lock_read(map, LOCK_FILE, LOCK_LINE)
350#define vm_map_unlock_read(map) _vm_map_unlock_read(map, LOCK_FILE, LOCK_LINE)
351#define vm_map_trylock(map) _vm_map_trylock(map, LOCK_FILE, LOCK_LINE)
352#define vm_map_trylock_read(map) \
353 _vm_map_trylock_read(map, LOCK_FILE, LOCK_LINE)
354#define vm_map_lock_upgrade(map) \
355 _vm_map_lock_upgrade(map, LOCK_FILE, LOCK_LINE)
356#define vm_map_lock_downgrade(map) \
357 _vm_map_lock_downgrade(map, LOCK_FILE, LOCK_LINE)
365#define MAP_INHERIT_SHARE 0x00000001
366#define MAP_COPY_ON_WRITE 0x00000002
367#define MAP_NOFAULT 0x00000004
368#define MAP_PREFAULT 0x00000008
369#define MAP_PREFAULT_PARTIAL 0x00000010
370#define MAP_DISABLE_SYNCER 0x00000020
371#define MAP_CHECK_EXCL 0x00000040
372#define MAP_CREATE_GUARD 0x00000080
373#define MAP_DISABLE_COREDUMP 0x00000100
374#define MAP_PREFAULT_MADVISE 0x00000200
375#define MAP_WRITECOUNT 0x00000400
376#define MAP_REMAP 0x00000800
377#define MAP_STACK_GROWS_DOWN 0x00001000
378#define MAP_STACK_GROWS_UP 0x00002000
379#define MAP_ACC_CHARGED 0x00004000
380#define MAP_ACC_NO_CHARGE 0x00008000
381#define MAP_CREATE_STACK_GAP_UP 0x00010000
382#define MAP_CREATE_STACK_GAP_DN 0x00020000
383#define MAP_VN_EXEC 0x00040000
384#define MAP_SPLIT_BOUNDARY_MASK 0x00180000
386#define MAP_SPLIT_BOUNDARY_SHIFT 19
391#define VM_FAULT_NORMAL 0x00
392#define VM_FAULT_WIRE 0x01
393#define VM_FAULT_DIRTY 0x02
394#define VM_FAULT_NOFILL 0x04
400#define VM_FAULT_READ_AHEAD_MIN 7
401#define VM_FAULT_READ_AHEAD_INIT 15
402#define VM_FAULT_READ_AHEAD_MAX min(atop(maxphys) - 1, UINT8_MAX)
410#define VMFS_NO_SPACE 0
411#define VMFS_ANY_SPACE 1
412#define VMFS_OPTIMAL_SPACE 2
413#define VMFS_SUPER_SPACE 3
414#define VMFS_ALIGNED_SPACE(x) ((x) << 8)
419#define VM_MAP_WIRE_SYSTEM 0
420#define VM_MAP_WIRE_USER 1
422#define VM_MAP_WIRE_NOHOLES 0
423#define VM_MAP_WIRE_HOLESOK 2
425#define VM_MAP_WIRE_WRITE 4
441vm_map_entry_read_succ(
void *token,
struct vm_map_entry *
const clone,
447 after = clone->
right;
448 start = clone->
start;
449 if (!reader(token, after, clone))
451 backup = clone->
left;
452 if (!reader(token, backup, clone))
454 if (clone->
start > start) {
457 backup = clone->
left;
458 if (!reader(token, backup, clone))
460 }
while (clone->
start != start);
462 if (!reader(token, after, clone))
476 vm_offset_t max_addr, vm_offset_t alignment);
484 vm_pindex_t *,
vm_prot_t *, boolean_t *);
486 vm_pindex_t *,
vm_prot_t *, boolean_t *);
502 after = entry->
right;
506 while (after->
left != entry);
511#define VM_MAP_ENTRY_FOREACH(it, map) \
512 for ((it) = vm_map_entry_first(map); \
513 (it) != &(map)->header; \
514 (it) = vm_map_entry_succ(it))
516#define VM_MAP_PROTECT_SET_PROT 0x0001
517#define VM_MAP_PROTECT_SET_MAXPROT 0x0002
struct vm_map_entry * right
struct thread * wiring_thread
union vm_map_object object
struct vm_map_entry * left
struct vm_map_entry header
struct shmmap_state * vm_shm
struct vm_object * vm_object
static __inline void vm_map_modflags(vm_map_t map, vm_flags_t set, vm_flags_t clear)
void vm_map_wakeup(vm_map_t map)
int vm_map_stack(vm_map_t, vm_offset_t, vm_size_t, vm_prot_t, vm_prot_t, int)
void _vm_map_lock_downgrade(vm_map_t map, const char *file, int line)
static __inline int vm_map_entry_user_wired_count(vm_map_entry_t entry)
boolean_t vm_map_lookup_entry(vm_map_t, vm_offset_t, vm_map_entry_t *)
int vm_map_inherit(vm_map_t, vm_offset_t, vm_offset_t, vm_inherit_t)
boolean_t vm_map_check_protection(vm_map_t, vm_offset_t, vm_offset_t, vm_prot_t)
void vm_map_try_merge_entries(vm_map_t map, vm_map_entry_t prev, vm_map_entry_t entry)
int vm_map_protect(vm_map_t map, vm_offset_t start, vm_offset_t end, vm_prot_t new_prot, vm_prot_t new_maxprot, int flags)
int vm_map_wire(vm_map_t map, vm_offset_t start, vm_offset_t end, int flags)
void vm_map_unbusy(vm_map_t map)
int vm_map_entry_reader(void *token, vm_map_entry_t addr, vm_map_entry_t dest)
#define MAP_ENTRY_USER_WIRED
int vm_map_insert(vm_map_t, vm_object_t, vm_ooffset_t, vm_offset_t, vm_offset_t, vm_prot_t, vm_prot_t, int)
long vmspace_swap_count(struct vmspace *vmspace)
void vm_map_lookup_done(vm_map_t, vm_map_entry_t)
static __inline vm_offset_t vm_map_max(const struct vm_map *map)
static __inline pmap_t vm_map_pmap(vm_map_t map)
void vm_map_init(vm_map_t, pmap_t, vm_offset_t, vm_offset_t)
int vm_map_lookup_locked(vm_map_t *, vm_offset_t, vm_prot_t, vm_map_entry_t *, vm_object_t *, vm_pindex_t *, vm_prot_t *, boolean_t *)
static bool vm_map_range_valid(vm_map_t map, vm_offset_t start, vm_offset_t end)
int vm_map_find_aligned(vm_map_t map, vm_offset_t *addr, vm_size_t length, vm_offset_t max_addr, vm_offset_t alignment)
int vm_map_sync(vm_map_t, vm_offset_t, vm_offset_t, boolean_t, boolean_t)
void _vm_map_unlock_read(vm_map_t map, const char *file, int line)
int vm_map_wire_locked(vm_map_t map, vm_offset_t start, vm_offset_t end, int flags)
void vm_map_wait_busy(vm_map_t map)
static __inline int vm_map_entry_system_wired_count(vm_map_entry_t entry)
void vm_map_entry_set_vnode_text(vm_map_entry_t entry, bool add)
int vm_map_remove(vm_map_t, vm_offset_t, vm_offset_t)
int vm_map_delete(vm_map_t, vm_offset_t, vm_offset_t)
int _vm_map_lock_upgrade(vm_map_t map, const char *file, int line)
void vm_map_startup(void)
void _vm_map_unlock(vm_map_t map, const char *file, int line)
int _vm_map_trylock(vm_map_t map, const char *file, int line)
pmap_t vm_map_pmap_KBI(vm_map_t map)
void _vm_map_lock(vm_map_t map, const char *file, int line)
void _vm_map_lock_read(vm_map_t map, const char *file, int line)
int vm_map_find(vm_map_t, vm_object_t, vm_ooffset_t, vm_offset_t *, vm_size_t, vm_offset_t, int, vm_prot_t, vm_prot_t, int)
int _vm_map_trylock_read(vm_map_t map, const char *file, int line)
int vm_map_submap(vm_map_t, vm_offset_t, vm_offset_t, vm_map_t)
vm_offset_t vm_map_findspace(vm_map_t, vm_offset_t, vm_size_t)
int vm_map_find_min(vm_map_t, vm_object_t, vm_ooffset_t, vm_offset_t *, vm_size_t, vm_offset_t, vm_offset_t, int, vm_prot_t, vm_prot_t, int)
static __inline u_char vm_map_entry_behavior(vm_map_entry_t entry)
int _vm_map_unlock_and_wait(vm_map_t map, int timo, const char *file, int line)
int vm_map_madvise(vm_map_t, vm_offset_t, vm_offset_t, int)
vm_offset_t vm_map_min_KBI(const struct vm_map *map)
long vmspace_resident_count(struct vmspace *vmspace)
int vm_map_lookup(vm_map_t *, vm_offset_t, vm_prot_t, vm_map_entry_t *, vm_object_t *, vm_pindex_t *, vm_prot_t *, boolean_t *)
static __inline pmap_t vmspace_pmap(struct vmspace *vmspace)
void vm_map_busy(vm_map_t map)
vm_offset_t vm_map_max_KBI(const struct vm_map *map)
bool vm_map_range_valid_KBI(vm_map_t map, vm_offset_t start, vm_offset_t end)
int vm_map_locked(vm_map_t map)
static __inline vm_offset_t vm_map_min(const struct vm_map *map)
int vm_map_fixed(vm_map_t, vm_object_t, vm_ooffset_t, vm_offset_t, vm_size_t, vm_prot_t, vm_prot_t, int)
int vm_map_unwire(vm_map_t map, vm_offset_t start, vm_offset_t end, int flags)
static vm_map_entry_t vm_map_entry_succ(vm_map_entry_t entry)
static vm_map_entry_t vm_map_entry_first(vm_map_t map)
#define MAP_ENTRY_BEHAV_MASK