Data Structures | |
| struct | zxfoundation::memory::vm::vm_accounting |
| struct | zxfoundation::memory::vm::vm_page_map |
| Lazily-allocated per-VMA page map. More... | |
| struct | zxfoundation::memory::vm::vm_page_slot |
| struct | zxfoundation::memory::vm::vm_region |
| struct | zxfoundation::memory::vm::vm_space |
Enumerations | |
| enum class | vm_backing : u8 { anonymous = 0 , physical = 1 , portal_shared = 2 , file = 3 , ipc_shared = 4 } |
| Describes how a vm_region obtains its physical memory. | |
| enum class | vm_flags : u32 { none = 0 , fixed = 1U << 0 , anonymous = 1U << 1 , physical = 1U << 2 , portal = 1U << 3 , stack = 1U << 4 , guard = 1U << 5 , pinned = 1U << 6 , dma = 1U << 7 , no_merge = 1U << 8 , user = 1U << 9 , kernel = 1U << 10 , cow = 1U << 11 , file = 1U << 12 , ipc = 1U << 13 , hugepage_1m = 1U << 14 , hugepage_2g = 1U << 15 , shared_read = 1U << 17 } |
| Mapping flags controlling allocation and behavior. | |
| enum class | vm_page_state : u8 { empty = 0 , resident = 1 , cow = 2 , file_cache = 3 , portal = 4 , ipc = 5 } |
| enum class | vm_prot : u32 { none = 0 , read = 1U << 0 , write = 1U << 1 , exec = 1U << 2 , rw = read | write , rx = read | exec , rwx = read | write | exec } |
| Page protection flags (combinable). | |
Functions | |
| auto | clear () noexcept -> void |
| auto | destroy () noexcept -> void |
| auto | dgp_access () const noexcept -> dgp::memory_contract::memory_access |
| auto | dgp_generation () const noexcept -> u64 |
| auto | dgp_rights () const noexcept -> dgp::isolation::isolation_rights |
| auto | dgp_scope () const noexcept -> dgp::memory_contract::memory_scope |
| auto | find_page (u64 page_va) const noexcept -> const vm_page_slot * |
| auto | find_page (u64 page_va) noexcept -> vm_page_slot * |
| auto | find_page (u64 page_va) const noexcept -> const vm_page_slot * |
| auto | find_page (u64 page_va) noexcept -> vm_page_slot * |
| auto | invalidate () const noexcept -> dgp::memory_contract::invalidation_scope |
| auto | mapping_generation () const noexcept -> u64 |
| auto | matches (u64 page_va) const noexcept -> bool |
| auto | mo () const noexcept -> const objects::memory_object * |
| auto | mo () noexcept -> objects::memory_object * |
| auto | numa_node () const noexcept -> u8 |
| constexpr auto | zxfoundation::memory::vm::operator! (vm_flags f) noexcept -> bool |
| constexpr auto | zxfoundation::memory::vm::operator! (vm_prot f) noexcept -> bool |
| constexpr auto | zxfoundation::memory::vm::operator& (vm_flags a, vm_flags b) noexcept -> vm_flags |
| constexpr auto | zxfoundation::memory::vm::operator& (vm_prot a, vm_prot b) noexcept -> vm_prot |
| constexpr auto | zxfoundation::memory::vm::operator&= (vm_flags &a, vm_flags b) noexcept -> vm_flags & |
| constexpr auto | zxfoundation::memory::vm::operator&= (vm_prot &a, vm_prot b) noexcept -> vm_prot & |
| auto | operator= (const vm_region &)=delete |
| auto | operator= (vm_region &&)=delete |
| auto | operator= (const vm_space &)=delete |
| auto | operator= (vm_space &&)=delete |
| constexpr auto | zxfoundation::memory::vm::operator| (vm_flags a, vm_flags b) noexcept -> vm_flags |
| constexpr auto | zxfoundation::memory::vm::operator| (vm_prot a, vm_prot b) noexcept -> vm_prot |
| constexpr auto | zxfoundation::memory::vm::operator|= (vm_flags &a, vm_flags b) noexcept -> vm_flags & |
| constexpr auto | zxfoundation::memory::vm::operator|= (vm_prot &a, vm_prot b) noexcept -> vm_prot & |
| constexpr auto | zxfoundation::memory::vm::operator~ (vm_flags f) noexcept -> vm_flags |
| constexpr auto | zxfoundation::memory::vm::operator~ (vm_prot f) noexcept -> vm_prot |
| constexpr auto | page_count () const noexcept -> u64 |
| auto | release_page (u64 page_va) noexcept -> bool |
| auto | release_page (u64 page_va) noexcept -> bool |
| auto | reserve_capacity (u32 min_capacity) noexcept -> bool |
| auto | reserve_page (u64 page_va) noexcept -> vm_page_slot * |
| auto | reserve_page (u64 page_va) noexcept -> vm_page_slot * |
| auto | set_dgp_access (dgp::memory_contract::memory_access v) noexcept -> void |
| auto | set_dgp_generation (u64 v) noexcept -> void |
| auto | set_dgp_rights (dgp::isolation::isolation_rights v) noexcept -> void |
| auto | set_dgp_scope (dgp::memory_contract::memory_scope v) noexcept -> void |
| auto | set_invalidate (dgp::memory_contract::invalidation_scope v) noexcept -> void |
| auto | set_mapping_generation (u64 v) noexcept -> void |
| auto | set_numa_node (u8 v) noexcept -> void |
| auto | set_storage_key (u8 v) noexcept -> void |
| constexpr auto | size () const noexcept -> u64 |
| auto | storage_key () const noexcept -> u8 |
| auto | transfer_to (vm_page_slot &target) noexcept -> void |
| auto | zxfoundation::memory::vm::vm_commit_admitted (const vm_space &space, u64 additional_pages) noexcept -> bool |
Test whether additional_pages fit in space's commit budget. | |
| vm_region (const vm_region &)=delete | |
| vm_region (vm_region &&)=delete | |
| vm_space (const vm_space &)=delete | |
| vm_space (vm_space &&)=delete | |
Variables | |
| u8 | _pad [1] {} |
| u8 | _pad0 [3] {} |
| u32 | _pad_file {0} |
| u16 | _pad_policy {0} |
| scoms::kobject::bobject * | address_space_object {nullptr} |
| u64 | asce_val {0} |
| vm_backing | backing {vm_backing::anonymous} |
| u64 | brk {0} |
| page_cache::cache_binding | cache_binding {} |
| u32 | capacity {0} |
| u64 | commit_limit_pages {VM_DEFAULT_COMMIT_LIMIT_PAGES} |
| Maximum committed anonymous/physical/IPC pages for this domain. | |
| atomic< u64 > | committed {0} |
| atomic< u64 > | committed {0} |
| u32 | count {0} |
| u64 | dgp_generation {0} |
| u8 | dirty {0} |
| atomic< u64 > | fault_count {0} |
| u32 | file_index {0} |
| void * | file_node {nullptr} |
| void * | file_node {nullptr} |
| u32 | file_page_offset {0} |
| u8 | flags {0} |
| vm_flags | flags {vm_flags::none} |
| objects::memory_object_ref | grant_object {} |
| scoms::kobject::bobject | ko {} |
| u64 | limit_pages {0} |
| sync::qspinlock::qspinlock | lock {} |
| objects::memory_object_ref | mapped_extent {} |
| u64 | mapping_generation {0} |
| objects::memory_object_ref | mapping_object {} |
| u32 | max_regions {4096} |
| constexpr u32 | zxfoundation::memory::vm::MAX_VM_REGIONS = 4096U |
| Maximum number of VM regions system-wide (SCOMS scoms_table capacity). | |
| u64 | mmap_base {0} |
| u8 | numa_node {0} |
| u32 | owner_domain {~0U} |
| u32 | owner_domain {0} |
| scoms::kobject::bobject * | owner_object {nullptr} |
| vm_space * | owning_space {nullptr} |
| Back-pointer to the vm_space whose rb-tree contains this region. | |
| vm_page_map | pages {} |
| u64 | phys {0} |
| u64 | phys_base {0} |
| u32 | portal_id {~0U} |
| vm_prot | prot {vm_prot::none} |
| lib::rb_node | rb {} |
| sync::rcu::rcu_head | rcu {} |
| u32 | region_count {0} |
| atomic< u64 > | resident {0} |
| atomic< u64 > | resident {0} |
| vm_page_slot * | slots {nullptr} |
| vm_page_state | state {vm_page_state::empty} |
| u8 | storage_key {0} |
| u32 | storage_key_generation {0} |
| objects::memory_object_ref | storage_object {} |
| u64 | total_committed {0} |
| u64 | total_mapped {0} |
| u64 | total_resident {0} |
| lib::rb_root_cached | tree {} |
| u64 | va_end {0} |
| u64 | va_page {0} |
| u64 | va_start {0} |
| constexpr u64 | zxfoundation::memory::vm::VM_DEFAULT_COMMIT_LIMIT_PAGES = 262144ULL |
| Default per-domain committed-page budget (1 GiB at 4 KiB pages). | |
| constexpr u64 | zxfoundation::memory::vm::VM_MMAP_BASE = 0x0000'0040'0000'0000ULL |
| constexpr u64 | zxfoundation::memory::vm::VM_STACK_TOP = 0x0000'0080'0000'0000ULL |
| constexpr u64 | zxfoundation::memory::vm::VM_USER_END = 0x0000'0080'0000'0000ULL |
| constexpr u64 | zxfoundation::memory::vm::VM_USER_START = 0x0000'0000'0040'0000ULL |
Files | |
| file | zxfoundation/memory/vm.zcomponent/types.cxxm |
| file | zxfoundation/memory/vm.zcomponent/types.cxx |