From 2dbf529c33aa3e24beff944758d586bb0608c1be Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Tue, 15 Apr 2025 22:20:59 -0400 Subject: expand memory manager work with userspace (more then one ctx) --- kernel/memory/memory.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) (limited to 'kernel/memory/memory.c') diff --git a/kernel/memory/memory.c b/kernel/memory/memory.c index 145ce2b..b4ecb0d 100644 --- a/kernel/memory/memory.c +++ b/kernel/memory/memory.c @@ -1,21 +1,67 @@ +#include "lib/klib.h" #include #include #include #include +#include "memory.h" #include "paging.h" #include "virtalloc.h" #include "physalloc.h" +mem_ctx_t kernel_mem_ctx; +struct mem_ctx_s _kernel_mem_ctx; +extern volatile char kernel_pml4[]; +extern struct virt_ctx kernel_virt_ctx; + +void *kmapaddr(void *phys, void *virt, size_t len, unsigned int flags) +{ + return mem_mapaddr(kernel_mem_ctx, phys, virt, len, flags); +} + +void kunmapaddr(void *virt) +{ + mem_unmapaddr(kernel_mem_ctx, virt); +} + +void *kalloc_page(void) +{ + return mem_alloc_page(kernel_mem_ctx); +} + +void *kalloc_pages(size_t count) +{ + return mem_alloc_pages(kernel_mem_ctx, count); +} + +void kfree_pages(void *ptr) +{ + mem_free_pages(kernel_mem_ctx, ptr); +} + +int kload_page(void *virt) +{ + return mem_load_page(kernel_mem_ctx, virt); +} + +mem_ctx_t alloc_mem_ctx(void) +{ + panic("alloc_mem_ctx not yet implemented"); +} + void memory_init(void) { struct memory_map mmap; if (mboot_get_mmap(&mmap)) panic("failed to load memory map"); + kernel_mem_ctx = &_kernel_mem_ctx; + kernel_mem_ctx->pml4 = kernel_pml4; + kernel_mem_ctx->virtctx = &kernel_virt_ctx; + cli(); paging_init(); - virtaddr_init(); + virtaddr_init(kernel_mem_ctx->virtctx); physalloc_init(&mmap); sti(); } -- cgit v1.2.3-freya From fea6e5f3d527e3fb33209d437f130c02c9e83680 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Tue, 15 Apr 2025 22:49:39 -0400 Subject: more stub mem_ctx fns --- kernel/include/comus/memory.h | 20 +++++++++++++++++++- kernel/memory/memory.c | 19 +++++++++++++++++-- 2 files changed, 36 insertions(+), 3 deletions(-) (limited to 'kernel/memory/memory.c') diff --git a/kernel/include/comus/memory.h b/kernel/include/comus/memory.h index ee413e3..dec872d 100644 --- a/kernel/include/comus/memory.h +++ b/kernel/include/comus/memory.h @@ -11,6 +11,7 @@ #include #include +#include #define MMAP_MAX_ENTRY 64 #define PAGE_SIZE 4096 @@ -63,7 +64,24 @@ uint64_t memory_used(void); * * @returns pointer context or NULL on failure */ -mem_ctx_t alloc_mem_ctx(void); +mem_ctx_t mem_ctx_alloc(void); + +/** + * Clone a current memory context into a new one + * + * @param ctx - the memory context + * @param cow - mark all of the pages as copy on write + * + * @returns pointer context or NULL on failure + */ +mem_ctx_t mem_ctx_clone(mem_ctx_t ctx, bool cow); + +/** + * Free a memory context into a new one + * + * @param ctx - the memory context + */ +void mem_ctx_free(mem_ctx_t ctx); /** * Free a memory context diff --git a/kernel/memory/memory.c b/kernel/memory/memory.c index b4ecb0d..208001b 100644 --- a/kernel/memory/memory.c +++ b/kernel/memory/memory.c @@ -44,9 +44,24 @@ int kload_page(void *virt) return mem_load_page(kernel_mem_ctx, virt); } -mem_ctx_t alloc_mem_ctx(void) +mem_ctx_t mem_ctx_alloc(void) { - panic("alloc_mem_ctx not yet implemented"); + panic("not yet implemented"); +} + +mem_ctx_t mem_ctx_clone(mem_ctx_t ctx, bool cow) +{ + (void) ctx; + (void) cow; + + panic("not yet implemented"); +} + +void mem_ctx_free(mem_ctx_t ctx) +{ + (void) ctx; + + panic("not yet implemented"); } void memory_init(void) -- cgit v1.2.3-freya From 210d325b15041eda279d36e1b155095238b2b393 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Tue, 15 Apr 2025 22:50:36 -0400 Subject: fmt --- kernel/cpu/idt.c | 3 ++- kernel/memory/memory.c | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'kernel/memory/memory.c') diff --git a/kernel/cpu/idt.c b/kernel/cpu/idt.c index 250f939..8b4465f 100644 --- a/kernel/cpu/idt.c +++ b/kernel/cpu/idt.c @@ -110,7 +110,8 @@ char *EXCEPTIONS[] = { "Reserved", }; -void idt_exception_handler(uint64_t exception, uint64_t code, struct cpu_regs *state) +void idt_exception_handler(uint64_t exception, uint64_t code, + struct cpu_regs *state) { uint64_t cr2; diff --git a/kernel/memory/memory.c b/kernel/memory/memory.c index 208001b..2d560f4 100644 --- a/kernel/memory/memory.c +++ b/kernel/memory/memory.c @@ -51,15 +51,15 @@ mem_ctx_t mem_ctx_alloc(void) mem_ctx_t mem_ctx_clone(mem_ctx_t ctx, bool cow) { - (void) ctx; - (void) cow; + (void)ctx; + (void)cow; panic("not yet implemented"); } void mem_ctx_free(mem_ctx_t ctx) { - (void) ctx; + (void)ctx; panic("not yet implemented"); } -- cgit v1.2.3-freya