Page Table
include/mem/page_table.h View source View on GitHubStructs
Section titled “Structs”pte_tagged
Section titled “pte_tagged”struct pte_tagged {
enum pte_tag_type type;
uint64_t payload;
}; pte_tag_type
Section titled “pte_tag_type”enum pte_tag_type : uint8_t {
PTE_TAG_TYPE_NONE = 0,
PTE_TAG_TYPE_DEMAND_PAGED = 1,
}; Type Aliases
Section titled “Type Aliases”pte_atomic_t
Section titled “pte_atomic_t”typedef _Atomic uint64_t pte_atomic_t; Functions
Section titled “Functions”pte_tagged_check
Section titled “pte_tagged_check”void pte_tagged_check(struct pte_tagged *pt); pte_tagged_pack
Section titled “pte_tagged_pack”uint64_t pte_tagged_pack(struct pte_tagged *pt); pte_tagged_unpack
Section titled “pte_tagged_unpack”struct pte_tagged pte_tagged_unpack(pte_t pte); pte_locked
Section titled “pte_locked”bool pte_locked(pte_atomic_t *pte); pte_read
Section titled “pte_read”uint64_t pte_read(pte_atomic_t *pte); pte_or
Section titled “pte_or”uint64_t pte_or(pte_atomic_t *pte, uint64_t val); pte_unlock_internal
Section titled “pte_unlock_internal”void pte_unlock_internal(pte_atomic_t *pte); pte_lock_internal
Section titled “pte_lock_internal”void pte_lock_internal(pte_atomic_t *pte); pte_lock_irql
Section titled “pte_lock_irql”enum irql pte_lock_irql(pte_atomic_t *pte); pte_unlock_irql
Section titled “pte_unlock_irql”void pte_unlock_irql(pte_atomic_t *pte, enum irql old_irql); pte_has_tag
Section titled “pte_has_tag”bool pte_has_tag(pte_atomic_t *pte); pte_tag_pte
Section titled “pte_tag_pte”uint64_t pte_tag_pte(pte_atomic_t *pte, struct pte_tagged *ptag); pte_read_tag
Section titled “pte_read_tag”struct pte_tagged pte_read_tag(pte_atomic_t *pte); pte_in_use
Section titled “pte_in_use”bool pte_in_use(pte_atomic_t *pte); Macros
Section titled “Macros”PT_LEVELS
Section titled “PT_LEVELS”#define PT_LEVELS 4 PT_SHIFT_L1
Section titled “PT_SHIFT_L1”#define PT_SHIFT_L1 12 PT_SHIFT_L2
Section titled “PT_SHIFT_L2”#define PT_SHIFT_L2 21 PT_SHIFT_L3
Section titled “PT_SHIFT_L3”#define PT_SHIFT_L3 30 PT_SHIFT_L4
Section titled “PT_SHIFT_L4”#define PT_SHIFT_L4 39 PT_STRIDE
Section titled “PT_STRIDE”#define PT_STRIDE 9 PTE_LOCK_SHIFT
Section titled “PTE_LOCK_SHIFT”#define PTE_LOCK_SHIFT 9 PTE_AVAIL2_SHIFT
Section titled “PTE_AVAIL2_SHIFT”#define PTE_AVAIL2_SHIFT 10 PTE_LOCK_BIT
Section titled “PTE_LOCK_BIT”#define PTE_LOCK_BIT ((uint64_t) 1 << PTE_LOCK_SHIFT) PTE_AVAIL2_BIT
Section titled “PTE_AVAIL2_BIT”#define PTE_AVAIL2_BIT ((uint64_t) 1 << PTE_AVAIL2_SHIFT) PTE_TAGGED_TYPE_SHIFT
Section titled “PTE_TAGGED_TYPE_SHIFT”#define PTE_TAGGED_TYPE_SHIFT (PAGE_PRESENT_SHIFT + 1) PTE_TAGGED_TYPE_MASK
Section titled “PTE_TAGGED_TYPE_MASK”#define PTE_TAGGED_TYPE_MASK 0x3ULL PTE_TAGGED_PAYLOAD_LOW_BITS
Section titled “PTE_TAGGED_PAYLOAD_LOW_BITS”#define PTE_TAGGED_PAYLOAD_LOW_BITS 6 PTE_TAGGED_PAYLOAD_LOW_SHIFT
Section titled “PTE_TAGGED_PAYLOAD_LOW_SHIFT”#define PTE_TAGGED_PAYLOAD_LOW_SHIFT 3 /* packed position of the low chunk */ PTE_TAGGED_PAYLOAD_HIGH_SHIFT
Section titled “PTE_TAGGED_PAYLOAD_HIGH_SHIFT”#define PTE_TAGGED_PAYLOAD_HIGH_SHIFT \
11 /* packed position of the high chunk \
*/ PTE_TAGGED_PAYLOAD_LOW_MASK
Section titled “PTE_TAGGED_PAYLOAD_LOW_MASK”#define PTE_TAGGED_PAYLOAD_LOW_MASK ((1ULL << PTE_TAGGED_PAYLOAD_LOW_BITS) - 1) PTE_TAGGED_PAYLOAD_BITS
Section titled “PTE_TAGGED_PAYLOAD_BITS”#define PTE_TAGGED_PAYLOAD_BITS \
(PTE_TAGGED_PAYLOAD_LOW_BITS + (64 - PTE_TAGGED_PAYLOAD_HIGH_SHIFT)) PTE_TAGGED_GET_TYPE
Section titled “PTE_TAGGED_GET_TYPE”#define PTE_TAGGED_GET_TYPE(pte) \
(((pte) >> PTE_TAGGED_TYPE_SHIFT) & PTE_TAGGED_TYPE_MASK) PTE_TAGGED_SET_TYPE
Section titled “PTE_TAGGED_SET_TYPE”#define PTE_TAGGED_SET_TYPE(type) ((uint64_t) (type) << PTE_TAGGED_TYPE_SHIFT)