From f3fe5e8d39fc9bbcffb346d0b7329445140a1e93 Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Tue, 18 Nov 2025 00:43:20 -0500 Subject: kern/amd64: mmu: Add mu_pmap_forkvas() helper The mu_pmap_forkvas() function copies the current virtual address with the user porition zeroed. Signed-off-by: Ian Moffett --- sys/arch/amd64/cpu/mmu.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'sys/arch/amd64/cpu/mmu.c') diff --git a/sys/arch/amd64/cpu/mmu.c b/sys/arch/amd64/cpu/mmu.c index 65c4e46..15ba19a 100644 --- a/sys/arch/amd64/cpu/mmu.c +++ b/sys/arch/amd64/cpu/mmu.c @@ -28,10 +28,12 @@ */ #include +#include #include #include #include #include +#include #include /* @@ -76,6 +78,32 @@ mu_pmap_writevas(struct mmu_vas *vas) return 0; } +int +mu_pmap_forkvas(struct mmu_vas *result) +{ + struct mmu_vas vas; + uintptr_t paddr, *pml4_dest; + uintptr_t *pml4_src; + + mu_pmap_readvas(&vas); + paddr = vm_phys_alloc(1); + if (paddr == 0) { + return -ENOMEM; + } + + pml4_dest = PHYS_TO_VIRT(paddr); + pml4_src = PHYS_TO_VIRT(vas.cr3); + for (uint16_t i = 0; i < 512; ++i) { + if (i < 256) { + pml4_dest[i] = 0; + } else { + pml4_dest[i] = pml4_src[i]; + } + } + + return 0; +} + void mu_pmap_init(void) { -- cgit v1.2.3