diff options
Diffstat (limited to 'kernel/common/mem.c')
| -rw-r--r-- | kernel/common/mem.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/kernel/common/mem.c b/kernel/common/mem.c index fee0761..f03d0a8 100644 --- a/kernel/common/mem.c +++ b/kernel/common/mem.c @@ -1,8 +1,12 @@ #include <sys/mem.h> #include <early/dtb.h> +#define EHEAP_SIZE (512 * 1024) static struct page *free_list; +static char eheap[EHEAP_SIZE] = {0}; +static size_t eheap_off = 0; + static void merge_freelist() { struct page *list = free_list; @@ -16,6 +20,20 @@ static void merge_freelist() { } } + +void* kemalloc(size_t size) { + size = (size + 7) & ~7; + + if (eheap_off + size > EHEAP_SIZE) { + return NULL; + } + + void *ptr = &eheap[eheap_off]; + eheap_off += size; + return ptr; +} + + void* kmalloc(size_t size) { struct page *page = free_list; struct page *last = NULL; |
