From 16753bf16dda4f7f45c755d4e66bb6f9d3d2d23b Mon Sep 17 00:00:00 2001 From: Matheus Date: Mon, 19 Sep 2022 18:33:52 -0300 Subject: [PATCH] mmu: fix a lower half strcpy and add ismapped() --- src/arch/x86_64/include/arch/mmu.h | 1 + src/arch/x86_64/mmu.c | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/arch/x86_64/include/arch/mmu.h b/src/arch/x86_64/include/arch/mmu.h index a4d387a7..3b9ae7b2 100644 --- a/src/arch/x86_64/include/arch/mmu.h +++ b/src/arch/x86_64/include/arch/mmu.h @@ -24,6 +24,7 @@ typedef uint64_t* arch_mmu_tableptr; int arch_mmu_map(arch_mmu_tableptr, void*, void*, size_t); bool arch_mmu_isaccessed(arch_mmu_tableptr, void*); void* arch_mmu_getphysicaladdr(arch_mmu_tableptr, void*); +bool arch_mmu_ismapped(arch_mmu_tableptr, void*); void arch_mmu_unmap(arch_mmu_tableptr, void*); void arch_mmu_init(); void arch_mmu_apinit(); diff --git a/src/arch/x86_64/mmu.c b/src/arch/x86_64/mmu.c index 22400a3b..457fce98 100644 --- a/src/arch/x86_64/mmu.c +++ b/src/arch/x86_64/mmu.c @@ -133,6 +133,14 @@ static uint64_t getmapping(arch_mmu_tableptr context, void* vaddr){ } +bool arch_mmu_ismapped(arch_mmu_tableptr context, void* vaddr){ + + uint64_t mapping = getmapping(context, vaddr); + + return mapping != 0; + +} + void* arch_mmu_getphysicaladdr(arch_mmu_tableptr context, void* addr){ uint64_t paddr = getmapping(context, addr); paddr &= ~((uint64_t)0xFFF); @@ -189,10 +197,10 @@ arch_mmu_tableptr arch_mmu_newcontext(){ if(!newcontext) return NULL; - memcpy((void*)newcontext + (size_t)limine_hhdm_offset, context, PAGE_SIZE); + memcpy((void*)newcontext + (size_t)limine_hhdm_offset, (void*)context + (uintptr_t)limine_hhdm_offset, PAGE_SIZE); memset((void*)newcontext + (size_t)limine_hhdm_offset, 0, PAGE_SIZE / 2); - + return newcontext; }