FreeBSD virtual memory subsystem code
|
#include <sys/lock.h>
#include <sys/sx.h>
#include <sys/_mutex.h>
Go to the source code of this file.
Data Structures | |
union | vm_map_object |
struct | vm_map_entry |
struct | vm_map |
struct | vmspace |
Macros | |
#define | MAP_ENTRY_NOSYNC 0x00000001 |
#define | MAP_ENTRY_IS_SUB_MAP 0x00000002 |
#define | MAP_ENTRY_COW 0x00000004 |
#define | MAP_ENTRY_NEEDS_COPY 0x00000008 |
#define | MAP_ENTRY_NOFAULT 0x00000010 |
#define | MAP_ENTRY_USER_WIRED 0x00000020 |
#define | MAP_ENTRY_BEHAV_NORMAL 0x00000000 /* default behavior */ |
#define | MAP_ENTRY_BEHAV_SEQUENTIAL |
#define | MAP_ENTRY_BEHAV_RANDOM |
#define | MAP_ENTRY_BEHAV_RESERVED 0x000000c0 /* future use */ |
#define | MAP_ENTRY_BEHAV_MASK 0x000000c0 |
#define | MAP_ENTRY_IN_TRANSITION |
#define | MAP_ENTRY_NEEDS_WAKEUP |
#define | MAP_ENTRY_NOCOREDUMP |
#define | MAP_ENTRY_VN_EXEC 0x00000800 /* text vnode mapping */ |
#define | MAP_ENTRY_GROWS_DOWN 0x00001000 /* top-down stacks */ |
#define | MAP_ENTRY_GROWS_UP 0x00002000 /* bottom-up stacks */ |
#define | MAP_ENTRY_WIRE_SKIPPED 0x00004000 |
#define | MAP_ENTRY_WRITECNT |
#define | MAP_ENTRY_GUARD 0x00010000 |
#define | MAP_ENTRY_STACK_GAP_DN 0x00020000 |
#define | MAP_ENTRY_STACK_GAP_UP 0x00040000 |
#define | MAP_ENTRY_HEADER 0x00080000 |
#define | MAP_ENTRY_SPLIT_BOUNDARY_MASK 0x00300000 |
#define | MAP_ENTRY_SPLIT_BOUNDARY_SHIFT 20 |
#define | MAP_WIREFUTURE 0x01 /* wire all future pages */ |
#define | MAP_BUSY_WAKEUP 0x02 /* thread(s) waiting on busy state */ |
#define | MAP_IS_SUB_MAP 0x04 /* has parent */ |
#define | MAP_ASLR 0x08 /* enabled ASLR */ |
#define | MAP_ASLR_IGNSTART 0x10 /* ASLR ignores data segment */ |
#define | MAP_REPLENISH 0x20 /* kmapent zone needs to be refilled */ |
#define | MAP_WXORX 0x40 /* enforce W^X */ |
#define | MAP_ASLR_STACK 0x80 /* stack location is randomized */ |
#define | vm_map_lock(map) _vm_map_lock(map, LOCK_FILE, LOCK_LINE) |
#define | vm_map_unlock(map) _vm_map_unlock(map, LOCK_FILE, LOCK_LINE) |
#define | vm_map_unlock_and_wait(map, timo) _vm_map_unlock_and_wait(map, timo, LOCK_FILE, LOCK_LINE) |
#define | vm_map_lock_read(map) _vm_map_lock_read(map, LOCK_FILE, LOCK_LINE) |
#define | vm_map_unlock_read(map) _vm_map_unlock_read(map, LOCK_FILE, LOCK_LINE) |
#define | vm_map_trylock(map) _vm_map_trylock(map, LOCK_FILE, LOCK_LINE) |
#define | vm_map_trylock_read(map) _vm_map_trylock_read(map, LOCK_FILE, LOCK_LINE) |
#define | vm_map_lock_upgrade(map) _vm_map_lock_upgrade(map, LOCK_FILE, LOCK_LINE) |
#define | vm_map_lock_downgrade(map) _vm_map_lock_downgrade(map, LOCK_FILE, LOCK_LINE) |
#define | MAP_INHERIT_SHARE 0x00000001 |
#define | MAP_COPY_ON_WRITE 0x00000002 |
#define | MAP_NOFAULT 0x00000004 |
#define | MAP_PREFAULT 0x00000008 |
#define | MAP_PREFAULT_PARTIAL 0x00000010 |
#define | MAP_DISABLE_SYNCER 0x00000020 |
#define | MAP_CHECK_EXCL 0x00000040 |
#define | MAP_CREATE_GUARD 0x00000080 |
#define | MAP_DISABLE_COREDUMP 0x00000100 |
#define | MAP_PREFAULT_MADVISE 0x00000200 /* from (user) madvise request */ |
#define | MAP_WRITECOUNT 0x00000400 |
#define | MAP_REMAP 0x00000800 |
#define | MAP_STACK_GROWS_DOWN 0x00001000 |
#define | MAP_STACK_GROWS_UP 0x00002000 |
#define | MAP_ACC_CHARGED 0x00004000 |
#define | MAP_ACC_NO_CHARGE 0x00008000 |
#define | MAP_CREATE_STACK_GAP_UP 0x00010000 |
#define | MAP_CREATE_STACK_GAP_DN 0x00020000 |
#define | MAP_VN_EXEC 0x00040000 |
#define | MAP_SPLIT_BOUNDARY_MASK 0x00180000 |
#define | MAP_SPLIT_BOUNDARY_SHIFT 19 |
#define | VM_FAULT_NORMAL 0x00 /* Nothing special */ |
#define | VM_FAULT_WIRE 0x01 /* Wire the mapped page */ |
#define | VM_FAULT_DIRTY 0x02 /* Dirty the page; use w/VM_PROT_COPY */ |
#define | VM_FAULT_NOFILL 0x04 /* Fail if the pager doesn't have a copy */ |
#define | VM_FAULT_READ_AHEAD_MIN 7 |
#define | VM_FAULT_READ_AHEAD_INIT 15 |
#define | VM_FAULT_READ_AHEAD_MAX min(atop(maxphys) - 1, UINT8_MAX) |
#define | VMFS_NO_SPACE 0 /* don't find; use the given range */ |
#define | VMFS_ANY_SPACE 1 /* find a range with any alignment */ |
#define | VMFS_OPTIMAL_SPACE 2 /* find a range with optimal alignment*/ |
#define | VMFS_SUPER_SPACE 3 /* find a superpage-aligned range */ |
#define | VMFS_ALIGNED_SPACE(x) ((x) << 8) /* find a range with fixed alignment */ |
#define | VM_MAP_WIRE_SYSTEM 0 /* wiring in a kernel map */ |
#define | VM_MAP_WIRE_USER 1 /* wiring in a user map */ |
#define | VM_MAP_WIRE_NOHOLES 0 /* region must not have holes */ |
#define | VM_MAP_WIRE_HOLESOK 2 /* region may have holes */ |
#define | VM_MAP_WIRE_WRITE 4 /* Validate writable. */ |
#define | VM_MAP_ENTRY_FOREACH(it, map) |
#define | VM_MAP_PROTECT_SET_PROT 0x0001 |
#define | VM_MAP_PROTECT_SET_MAXPROT 0x0002 |
Typedefs | |
typedef u_char | vm_flags_t |
typedef u_int | vm_eflags_t |
typedef int | vm_map_entry_reader(void *token, vm_map_entry_t addr, vm_map_entry_t dest) |
Functions | |
static __inline u_char | vm_map_entry_behavior (vm_map_entry_t entry) |
static __inline int | vm_map_entry_user_wired_count (vm_map_entry_t entry) |
static __inline int | vm_map_entry_system_wired_count (vm_map_entry_t entry) |
static __inline vm_offset_t | vm_map_max (const struct vm_map *map) |
static __inline vm_offset_t | vm_map_min (const struct vm_map *map) |
static __inline pmap_t | vm_map_pmap (vm_map_t map) |
static __inline void | vm_map_modflags (vm_map_t map, vm_flags_t set, vm_flags_t clear) |
static bool | vm_map_range_valid (vm_map_t map, vm_offset_t start, vm_offset_t end) |
static __inline pmap_t | vmspace_pmap (struct vmspace *vmspace) |
void | _vm_map_lock (vm_map_t map, const char *file, int line) |
void | _vm_map_unlock (vm_map_t map, const char *file, int line) |
int | _vm_map_unlock_and_wait (vm_map_t map, int timo, const char *file, int line) |
void | _vm_map_lock_read (vm_map_t map, const char *file, int line) |
void | _vm_map_unlock_read (vm_map_t map, const char *file, int line) |
int | _vm_map_trylock (vm_map_t map, const char *file, int line) |
int | _vm_map_trylock_read (vm_map_t map, const char *file, int line) |
int | _vm_map_lock_upgrade (vm_map_t map, const char *file, int line) |
void | _vm_map_lock_downgrade (vm_map_t map, const char *file, int line) |
int | vm_map_locked (vm_map_t map) |
void | vm_map_wakeup (vm_map_t map) |
void | vm_map_busy (vm_map_t map) |
void | vm_map_unbusy (vm_map_t map) |
void | vm_map_wait_busy (vm_map_t map) |
vm_offset_t | vm_map_max_KBI (const struct vm_map *map) |
vm_offset_t | vm_map_min_KBI (const struct vm_map *map) |
pmap_t | vm_map_pmap_KBI (vm_map_t map) |
bool | vm_map_range_valid_KBI (vm_map_t map, vm_offset_t start, vm_offset_t end) |
long | vmspace_resident_count (struct vmspace *vmspace) |
boolean_t | vm_map_check_protection (vm_map_t, vm_offset_t, vm_offset_t, vm_prot_t) |
int | vm_map_delete (vm_map_t, vm_offset_t, vm_offset_t) |
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_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) |
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_fixed (vm_map_t, vm_object_t, vm_ooffset_t, vm_offset_t, vm_size_t, vm_prot_t, vm_prot_t, int) |
vm_offset_t | vm_map_findspace (vm_map_t, vm_offset_t, vm_size_t) |
int | vm_map_inherit (vm_map_t, vm_offset_t, vm_offset_t, vm_inherit_t) |
void | vm_map_init (vm_map_t, pmap_t, vm_offset_t, vm_offset_t) |
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) |
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 *) |
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 *) |
void | vm_map_lookup_done (vm_map_t, vm_map_entry_t) |
boolean_t | vm_map_lookup_entry (vm_map_t, vm_offset_t, vm_map_entry_t *) |
static vm_map_entry_t | vm_map_entry_first (vm_map_t map) |
static vm_map_entry_t | vm_map_entry_succ (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_remove (vm_map_t, vm_offset_t, vm_offset_t) |
void | vm_map_try_merge_entries (vm_map_t map, vm_map_entry_t prev, vm_map_entry_t entry) |
void | vm_map_startup (void) |
int | vm_map_submap (vm_map_t, vm_offset_t, vm_offset_t, vm_map_t) |
int | vm_map_sync (vm_map_t, vm_offset_t, vm_offset_t, boolean_t, boolean_t) |
int | vm_map_madvise (vm_map_t, vm_offset_t, vm_offset_t, int) |
int | vm_map_stack (vm_map_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) |
int | vm_map_wire (vm_map_t map, vm_offset_t start, vm_offset_t end, int flags) |
int | vm_map_wire_locked (vm_map_t map, vm_offset_t start, vm_offset_t end, int flags) |
long | vmspace_swap_count (struct vmspace *vmspace) |
void | vm_map_entry_set_vnode_text (vm_map_entry_t entry, bool add) |
#define MAP_ASLR_IGNSTART 0x10 /* ASLR ignores data segment */ |
#define MAP_ASLR_STACK 0x80 /* stack location is randomized */ |
#define MAP_BUSY_WAKEUP 0x02 /* thread(s) waiting on busy state */ |
#define MAP_ENTRY_BEHAV_NORMAL 0x00000000 /* default behavior */ |
#define MAP_ENTRY_BEHAV_RANDOM |
#define MAP_ENTRY_BEHAV_RESERVED 0x000000c0 /* future use */ |
#define MAP_ENTRY_BEHAV_SEQUENTIAL |
#define MAP_ENTRY_GROWS_DOWN 0x00001000 /* top-down stacks */ |
#define MAP_ENTRY_GROWS_UP 0x00002000 /* bottom-up stacks */ |
#define MAP_ENTRY_IN_TRANSITION |
#define MAP_ENTRY_NEEDS_WAKEUP |
#define MAP_ENTRY_NOCOREDUMP |
#define MAP_ENTRY_VN_EXEC 0x00000800 /* text vnode mapping */ |
#define MAP_ENTRY_WRITECNT |
#define MAP_PREFAULT_MADVISE 0x00000200 /* from (user) madvise request */ |
#define MAP_REPLENISH 0x20 /* kmapent zone needs to be refilled */ |
#define VM_FAULT_DIRTY 0x02 /* Dirty the page; use w/VM_PROT_COPY */ |
#define VM_FAULT_NOFILL 0x04 /* Fail if the pager doesn't have a copy */ |
#define VM_FAULT_READ_AHEAD_MAX min(atop(maxphys) - 1, UINT8_MAX) |
#define VM_MAP_ENTRY_FOREACH | ( | it, | |
map | |||
) |
#define vm_map_lock | ( | map | ) | _vm_map_lock(map, LOCK_FILE, LOCK_LINE) |
#define vm_map_lock_downgrade | ( | map | ) | _vm_map_lock_downgrade(map, LOCK_FILE, LOCK_LINE) |
#define vm_map_lock_read | ( | map | ) | _vm_map_lock_read(map, LOCK_FILE, LOCK_LINE) |
#define vm_map_lock_upgrade | ( | map | ) | _vm_map_lock_upgrade(map, LOCK_FILE, LOCK_LINE) |
#define vm_map_trylock | ( | map | ) | _vm_map_trylock(map, LOCK_FILE, LOCK_LINE) |
#define vm_map_trylock_read | ( | map | ) | _vm_map_trylock_read(map, LOCK_FILE, LOCK_LINE) |
#define vm_map_unlock | ( | map | ) | _vm_map_unlock(map, LOCK_FILE, LOCK_LINE) |
#define vm_map_unlock_and_wait | ( | map, | |
timo | |||
) | _vm_map_unlock_and_wait(map, timo, LOCK_FILE, LOCK_LINE) |
#define vm_map_unlock_read | ( | map | ) | _vm_map_unlock_read(map, LOCK_FILE, LOCK_LINE) |
#define VM_MAP_WIRE_NOHOLES 0 /* region must not have holes */ |
#define VMFS_ALIGNED_SPACE | ( | x | ) | ((x) << 8) /* find a range with fixed alignment */ |
#define VMFS_ANY_SPACE 1 /* find a range with any alignment */ |
#define VMFS_NO_SPACE 0 /* don't find; use the given range */ |
#define VMFS_OPTIMAL_SPACE 2 /* find a range with optimal alignment*/ |
#define VMFS_SUPER_SPACE 3 /* find a superpage-aligned range */ |
typedef u_int vm_eflags_t |
typedef u_char vm_flags_t |
typedef int vm_map_entry_reader(void *token, vm_map_entry_t addr, vm_map_entry_t dest) |
void _vm_map_lock | ( | vm_map_t | map, |
const char * | file, | ||
int | line | ||
) |
Definition at line 528 of file vm_map.c.
References vm_map::lock, vm_map::system_map, vm_map::system_mtx, and vm_map::timestamp.
void _vm_map_lock_downgrade | ( | vm_map_t | map, |
const char * | file, | ||
int | line | ||
) |
Definition at line 765 of file vm_map.c.
References vm_map::flags, vm_map::lock, MAP_REPLENISH, vm_map::system_map, vm_map::system_mtx, and VM_MAP_UNLOCK_CONSISTENT.
void _vm_map_lock_read | ( | vm_map_t | map, |
const char * | file, | ||
int | line | ||
) |
Definition at line 680 of file vm_map.c.
References vm_map::lock, vm_map::system_map, and vm_map::system_mtx.
int _vm_map_lock_upgrade | ( | vm_map_t | map, |
const char * | file, | ||
int | line | ||
) |
Definition at line 738 of file vm_map.c.
References vm_map::lock, vm_map::system_map, vm_map::system_mtx, vm_map::timestamp, and vm_map_process_deferred().
int _vm_map_trylock | ( | vm_map_t | map, |
const char * | file, | ||
int | line | ||
) |
Definition at line 704 of file vm_map.c.
References vm_map::lock, vm_map::system_map, vm_map::system_mtx, and vm_map::timestamp.
int _vm_map_trylock_read | ( | vm_map_t | map, |
const char * | file, | ||
int | line | ||
) |
Definition at line 717 of file vm_map.c.
References vm_map::lock, vm_map::system_map, and vm_map::system_mtx.
void _vm_map_unlock | ( | vm_map_t | map, |
const char * | file, | ||
int | line | ||
) |
Definition at line 661 of file vm_map.c.
References vm_map::flags, kernel_map, kmapentzone, vm_map::lock, MAP_REPLENISH, vm_map::system_map, vm_map::system_mtx, uma_prealloc(), vm_map_process_deferred(), and VM_MAP_UNLOCK_CONSISTENT.
int _vm_map_unlock_and_wait | ( | vm_map_t | map, |
int | timo, | ||
const char * | file, | ||
int | line | ||
) |
Definition at line 809 of file vm_map.c.
References vm_map::flags, vm_map::lock, MAP_REPLENISH, map_sleep_mtx, vm_map::root, vm_map::system_map, vm_map::system_mtx, and VM_MAP_UNLOCK_CONSISTENT.
void _vm_map_unlock_read | ( | vm_map_t | map, |
const char * | file, | ||
int | line | ||
) |
Definition at line 690 of file vm_map.c.
References vm_map::flags, vm_map::lock, MAP_REPLENISH, vm_map::system_map, vm_map::system_mtx, and vm_map_process_deferred().
void vm_map_busy | ( | vm_map_t | map | ) |
Definition at line 846 of file vm_map.c.
References vm_map::busy, and VM_MAP_ASSERT_LOCKED.
Referenced by vm_map_wire_locked().
boolean_t vm_map_check_protection | ( | vm_map_t | map, |
vm_offset_t | start, | ||
vm_offset_t | end, | ||
vm_prot_t | protection | ||
) |
Definition at line 4012 of file vm_map.c.
References vm_map_entry::end, vm_map_entry::protection, vm_map_entry_succ(), and vm_map_lookup_entry().
Referenced by kern_munmap(), kernacc(), and useracc().
int vm_map_delete | ( | vm_map_t | map, |
vm_offset_t | start, | ||
vm_offset_t | end | ||
) |
Definition at line 3893 of file vm_map.c.
References vm_map::anon_loc, vm_map_entry::eflags, vm_map_entry::end, KERN_SUCCESS, MAP_ENTRY_IN_TRANSITION, MAP_ENTRY_IS_SUB_MAP, MAP_ENTRY_NEEDS_WAKEUP, vm_map_entry::object, vm_map::pmap, pmap_remove(), vm_map_entry::start, vm_map::timestamp, VM_MAP_ASSERT_LOCKED, vm_map_clip_end(), vm_map_entry_delete(), vm_map_entry_succ(), vm_map_entry_system_wired_count(), vm_map_entry_unwire(), vm_map_lock, vm_map_lookup_clip_start(), vm_map_pmap(), vm_map_unlock_and_wait, vm_map_object::vm_object, and vm_map_entry::wired_count.
Referenced by kern_break(), kern_munmap(), kmap_free_wakeup(), kmapent_alloc(), vm_map_find(), and vm_map_remove().
|
static |
Definition at line 152 of file vm_map.h.
Referenced by vm_fault_getpages(), and vm_fault_readahead().
|
inlinestatic |
void vm_map_entry_set_vnode_text | ( | vm_map_entry_t | entry, |
bool | add | ||
) |
Definition at line 539 of file vm_map.c.
References vm_object::backing_object, vm_map_entry::eflags, vm_object::flags, MAP_ENTRY_IS_SUB_MAP, MAP_ENTRY_VN_EXEC, OBJ_ANON, vm_map_entry::object, vm_map_object::vm_object, and vm_pager_getvp().
Referenced by vm_map_process_deferred(), and vmspace_fork().
|
inlinestatic |
Definition at line 492 of file vm_map.h.
References vm_map::header, and vm_map_entry::right.
Referenced by kern_mincore(), kern_munmap(), vm_map_check_protection(), vm_map_delete(), vm_map_entry_in_transition(), vm_map_inherit(), vm_map_insert(), vm_map_lookup_clip_start(), vm_map_madvise(), vm_map_protect(), vm_map_sync(), and vm_map_wire_locked().
|
static |
Definition at line 166 of file vm_map.h.
Referenced by vm_map_delete().
|
static |
Definition at line 158 of file vm_map.h.
References vm_map_entry::eflags, and MAP_ENTRY_BEHAV_MASK.
int vm_map_find | ( | vm_map_t | map, |
vm_object_t | object, | ||
vm_ooffset_t | offset, | ||
vm_offset_t * | addr, | ||
vm_size_t | length, | ||
vm_offset_t | max_addr, | ||
int | find_space, | ||
vm_prot_t | prot, | ||
vm_prot_t | max, | ||
int | cow | ||
) |
Definition at line 2083 of file vm_map.c.
References vm_map::anon_loc, aslr_pages_rnd_32, aslr_pages_rnd_64, aslr_restarts, clustering_anon_allowed(), vm_map::flags, vm_object::flags, KERN_INVALID_ADDRESS, KERN_NO_SPACE, KERN_SUCCESS, MAP_ASLR, MAP_ASLR_IGNSTART, MAP_INHERIT_SHARE, MAP_IS_SUB_MAP, MAP_REMAP, MAP_STACK_GROWS_DOWN, MAP_STACK_GROWS_UP, OBJ_COLORED, sgrowsiz, vm_map_alignspace(), vm_map_delete(), vm_map_findspace(), vm_map_insert(), vm_map_lock, vm_map_max(), vm_map_min(), vm_map_range_valid(), vm_map_stack_locked(), vm_map_unlock, VMFS_ANY_SPACE, VMFS_NO_SPACE, VMFS_OPTIMAL_SPACE, and VMFS_SUPER_SPACE.
Referenced by kmem_subinit(), kva_import(), vm_map_find_min(), and vm_mmap_object().
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_find_min | ( | vm_map_t | map, |
vm_object_t | object, | ||
vm_ooffset_t | offset, | ||
vm_offset_t * | addr, | ||
vm_size_t | length, | ||
vm_offset_t | min_addr, | ||
vm_offset_t | max_addr, | ||
int | find_space, | ||
vm_prot_t | prot, | ||
vm_prot_t | max, | ||
int | cow | ||
) |
Definition at line 2241 of file vm_map.c.
References KERN_SUCCESS, and vm_map_find().
Referenced by vm_mmap_object().
vm_offset_t vm_map_findspace | ( | vm_map_t | map, |
vm_offset_t | start, | ||
vm_size_t | length | ||
) |
Definition at line 1845 of file vm_map.c.
References vm_map_entry::end, vm_map::header, vm_map_entry::left, vm_map_entry::max_free, vm_map_entry::right, vm_map::root, SPLAY_LEFT_STEP, SPLAY_RIGHT_STEP, vm_map_entry::start, VM_MAP_ASSERT_CONSISTENT, VM_MAP_ASSERT_LOCKED, vm_map_entry_max_free_left(), vm_map_max(), vm_map_min(), vm_map_splay_merge_left(), vm_map_splay_merge_pred(), vm_map_splay_merge_right(), vm_map_splay_merge_succ(), vm_map_splay_split(), and vm_size_max().
Referenced by kmap_alloc_wait(), kmapent_alloc(), vm_map_alignspace(), and vm_map_find().
int vm_map_fixed | ( | vm_map_t | map, |
vm_object_t | object, | ||
vm_ooffset_t | offset, | ||
vm_offset_t | start, | ||
vm_size_t | length, | ||
vm_prot_t | prot, | ||
vm_prot_t | max, | ||
int | cow | ||
) |
Definition at line 1937 of file vm_map.c.
Referenced by vm_mmap_object().
int vm_map_inherit | ( | vm_map_t | map, |
vm_offset_t | start, | ||
vm_offset_t | end, | ||
vm_inherit_t | new_inheritance | ||
) |
Definition at line 3108 of file vm_map.c.
References vm_map_entry::eflags, vm_map_entry::end, vm_map_entry::inheritance, KERN_INVALID_ARGUMENT, KERN_SUCCESS, MAP_ENTRY_GUARD, MAP_ENTRY_SPLIT_BOUNDARY_MASK, vm_map_entry::start, VM_INHERIT_COPY, VM_INHERIT_NONE, VM_INHERIT_SHARE, VM_INHERIT_ZERO, vm_map_clip_end(), vm_map_entry_succ(), vm_map_lock, vm_map_lookup_clip_start(), vm_map_lookup_entry(), VM_MAP_RANGE_CHECK, vm_map_try_merge_entries(), and vm_map_unlock.
Referenced by kern_minherit().
void vm_map_init | ( | vm_map_t | map, |
pmap_t | pmap, | ||
vm_offset_t | min, | ||
vm_offset_t | max | ||
) |
Definition at line 912 of file vm_map.c.
References _vm_map_init(), vm_map::lock, and vm_map::system_mtx.
Referenced by kmem_init(), and kmem_subinit().
int vm_map_insert | ( | vm_map_t | map, |
vm_object_t | object, | ||
vm_ooffset_t | offset, | ||
vm_offset_t | start, | ||
vm_offset_t | end, | ||
vm_prot_t | prot, | ||
vm_prot_t | max, | ||
int | cow | ||
) |
Definition at line 1608 of file vm_map.c.
References vm_map_entry::cred, vm_object::cred, vm_map_entry::eflags, vm_map_entry::end, ENTRY_CHARGED, vm_map::flags, vm_object::flags, vm_map_entry::inheritance, KERN_INVALID_ADDRESS, KERN_INVALID_ARGUMENT, KERN_NO_SPACE, KERN_PROTECTION_FAILURE, KERN_RESOURCE_SHORTAGE, KERN_SUCCESS, kernel_map, kernel_object, kernel_vm_end, MAP_ACC_CHARGED, MAP_ACC_NO_CHARGE, MAP_COPY_ON_WRITE, MAP_CREATE_GUARD, MAP_CREATE_STACK_GAP_DN, MAP_CREATE_STACK_GAP_UP, MAP_DISABLE_COREDUMP, MAP_DISABLE_SYNCER, MAP_ENTRY_COW, MAP_ENTRY_GROWS_DOWN, MAP_ENTRY_GROWS_UP, MAP_ENTRY_GUARD, MAP_ENTRY_NEEDS_COPY, MAP_ENTRY_NOCOREDUMP, MAP_ENTRY_NOFAULT, MAP_ENTRY_NOSYNC, MAP_ENTRY_SPLIT_BOUNDARY_SHIFT, MAP_ENTRY_STACK_GAP_DN, MAP_ENTRY_STACK_GAP_UP, MAP_ENTRY_USER_WIRED, MAP_ENTRY_VN_EXEC, MAP_ENTRY_WRITECNT, MAP_INHERIT_SHARE, MAP_NOFAULT, MAP_PREFAULT, MAP_PREFAULT_PARTIAL, MAP_SPLIT_BOUNDARY_MASK, MAP_SPLIT_BOUNDARY_SHIFT, MAP_STACK_GROWS_DOWN, MAP_STACK_GROWS_UP, MAP_VN_EXEC, MAP_WRITECOUNT, MAP_WXORX, vm_map_entry::max_protection, vm_map_entry::next_read, OBJ_ANON, OBJ_ONEMAPPING, vm_map_entry::object, OFF_TO_IDX, vm_map_entry::offset, pmap_growkernel(), vm_map_entry::protection, vm_map_entry::read_ahead, vm_object::ref_count, vm_object::shadow_count, vm_map::size, vm_map_entry::start, swap_reserve(), VM_FAULT_READ_AHEAD_INIT, VM_INHERIT_DEFAULT, VM_INHERIT_SHARE, VM_MAP_ASSERT_LOCKED, vm_map_entry_create(), vm_map_entry_link(), vm_map_entry_resize(), vm_map_entry_succ(), vm_map_lookup_entry(), vm_map_pmap_enter(), vm_map_range_valid(), vm_map_try_merge_entries(), vm_map_object::vm_object, vm_object_clear_flag(), vm_object_coalesce(), vm_object_reference(), VM_OBJECT_WLOCK, VM_OBJECT_WUNLOCK, VM_PROT_EXECUTE, VM_PROT_NONE, VM_PROT_WRITE, vm_map_entry::wired_count, and vm_map_entry::wiring_thread.
Referenced by kern_break(), kmap_alloc_wait(), kmapent_alloc(), kmem_init(), uma_startup2(), and vm_map_find().
int vm_map_locked | ( | vm_map_t | map | ) |
Definition at line 785 of file vm_map.c.
References vm_map::lock, vm_map::system_map, and vm_map::system_mtx.
Referenced by kmapent_alloc(), and vm_map_lookup_entry().
int vm_map_lookup | ( | vm_map_t * | var_map, |
vm_offset_t | vaddr, | ||
vm_prot_t | fault_typea, | ||
vm_map_entry_t * | out_entry, | ||
vm_object_t * | object, | ||
vm_pindex_t * | pindex, | ||
vm_prot_t * | out_prot, | ||
boolean_t * | wired | ||
) |
Definition at line 4907 of file vm_map.c.
References vm_map_entry::cred, vm_map_entry::eflags, vm_map_entry::end, KERN_INVALID_ADDRESS, KERN_PROTECTION_FAILURE, KERN_RESOURCE_SHORTAGE, KERN_SUCCESS, kernel_map, MAP_ENTRY_COW, MAP_ENTRY_GUARD, MAP_ENTRY_IS_SUB_MAP, MAP_ENTRY_NEEDS_COPY, MAP_ENTRY_STACK_GAP_DN, MAP_ENTRY_STACK_GAP_UP, MAP_ENTRY_USER_WIRED, vm_map_entry::max_protection, vm_map_entry::object, OFF_TO_IDX, vm_map_entry::offset, vm_map_entry::protection, vm_map_entry::start, vm_map_object::sub_map, swap_release_by_cred(), swap_reserve_by_cred(), vm_map::system_map, vm_map_growstack(), vm_map_lock_downgrade, vm_map_lock_read, vm_map_lock_upgrade, vm_map_lookup_entry(), vm_map_unlock, vm_map_unlock_read, vm_map_object::vm_object, vm_object_allocate_anon(), vm_object_shadow(), VM_PROT_ALL, VM_PROT_COPY, VM_PROT_FAULT_LOOKUP, VM_PROT_NONE, VM_PROT_WRITE, and vm_map_entry::wired_count.
Referenced by vm_fault_lookup().
void vm_map_lookup_done | ( | vm_map_t | map, |
vm_map_entry_t | entry | ||
) |
Definition at line 5159 of file vm_map.c.
Referenced by unlock_map(), and vm_fault_soft_fast().
boolean_t vm_map_lookup_entry | ( | vm_map_t | map, |
vm_offset_t | address, | ||
vm_map_entry_t * | entry | ||
) |
Definition at line 1522 of file vm_map.c.
References vm_map_entry::end, vm_map::header, vm_map_entry::left, vm_map::lock, vm_map_entry::right, vm_map::root, vm_map_entry::start, vm_map_locked(), vm_map_splay(), and VM_MAP_UNLOCK_CONSISTENT.
Referenced by kern_mincore(), kern_munmap(), vm_fault_lookup(), vm_map_check_protection(), vm_map_entry_in_transition(), vm_map_inherit(), vm_map_insert(), vm_map_lookup(), vm_map_lookup_clip_start(), vm_map_lookup_locked(), vm_map_madvise(), vm_map_protect(), vm_map_submap(), vm_map_sync(), and vm_map_wire_locked().
int vm_map_lookup_locked | ( | vm_map_t * | var_map, |
vm_offset_t | vaddr, | ||
vm_prot_t | fault_typea, | ||
vm_map_entry_t * | out_entry, | ||
vm_object_t * | object, | ||
vm_pindex_t * | pindex, | ||
vm_prot_t * | out_prot, | ||
boolean_t * | wired | ||
) |
Definition at line 5078 of file vm_map.c.
References vm_map_entry::eflags, KERN_FAILURE, KERN_INVALID_ADDRESS, KERN_PROTECTION_FAILURE, KERN_SUCCESS, MAP_ENTRY_IS_SUB_MAP, MAP_ENTRY_NEEDS_COPY, vm_map_entry::object, OFF_TO_IDX, vm_map_entry::offset, vm_map_entry::protection, vm_map_entry::start, vm_map::system_map, vm_map_lookup_entry(), vm_map_object::vm_object, VM_PROT_EXECUTE, VM_PROT_READ, VM_PROT_WRITE, and vm_map_entry::wired_count.
Referenced by vm_fault_relookup().
int vm_map_madvise | ( | vm_map_t | map, |
vm_offset_t | start, | ||
vm_offset_t | end, | ||
int | behav | ||
) |
Definition at line 2910 of file vm_map.c.
References vm_object::backing_object, vm_map_entry::eflags, vm_map_entry::end, KERN_SUCCESS, MAP_ENTRY_BEHAV_NORMAL, MAP_ENTRY_BEHAV_RANDOM, MAP_ENTRY_BEHAV_SEQUENTIAL, MAP_ENTRY_IS_SUB_MAP, MAP_ENTRY_NOCOREDUMP, MAP_ENTRY_NOSYNC, MAP_PREFAULT_MADVISE, vm_map_entry::object, OFF_TO_IDX, vm_map_entry::offset, vm_map::pmap, pmap_advise(), vm_map_entry::protection, vm_map_entry::start, vm_map_clip_end(), vm_map_entry_set_behavior(), vm_map_entry_succ(), vm_map_lock, vm_map_lock_read, vm_map_lookup_clip_start(), vm_map_lookup_entry(), vm_map_pmap_enter(), VM_MAP_RANGE_CHECK, vm_map_try_merge_entries(), vm_map_unlock, vm_map_unlock_read, vm_mmap_to_errno(), vm_map_object::vm_object, vm_object_madvise(), and vm_map_entry::wired_count.
Referenced by kern_madvise().
|
static |
Definition at line 237 of file vm_map.h.
Referenced by kern_break(), kern_mincore(), kernacc(), kmap_alloc_wait(), kmapent_alloc(), memguard_fudge(), sys_mlockall(), sys_munlockall(), useracc(), vm_ksubmap_init(), vm_map_alignspace(), vm_map_find(), vm_map_findspace(), vm_map_min_KBI(), vm_swapout_map_deactivate_pages(), vmspace_dofree(), and vmspace_fork().
vm_offset_t vm_map_max_KBI | ( | const struct vm_map * | map | ) |
Definition at line 5168 of file vm_map.c.
References vm_map_unlock_read.
|
static |
Definition at line 244 of file vm_map.h.
References vm_map::header, and vm_map_entry::start.
Referenced by kmap_alloc_wait(), kmapent_alloc(), kmem_subinit(), kva_import(), memguard_fudge(), sys_mlockall(), sys_munlockall(), vm_ksubmap_init(), vm_map_find(), vm_map_findspace(), vm_map_pmap_KBI(), vm_swapout_map_deactivate_pages(), vmspace_dofree(), and vmspace_fork().
vm_offset_t vm_map_min_KBI | ( | const struct vm_map * | map | ) |
Definition at line 5175 of file vm_map.c.
References vm_map_max().
|
static |
Definition at line 257 of file vm_map.h.
References vm_map::pmap.
Referenced by sys_mlockall(), sys_munlockall(), vm_map_unbusy(), and vm_map_wait_busy().
|
static |
Definition at line 251 of file vm_map.h.
References vm_map_entry::end, and vm_map::header.
Referenced by kmem_subinit(), vm_map_delete(), and vm_swapout_map_deactivate_pages().
pmap_t vm_map_pmap_KBI | ( | vm_map_t | map | ) |
Definition at line 5182 of file vm_map.c.
References vm_map_min().
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 | ||
) |
Definition at line 2699 of file vm_map.c.
References vm_object::charge, vm_map_entry::cred, vm_object::cred, vm_map_entry::eflags, vm_map_entry::end, ENTRY_CHARGED, vm_map::flags, vm_object::flags, KERN_INVALID_ARGUMENT, KERN_OUT_OF_BOUNDS, KERN_PROTECTION_FAILURE, KERN_RESOURCE_SHORTAGE, KERN_SUCCESS, MAP_ENTRY_GUARD, MAP_ENTRY_IN_TRANSITION, MAP_ENTRY_IS_SUB_MAP, MAP_ENTRY_NEEDS_COPY, MAP_ENTRY_NEEDS_WAKEUP, MAP_ENTRY_USER_WIRED, MAP_WXORX, MASK, vm_map_entry::max_protection, OBJ_SWAP, vm_map_entry::object, OBJT_DEFAULT, vm_map::pmap, pmap_protect(), vm_map_entry::protection, vm_object::size, vm_map_entry::start, swap_reserve(), vm_object::type, vm_fault_copy_entry(), vm_map_clip_end(), vm_map_clip_start(), vm_map_entry_pred(), vm_map_entry_succ(), vm_map_lock, vm_map_lookup_entry(), VM_MAP_PROTECT_SET_MAXPROT, VM_MAP_PROTECT_SET_PROT, VM_MAP_RANGE_CHECK, vm_map_try_merge_entries(), vm_map_unlock, vm_map_unlock_and_wait, vm_map_wait_busy(), vm_map_object::vm_object, VM_OBJECT_WLOCK, VM_OBJECT_WUNLOCK, VM_PROT_EXECUTE, and VM_PROT_WRITE.
Referenced by kern_mprotect().
|
inlinestatic |
Definition at line 263 of file vm_map.h.
References vm_map::flags.
Referenced by kern_madvise(), kern_mmap(), kern_munmap(), vm_fault_quick_hold_pages(), vm_map_find(), and vm_map_insert().
bool vm_map_range_valid_KBI | ( | vm_map_t | map, |
vm_offset_t | start, | ||
vm_offset_t | end | ||
) |
Definition at line 5189 of file vm_map.c.
References vm_map::pmap.
int vm_map_remove | ( | vm_map_t | map, |
vm_offset_t | start, | ||
vm_offset_t | end | ||
) |
Definition at line 3986 of file vm_map.c.
References vm_map_delete(), vm_map_lock, VM_MAP_RANGE_CHECK, and vm_map_unlock.
Referenced by kmapent_free(), and vmspace_dofree().
void vm_map_startup | ( | void | ) |
Definition at line 259 of file vm_map.c.
References kmapent_alloc(), kmapent_free(), KMAPENT_RESERVE, kmapentzone, map_sleep_mtx, mapentzone, UMA_ALIGN_PTR, uma_prealloc(), uma_zcreate(), UMA_ZONE_NOBUCKET, UMA_ZONE_NOFREE, uma_zone_reserve(), uma_zone_set_allocf(), uma_zone_set_freef(), UMA_ZONE_VM, vmspace_zinit(), and vmspace_zone.
Referenced by vm_mem_init().
Definition at line 2552 of file vm_map.c.
References vm_map_entry::eflags, vm_map_entry::end, vm_map::flags, KERN_INVALID_ARGUMENT, KERN_SUCCESS, MAP_ENTRY_COW, MAP_ENTRY_IS_SUB_MAP, MAP_IS_SUB_MAP, vm_map_entry::object, vm_map_object::sub_map, vm_map_clip_end(), vm_map_clip_start(), vm_map_lock, vm_map_lookup_entry(), VM_MAP_RANGE_CHECK, vm_map_unlock, and vm_map_object::vm_object.
Referenced by kmem_subinit().
int vm_map_sync | ( | vm_map_t | map, |
vm_offset_t | start, | ||
vm_offset_t | end, | ||
boolean_t | syncio, | ||
boolean_t | invalidate | ||
) |
Definition at line 3675 of file vm_map.c.
References vm_map_entry::eflags, vm_map_entry::end, KERN_FAILURE, KERN_INVALID_ADDRESS, KERN_INVALID_ARGUMENT, KERN_SUCCESS, MAP_ENTRY_IS_SUB_MAP, MAP_ENTRY_SPLIT_BOUNDARY_MASK, MAP_ENTRY_SPLIT_BOUNDARY_SHIFT, MAP_ENTRY_USER_WIRED, vm_map_entry::object, vm_map_entry::offset, vm_map::pmap, pmap_remove(), vm_map_entry::start, vm_map_object::sub_map, vm_map::timestamp, vm_map_entry_succ(), vm_map_lock_read, vm_map_lookup_entry(), VM_MAP_RANGE_CHECK, vm_map_unlock_read, vm_map_object::vm_object, vm_object_deallocate(), vm_object_reference(), and vm_object_sync().
Referenced by kern_msync().
void vm_map_try_merge_entries | ( | vm_map_t | map, |
vm_map_entry_t | prev, | ||
vm_map_entry_t | entry | ||
) |
Definition at line 2317 of file vm_map.c.
References vm_map_entry::eflags, MAP_ENTRY_NOMERGE_MASK, UNLINK_MERGE_NEXT, VM_MAP_ASSERT_LOCKED, vm_map_entry_unlink(), vm_map_mergeable_neighbors(), and vm_map_merged_neighbor_dispose().
Referenced by vm_map_inherit(), vm_map_insert(), vm_map_madvise(), vm_map_protect(), and vm_map_wire_locked().
void vm_map_unbusy | ( | vm_map_t | map | ) |
Definition at line 854 of file vm_map.c.
References vm_map::busy, vm_map::flags, MAP_BUSY_WAKEUP, VM_MAP_ASSERT_LOCKED, and vm_map_modflags().
Referenced by vm_map_wire_locked().
int vm_map_unwire | ( | vm_map_t | map, |
vm_offset_t | start, | ||
vm_offset_t | end, | ||
int | flags | ||
) |
Definition at line 3215 of file vm_map.c.
Referenced by kern_munlock(), sys_munlockall(), and vsunlock().
void vm_map_wait_busy | ( | vm_map_t | map | ) |
Definition at line 866 of file vm_map.c.
References vm_map::busy, vm_map::lock, MAP_BUSY_WAKEUP, vm_map::system_map, vm_map::system_mtx, vm_map::timestamp, VM_MAP_ASSERT_LOCKED, and vm_map_modflags().
Referenced by vm_map_protect(), and vmspace_fork().
void vm_map_wakeup | ( | vm_map_t | map | ) |
Definition at line 832 of file vm_map.c.
References map_sleep_mtx, and vm_map::root.
Referenced by kmap_free_wakeup(), and vm_map_wire_locked().
int vm_map_wire | ( | vm_map_t | map, |
vm_offset_t | start, | ||
vm_offset_t | end, | ||
int | flags | ||
) |
Definition at line 3408 of file vm_map.c.
Referenced by kern_mlock(), sys_mlockall(), and vslock().
int vm_map_wire_locked | ( | vm_map_t | map, |
vm_offset_t | start, | ||
vm_offset_t | end, | ||
int | flags | ||
) |
Definition at line 3425 of file vm_map.c.
References vm_map_entry::eflags, vm_map_entry::end, KERN_INVALID_ADDRESS, KERN_INVALID_ARGUMENT, KERN_RESOURCE_SHORTAGE, KERN_SUCCESS, MAP_ENTRY_IN_TRANSITION, MAP_ENTRY_NEEDS_WAKEUP, MAP_ENTRY_SPLIT_BOUNDARY_MASK, MAP_ENTRY_SPLIT_BOUNDARY_SHIFT, MAP_ENTRY_USER_WIRED, MAP_ENTRY_WIRE_SKIPPED, vm_map_entry::protection, vm_map_entry::start, vm_map::timestamp, vm_fault(), VM_FAULT_WIRE, VM_MAP_ASSERT_LOCKED, vm_map_busy(), vm_map_clip_end(), vm_map_clip_start(), vm_map_entry_in_transition(), vm_map_entry_pred(), vm_map_entry_succ(), vm_map_entry_unwire(), vm_map_lock, vm_map_lookup_entry(), VM_MAP_RANGE_CHECK, vm_map_try_merge_entries(), vm_map_unbusy(), vm_map_unlock, vm_map_wakeup(), vm_map_wire_entry_failure(), VM_MAP_WIRE_HOLESOK, VM_MAP_WIRE_USER, vm_map_wire_user_count_add(), vm_map_wire_user_count_sub(), VM_MAP_WIRE_WRITE, VM_PROT_EXECUTE, VM_PROT_NONE, VM_PROT_READ, VM_PROT_WRITE, vm_map_entry::wired_count, and vm_map_entry::wiring_thread.
Referenced by kern_break(), and vm_mmap_object().
|
static |
Definition at line 303 of file vm_map.h.
Referenced by kern_mincore(), vm_fault_prefault(), vmspace_alloc(), vmspace_dofree(), vmspace_exit(), vmspace_resident_count(), and vmspace_zinit().
long vmspace_resident_count | ( | struct vmspace * | vmspace | ) |
Definition at line 881 of file vm_map.c.
References pmap_resident_count, and vmspace_pmap().
Referenced by swapout(), and vm_daemon().
long vmspace_swap_count | ( | struct vmspace * | vmspace | ) |
Definition at line 2754 of file swap_pager.c.
References swblk::d, vm_map_entry::eflags, vm_map_entry::end, vm_object::flags, MAP_ENTRY_IS_SUB_MAP, OBJ_SWAP, vm_map_entry::object, OFF_TO_IDX, vm_map_entry::offset, swblk::p, vm_map_entry::start, SWAP_META_PAGES, vm_object::swp, vm_object::swp_blks, vm_object::un_pager, vmspace::vm_map, VM_MAP_ENTRY_FOREACH, vm_map_object::vm_object, VM_OBJECT_RLOCK, and VM_OBJECT_RUNLOCK.
Referenced by vm_pageout_oom().