Skip to content

Page Fault

include/mem/page_fault.h View source View on GitHub
struct page_fault_info {
    vaddr_t                 addr;
    enum page_fault_access  access;
    bool                    was_present;
    bool                    user;
};
struct page_fault_handler_ops {
    bool     (*is_valid_fault)(struct page_fault_info *pfi);
    bool     (*update_after_map)(vaddr_t vaddr, struct page *page);
    paddr_t  (*alloc_pages)(vaddr_t vaddr, uint8_t order);
};
struct page_fault_handler {
    struct page_fault_handler_ops  *ops;
};
struct page_fault_scratch_buffer {
    vaddr_t   virt;
    uint64_t  error_code;
};
enum page_fault_access {
    PAGE_FAULT_READ,
    PAGE_FAULT_WRITE,
    PAGE_FAULT_EXEC,
};
enum page_fault_error_code : uint64_t {
    PAGE_FAULT_EC_PRESENT = 1ULL << 0,
    PAGE_FAULT_EC_WRITE = 1ULL << 1,
    PAGE_FAULT_EC_USER = 1ULL << 2,
    PAGE_FAULT_EC_RESERVED = 1ULL << 3,
    PAGE_FAULT_EC_INSTRUCTION = 1ULL << 4,
    PAGE_FAULT_EC_PROTECTION_KEY = 1ULL << 5,
    PAGE_FAULT_EC_SHADOW_STACK = 1ULL << 6,
    PAGE_FAULT_EC_SGX = 1ULL << 15,
};
enum irq_result page_fault_isr(void *context, uint8_t vector, struct irq_context *rsp);