From 13825b6cfba9633692ba35eef54473b9cfdd3a90 Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Sun, 21 Aug 2016 15:01:25 +0200 Subject: [PATCH] some code cleanups, simplify the memory initialization --- hermit/mm/memory.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/hermit/mm/memory.c b/hermit/mm/memory.c index 0c054285f..62035f96e 100644 --- a/hermit/mm/memory.c +++ b/hermit/mm/memory.c @@ -208,7 +208,7 @@ void page_free(void* viraddr, size_t sz) int memory_init(void) { - size_t addr, image_size = (size_t) &kernel_end - (size_t) &kernel_start; + size_t image_size = (size_t) &kernel_end - (size_t) &kernel_start; int ret = 0; // enable paging and map Multiboot modules etc. @@ -221,19 +221,15 @@ int memory_init(void) kprintf("memory_init: base 0x%zx, image_size 0x%zx, limit 0x%zx\n", base, image_size, limit); // determine available memory - for(addr=base; addr> PAGE_BITS); + atomic_int64_add(&total_available_pages, (limit-base) >> PAGE_BITS); // determine allocated memory, we use 2MB pages to map the kernel - for(addr=base; addr<((base + image_size + 0x200000) & 0xFFFFFFFFFFE00000ULL); addr+=PAGE_SIZE) { - atomic_int64_inc(&total_allocated_pages); - atomic_int64_dec(&total_available_pages); - } + atomic_int64_add(&total_allocated_pages, PAGE_2M_FLOOR(image_size) >> PAGE_BITS); + atomic_int64_sub(&total_available_pages, PAGE_2M_FLOOR(image_size) >> PAGE_BITS); //initialize free list - init_list.start = (base + image_size + 0x200000) & 0xFFFFFFFFFFE00000ULL; + init_list.start = PAGE_2M_FLOOR(base + image_size); init_list.end = limit; init_list.prev = init_list.next = NULL; kprintf("free list starts at 0x%zx, limit 0x%zx\n", init_list.start, init_list.end);