diff --git a/arch/x86/mm/page.c b/arch/x86/mm/page.c index b2cfaad4..1e86cb53 100644 --- a/arch/x86/mm/page.c +++ b/arch/x86/mm/page.c @@ -338,7 +338,7 @@ size_t map_region(size_t viraddr, size_t phyaddr, uint32_t npages, uint32_t flag pgt = (page_table_t*) ((KERNEL_SPACE - 1024*PAGE_SIZE + index*PAGE_SIZE) & 0xFFFFF000); index = (viraddr >> 12) & 0x3FF; - if (BUILTIN_EXPECT(pgt->entries[index], 0)) { + if (pgt->entries[index] && !(flags & MAP_REMAP)) { spinlock_unlock(pgd_lock); kprintf("0x%x is already maped\n", viraddr); return 0; diff --git a/include/metalsvm/stdlib.h b/include/metalsvm/stdlib.h index 0a568204..4d9e2dc2 100644 --- a/include/metalsvm/stdlib.h +++ b/include/metalsvm/stdlib.h @@ -42,7 +42,6 @@ extern "C" { #define MAP_PAGE_TABLE (1 << 2) #define MAP_NO_CACHE (1 << 3) #define MAP_WT (1 << 5) -//#define MAP_HEAP (1 << 5) #define MAP_CODE (1 << 6) #define MAP_READONLY (1 << 7) #ifdef CONFIG_ROCKCREEK @@ -51,6 +50,7 @@ extern "C" { #define MAP_SVM_STRONG (1 << 9) #define MAP_SVM_LAZYRELEASE (1 << 10) #define MAP_NO_ACCESS (1 << 11) +#define MAP_REMAP (1 << 12) void NORETURN abort(void);