diff --git a/hermit/include/hermit/config.h b/hermit/include/hermit/config.h index f5c667949..4b42f588f 100644 --- a/hermit/include/hermit/config.h +++ b/hermit/include/hermit/config.h @@ -41,7 +41,7 @@ extern "C" { #define CACHE_LINE 64 #define KERNEL_STACK_SIZE (8<<10) /* 8 KiB */ #define DEFAULT_STACK_SIZE (16*1024) /* 16 KiB */ -#define BITMAP_SIZE (16<<5) /* for 16 MiB of RAM */ +#define BITMAP_SIZE (128<<5) /* for 128 MiB of RAM */ #define KMSG_SIZE (8*1024) #define INT_SYSCALL 0x80 #define MAILBOX_SIZE 32 diff --git a/hermit/mm/memory.c b/hermit/mm/memory.c index 5482c83ca..0569bde10 100644 --- a/hermit/mm/memory.c +++ b/hermit/mm/memory.c @@ -35,8 +35,8 @@ #include #include -extern size_t base; -extern size_t limit; +extern uint32_t base; +extern uint32_t limit; /* * Note that linker symbols are not variables, they have no memory allocated for @@ -283,22 +283,28 @@ int memory_init(void) } } } + + // mark kernel as used, we use 2MB pages to map the kernel + for(addr=(size_t) &kernel_start; addr<(((size_t) &kernel_end + 0x200000ULL) & 0xFFFFFFFFFFE00000ULL); addr+=PAGE_SIZE) { + page_set_mark(addr >> PAGE_BITS); + atomic_int32_inc(&total_allocated_pages); + atomic_int32_dec(&total_available_pages); + } + } else { + //kprintf("base 0x%lx, limit 0x%lx\n", base, limit); + // mark available memory as free - for(addr=base; addr> PAGE_BITS)) { page_clear_mark(addr >> PAGE_BITS); atomic_int32_inc(&total_pages); atomic_int32_inc(&total_available_pages); } } - } - // mark kernel as used, we use 2MB pages to map the kernel - for(addr=(size_t) &kernel_start; addr<(((size_t) &kernel_end + 0x200000ULL) & 0xFFFFFFFFFFE00000ULL); addr+=PAGE_SIZE) { - page_set_mark(addr >> PAGE_BITS); - atomic_int32_inc(&total_allocated_pages); - atomic_int32_dec(&total_available_pages); + atomic_int32_add(&total_allocated_pages, 0x200000 / PAGE_SIZE); + atomic_int32_add(&total_pages, 0x200000 / PAGE_SIZE); } ret = vma_init(); diff --git a/hermit/mm/vma.c b/hermit/mm/vma.c index 8a555b016..bea1f835f 100644 --- a/hermit/mm/vma.c +++ b/hermit/mm/vma.c @@ -58,7 +58,7 @@ int vma_init(void) // add Kernel ret = vma_add(PAGE_CEIL((size_t) &kernel_start), - (((size_t) &kernel_end + 0x200000ULL) & 0xFFFFFFFFFFE00000ULL), /* we use 2MB pages to map the kernel */ + PAGE_FLOOR((size_t) &kernel_end), VMA_READ|VMA_WRITE|VMA_EXECUTE|VMA_CACHEABLE); if (BUILTIN_EXPECT(ret, 0)) goto out;