Changeset View
Changeset View
Standalone View
Standalone View
sys/vm/vm_map.h
Show First 20 Lines • Show All 91 Lines • ▼ Show 20 Lines | union vm_map_object { | ||||
struct vm_map *sub_map; /* belongs to another map */ | struct vm_map *sub_map; /* belongs to another map */ | ||||
}; | }; | ||||
/* | /* | ||||
* Address map entries consist of start and end addresses, | * Address map entries consist of start and end addresses, | ||||
* a VM object (or sharing map) and offset into that object, | * a VM object (or sharing map) and offset into that object, | ||||
* and user-exported inheritance and protection information. | * and user-exported inheritance and protection information. | ||||
* Also included is control information for virtual copy operations. | * Also included is control information for virtual copy operations. | ||||
*/ | */ | ||||
kib: Perhaps note that the tree of left/right entries is threaded. | |||||
struct vm_map_entry { | struct vm_map_entry { | ||||
struct vm_map_entry *prev; /* previous entry */ | struct vm_map_entry *left; /* left child or previous entry */ | ||||
struct vm_map_entry *next; /* next entry */ | struct vm_map_entry *right; /* right child or next entry */ | ||||
struct vm_map_entry *left; /* left child in binary search tree */ | |||||
struct vm_map_entry *right; /* right child in binary search tree */ | |||||
vm_offset_t start; /* start address */ | vm_offset_t start; /* start address */ | ||||
vm_offset_t end; /* end address */ | vm_offset_t end; /* end address */ | ||||
vm_offset_t next_read; /* vaddr of the next sequential read */ | vm_offset_t next_read; /* vaddr of the next sequential read */ | ||||
vm_size_t max_free; /* max free space in subtree */ | vm_size_t max_free; /* max free space in subtree */ | ||||
union vm_map_object object; /* object I point to */ | union vm_map_object object; /* object I point to */ | ||||
vm_ooffset_t offset; /* offset into object */ | vm_ooffset_t offset; /* offset into object */ | ||||
vm_eflags_t eflags; /* map entry flags */ | vm_eflags_t eflags; /* map entry flags */ | ||||
vm_prot_t protection; /* protection code */ | vm_prot_t protection; /* protection code */ | ||||
▲ Show 20 Lines • Show All 305 Lines • ▼ Show 20 Lines | 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 *); | vm_pindex_t *, vm_prot_t *, boolean_t *); | ||||
void vm_map_lookup_done (vm_map_t, vm_map_entry_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 *); | boolean_t vm_map_lookup_entry (vm_map_t, vm_offset_t, vm_map_entry_t *); | ||||
static inline vm_map_entry_t | static inline vm_map_entry_t | ||||
vm_map_entry_first(vm_map_t map) | vm_map_entry_first(vm_map_t map) | ||||
{ | { | ||||
return (map->header.next); | return (map->header.right); | ||||
} | } | ||||
static inline vm_map_entry_t | static inline vm_map_entry_t | ||||
vm_map_entry_succ(vm_map_entry_t entry) | vm_map_entry_succ(vm_map_entry_t entry) | ||||
{ | { | ||||
vm_map_entry_t after; | |||||
return (entry->next); | after = entry->right; | ||||
if (after->left->start > entry->start) { | |||||
do | |||||
after = after->left; | |||||
while (after->left != entry); | |||||
} | |||||
return (after); | |||||
} | } | ||||
#define VM_MAP_ENTRY_FOREACH(it, map) \ | #define VM_MAP_ENTRY_FOREACH(it, map) \ | ||||
for ((it) = vm_map_entry_first(map); \ | for ((it) = vm_map_entry_first(map); \ | ||||
(it) != &(map)->header; \ | (it) != &(map)->header; \ | ||||
(it) = vm_map_entry_succ(it)) | (it) = vm_map_entry_succ(it)) | ||||
int vm_map_protect (vm_map_t, vm_offset_t, vm_offset_t, vm_prot_t, boolean_t); | int vm_map_protect (vm_map_t, vm_offset_t, vm_offset_t, vm_prot_t, boolean_t); | ||||
int vm_map_remove (vm_map_t, vm_offset_t, vm_offset_t); | int vm_map_remove (vm_map_t, vm_offset_t, vm_offset_t); | ||||
Show All 16 Lines |
Perhaps note that the tree of left/right entries is threaded.