aboutsummaryrefslogtreecommitdiff
path: root/kernel/libk/kmalloc.cc
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/libk/kmalloc.cc')
-rw-r--r--kernel/libk/kmalloc.cc24
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)", */