diff options
author | Raghuram Subramani <raghus2247@gmail.com> | 2025-02-01 08:31:42 -0500 |
---|---|---|
committer | Raghuram Subramani <raghus2247@gmail.com> | 2025-02-01 08:31:42 -0500 |
commit | ed46197e51cb55a36ca81b5fd086eaf0df2da6fd (patch) | |
tree | b27701f03141cba9c2ea68c85c192fc168e37d29 /kernel/libk/kmalloc.cc | |
parent | 9a21befafe5074c5271ddbd42718d8a5343058f1 (diff) |
virtual_mm: make_table() must account for an uninitialized kmalloc()
Diffstat (limited to 'kernel/libk/kmalloc.cc')
-rw-r--r-- | kernel/libk/kmalloc.cc | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/kernel/libk/kmalloc.cc b/kernel/libk/kmalloc.cc index 3c7dd91..03b7d86 100644 --- a/kernel/libk/kmalloc.cc +++ b/kernel/libk/kmalloc.cc @@ -23,7 +23,10 @@ #include <stddef.h> #include <stdint.h> +/* TODO: Kmalloc must have space for a page table *at all times*. */ + memory_chunk_t *starting_mc = NULL; +bool initialized = false; memory_chunk_t * add_block(void *address, uint32_t size) @@ -44,25 +47,32 @@ add_block(void *address, uint32_t size) return mc; } -static void -kmalloc_init(void) +void +kmalloc_initialize(void) { - int *initial_region = (int *) VirtualMM::alloc_pages(MIN_PAGES); - printk("debug", "%x", initial_region); - /* *initial_region = 10; */ + int *initial_region = (int *) VirtualMM::alloc_pages(1); + printk("debug", "Initial region: 0x%x", initial_region); + *initial_region = 10; /* memory_chunk_t *mc = (memory_chunk_t *) initial_region; */ /* mc->size = 10; */ /* printk("kmalloc", "mc->size(0x%x)", mc->size); */ /* starting_mc = add_block(initial_region, 4 * PAGE_SIZE); */ + initialized = true; +} + +bool +kmalloc_initialized(void) +{ + return initialized; } void * kmalloc(uint32_t size) { - if (!starting_mc) - kmalloc_init(); + if (!initialized) + kmalloc_initialize(); /* printk("kmalloc", */ /* "Initialized region with starting_mc(0x%x) and size(0x%x)", */ |