From 11053d1cab4fcaac7bf8808bd51647875cee1bf3 Mon Sep 17 00:00:00 2001 From: Richard Qin Date: Wed, 13 May 2026 15:49:50 +0800 Subject: feat: add support for Copy-On-Write in SV39 page table management --- na/arch/riscv/include/arch/pmap.h | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'na/arch/riscv/include') diff --git a/na/arch/riscv/include/arch/pmap.h b/na/arch/riscv/include/arch/pmap.h index 4504af7..a99825a 100644 --- a/na/arch/riscv/include/arch/pmap.h +++ b/na/arch/riscv/include/arch/pmap.h @@ -25,13 +25,18 @@ inline constexpr uint64 PTE_U = 1ULL << 4; inline constexpr uint64 PTE_G = 1ULL << 5; inline constexpr uint64 PTE_A = 1ULL << 6; inline constexpr uint64 PTE_D = 1ULL << 7; +inline constexpr uint64 PTE_COW = 1ULL << 8; /* Custom RSW bit for Copy-On-Write */ uint64 create(); void destroy(uint64 root_pa); int map(uint64 root_pa, uint64 va, uint64 pa, uint64 perm); int map_2mb(uint64 root_pa, uint64 va, uint64 pa, uint64 perm); void unmap(uint64 root_pa, uint64 va); +int protect(uint64 root_pa, uint64 va, uint64 perm); +int protect_range(uint64 root_pa, uint64 start, uint64 end, uint64 perm); bool lookup(uint64 root_pa, uint64 va, uint64* pa_out); +bool is_cow(uint64 root_pa, uint64 va); +int make_cow(uint64 root_pa, uint64 va); void activate(uint64 root_pa); /* -- cgit v1.2.3