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);