Skip to content

Page

include/mem/page.h View source View on GitHub
struct page (1 field) source
§ uint64_t meta
struct page_table (1 field) source
§ pte_t entries[512]
enum page_tag (4 variants) source

Low 3 bits

§ PAGE_TAG_NONE = 0
§ PAGE_TAG_BUDDY = 1
§ PAGE_TAG_FOLIO = 2
§ PAGE_TAG_ARENA = 3

cached as a free single page in a domain arena

enum page_tag page_get_tag(const struct page *p)
source
void page_set_tag(struct page *p, enum page_tag tag)
source
uint64_t page_get_payload(const struct page *p)
source
void page_set_payload(struct page *p, uint64_t payload)
source
void page_assert_tag(const struct page *p, enum page_tag expected)
source
struct page * page_for_pfn(pfn_t pfn)
source
struct page * page_for_paddr(paddr_t paddr)
source
pfn_t page_get_pfn(const struct page *bp)
source
paddr_t page_get_paddr(const struct page *bp)
source
vaddr_t page_get_vaddr(const struct page *bp)
source
#define PAGE_SIZE KIB(4)
source
#define PAGE_2MB MIB(2)
source
#define PAGE_1GB GIB(1)
source
#define PAGE_PRESENT_SHIFT (0)
source
#define PAGE_PRESENT (0x1UL)
source
#define PAGE_WRITE (0x2UL)
source
#define PAGE_USER_ALLOWED (0x4UL)
source
#define PAGE_XD BIT(63)
source

E(x)ecute (D)isable

#define PAGE_PHYS_MASK (0x00FFFFFFF000UL)
source
#define PAGE_UNCACHABLE BIT(4)
source

PCD

#define PAGE_NO_FLAGS (0)
source
#define PAGE_WRITETHROUGH BIT(3)
source
#define PAGE_HUGE BIT(7)
source

PS: 2MB at the PD level, 1GB at the PDPT

#define PAGE_PAGEABLE (0)
source
#define PAGE_MOVABLE (0)
source
#define PAGE_2MB_PHYS_MASK (0x00FFFFE00000UL)
source
#define PAGE_1GB_PHYS_MASK (0x00FFC0000000UL)
source
#define PAGE_ALIGN_DOWN(x)
source
Expansion
#define PAGE_ALIGN_DOWN(x) ALIGN_DOWN((uintptr_t) (x), PAGE_SIZE)
#define PAGE_ALIGN_UP(x)
source
Expansion
#define PAGE_ALIGN_UP(x) ALIGN_UP((uintptr_t) (x), PAGE_SIZE)
#define PAGE_ALIGN_UP_WRAPPING(x)
source
Expansion
#define PAGE_ALIGN_UP_WRAPPING(x) ALIGN_UP_WRAPPING((uintptr_t) (x), PAGE_SIZE)
#define IS_PAGE_ALIGNED(x)
source
Expansion
#define IS_PAGE_ALIGNED(x) IS_ALIGNED((uintptr_t) (x), PAGE_SIZE)
#define PAGE_2MB_ALIGN_DOWN(x)
source
Expansion
#define PAGE_2MB_ALIGN_DOWN(x) ALIGN_DOWN((uintptr_t) (x), PAGE_2MB)
#define PAGE_2MB_ALIGN_UP(x)
source
Expansion
#define PAGE_2MB_ALIGN_UP(x) ALIGN_UP((uintptr_t) (x), PAGE_2MB)
#define PAGE_1GB_ALIGN_DOWN(x)
source
Expansion
#define PAGE_1GB_ALIGN_DOWN(x) ALIGN_DOWN((uintptr_t) (x), PAGE_1GB)
#define PAGE_1GB_ALIGN_UP(x)
source
Expansion
#define PAGE_1GB_ALIGN_UP(x) ALIGN_UP((uintptr_t) (x), PAGE_1GB)
#define PAGE_TO_PFN(addr)
source
Expansion
#define PAGE_TO_PFN(addr) ((addr) / PAGE_SIZE)
#define PFN_TO_PAGE(pfn)
source
Expansion
#define PFN_TO_PAGE(pfn) ((pfn) * PAGE_SIZE)
#define PAGES_NEEDED_FOR(bytes)
source
Expansion
#define PAGES_NEEDED_FOR(bytes) DIV_ROUND_UP((bytes), PAGE_SIZE)
#define VMM_MAP_BASE 0xFFFFA00000200000
source
#define VMM_MAP_LIMIT 0xFFFFA00010000000
source
#define PT_ENTRIES 512
source
#define PT_INDEX_MASK 0x1FFULL
source
#define PAGE_4K_SHIFT 12
source
#define PAGE_2M_SHIFT 21
source
#define PAGE_1G_SHIFT 30
source
#define PAGE_TAG_MASK 0x7ULL
source
#define PAGE_PAYLOAD_ALIGNMENT 8
source