From ba8dbf1b19005b6b0668ece7940ceaa3efcc97cf Mon Sep 17 00:00:00 2001 From: e29005 Date: Tue, 14 Feb 2017 17:53:27 +0900 Subject: [PATCH] Put kernel image and page table into one chunk --- kernel/mem.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/kernel/mem.c b/kernel/mem.c index 5a0ef41f..be6aae4e 100644 --- a/kernel/mem.c +++ b/kernel/mem.c @@ -966,6 +966,8 @@ static struct ihk_page_allocator_desc *page_allocator_init(uint64_t start, unsigned long page_map_pa, pages; void *page_map; unsigned int i; + extern char _end[]; + unsigned long phys_end = virt_to_phys(_end); start &= PAGE_MASK; pa_start = (start + PAGE_SIZE - 1) & PAGE_MASK; @@ -978,7 +980,18 @@ static struct ihk_page_allocator_desc *page_allocator_init(uint64_t start, */ page_map_pa = 0x100000; #else +#if 0 page_map_pa = initial ? virt_to_phys(get_last_early_heap()) : pa_start; +#else + if (pa_start <= phys_end && phys_end <= pa_end) { + page_map_pa = virt_to_phys(get_last_early_heap()); +kprintf("* start=%lx end=%lx pa_start=%lx\n", page_map_pa, pa_end, pa_start); + } + else { + page_map_pa = pa_start; +kprintf(" start=%lx end=%lx\n", page_map_pa, pa_end); + } +#endif #endif page_map = phys_to_virt(page_map_pa);