:: commit 101e480dbf262884adf1216a63e9dd3572eefc53

mintsuki <mintsuki@protonmail.com> — 2022-09-27 23:11

parents: a06713def6

pmm: Misc bug fixes in pmm

diff --git a/common/fs/file.s2.c b/common/fs/file.s2.c
index 44d06fab..2c9338b0 100644
--- a/common/fs/file.s2.c
+++ b/common/fs/file.s2.c
@@ -111,7 +111,7 @@ void *freadall(struct file_handle *fd, uint32_t type) {
         if (fd->readall) {
             return fd->fd;
         }
-        memmap_alloc_range((uint64_t)(size_t)fd->fd, ALIGN_UP(fd->size, 4096), type, false, true, false, false);
+        memmap_alloc_range((uint64_t)(size_t)fd->fd, ALIGN_UP(fd->size, 4096), type, 0, true, false, false);
         fd->readall = true;
         return fd->fd;
     } else {
diff --git a/common/mm/pmm.s2.c b/common/mm/pmm.s2.c
index f55653d3..8057cc9b 100644
--- a/common/mm/pmm.s2.c
+++ b/common/mm/pmm.s2.c
@@ -32,7 +32,7 @@ void *conv_mem_alloc(size_t count) {
         if (base + count > 0x100000)
             panic(false, "Conventional memory allocation failed");
 
-        if (memmap_alloc_range(base, count, MEMMAP_BOOTLOADER_RECLAIMABLE, true, false, false, false)) {
+        if (memmap_alloc_range(base, count, MEMMAP_BOOTLOADER_RECLAIMABLE, MEMMAP_USABLE, false, false, false)) {
             void *ret = (void *)(uintptr_t)base;
             // Zero out allocated space
             memset(ret, 0, count);
@@ -91,11 +91,11 @@ static const char *memmap_type(uint32_t type) {
 
 void print_memmap(struct memmap_entry *mm, size_t size) {
     for (size_t i = 0; i < size; i++) {
-        printv("[%X -> %X] : %X  <%s (%x)>\n",
-               mm[i].base,
-               mm[i].base + mm[i].length,
-               mm[i].length,
-               memmap_type(mm[i].type), mm[i].type);
+        print("[%X -> %X] : %X  <%s (%x)>\n",
+              mm[i].base,
+              mm[i].base + mm[i].length,
+              mm[i].length,
+              memmap_type(mm[i].type), mm[i].type);
     }
 }
 
@@ -277,7 +277,7 @@ void init_memmap(void) {
 
     // Allocate bootloader itself
     memmap_alloc_range(4096,
-        ALIGN_UP((uintptr_t)bss_end, 4096) - 4096, MEMMAP_BOOTLOADER_RECLAIMABLE, true, true, false, false);
+        ALIGN_UP((uintptr_t)bss_end, 4096) - 4096, MEMMAP_BOOTLOADER_RECLAIMABLE, 0, true, false, false);
 
     sanitise_entries(memmap, &memmap_entries, false);
 
@@ -383,7 +383,6 @@ void init_memmap(void) {
     bool old_skfp = sanitiser_keep_first_page;
     sanitiser_keep_first_page = true;
     sanitise_entries(memmap, &memmap_entries, false);
-    sanitiser_keep_first_page = old_skfp;
 
     allocations_disallowed = false;
 
@@ -404,18 +403,20 @@ void init_memmap(void) {
 
         if (status) {
             print("pmm: WARNING: AllocatePages failure (%d)\n", status);
-            memmap_alloc_range(memmap[i].base, memmap[i].length, MEMMAP_RESERVED, true, true, false, false);
+            memmap_alloc_range(memmap[i].base, memmap[i].length, MEMMAP_RESERVED, MEMMAP_USABLE, true, false, false);
         }
     }
 
     memcpy(untouched_memmap, memmap, memmap_entries * sizeof(struct memmap_entry));
     untouched_memmap_entries = memmap_entries;
 
+    sanitiser_keep_first_page = old_skfp;
+
     size_t bootloader_size = ALIGN_UP((uintptr_t)__image_end - (uintptr_t)__image_base, 4096);
 
     // Allocate bootloader itself
     memmap_alloc_range((uintptr_t)__image_base, bootloader_size,
-                       MEMMAP_BOOTLOADER_RECLAIMABLE, false, true, false, true);
+                       MEMMAP_BOOTLOADER_RECLAIMABLE, 0, true, false, true);
 
     sanitise_entries(memmap, &memmap_entries, false);
 
@@ -551,7 +552,7 @@ void pmm_free(void *ptr, size_t count) {
     count = ALIGN_UP(count, 4096);
     if (allocations_disallowed)
         panic(false, "Memory allocations disallowed");
-    memmap_alloc_range((uintptr_t)ptr, count, MEMMAP_USABLE, false, false, false, true);
+    memmap_alloc_range((uintptr_t)ptr, count, MEMMAP_USABLE, 0, false, false, true);
 }
 
 void *ext_mem_alloc(size_t count) {
@@ -591,7 +592,7 @@ void *ext_mem_alloc_type_aligned(size_t count, uint32_t type, size_t alignment)
 
         // We now reserve the range we need.
         int64_t aligned_length = entry_top - alloc_base;
-        memmap_alloc_range((uint64_t)alloc_base, (uint64_t)aligned_length, type, true, true, false, false);
+        memmap_alloc_range((uint64_t)alloc_base, (uint64_t)aligned_length, type, MEMMAP_USABLE, true, false, false);
 
         void *ret = (void *)(size_t)alloc_base;
 
diff --git a/common/protos/limine.c b/common/protos/limine.c
index c0e43fb2..c3fcd1c7 100644
--- a/common/protos/limine.c
+++ b/common/protos/limine.c
@@ -543,7 +543,7 @@ FEAT_END
 skip_fb_init:
     memmap_alloc_range(fb.framebuffer_addr,
                        (uint64_t)fb.framebuffer_pitch * fb.framebuffer_height,
-                       MEMMAP_FRAMEBUFFER, false, false, false, true);
+                       MEMMAP_FRAMEBUFFER, 0, false, false, true);
 
     // Framebuffer feature
 FEAT_START
diff --git a/common/protos/linux.c b/common/protos/linux.c
index f5092d9b..8f278597 100644
--- a/common/protos/linux.c
+++ b/common/protos/linux.c
@@ -424,7 +424,7 @@ noreturn void linux_load(char *config, char *cmdline) {
     for (;;) {
         if (memmap_alloc_range(kernel_load_addr,
                 ALIGN_UP(kernel_file->size - real_mode_code_size, 4096),
-                MEMMAP_BOOTLOADER_RECLAIMABLE, true, false, false, false))
+                MEMMAP_BOOTLOADER_RECLAIMABLE, MEMMAP_USABLE, false, false, false))
             break;
 
         kernel_load_addr += 0x100000;
@@ -462,7 +462,7 @@ noreturn void linux_load(char *config, char *cmdline) {
 
     for (;;) {
         if (memmap_alloc_range(modules_mem_base, ALIGN_UP(size_of_all_modules, 4096),
-                               MEMMAP_BOOTLOADER_RECLAIMABLE, true, false, false, false))
+                               MEMMAP_BOOTLOADER_RECLAIMABLE, MEMMAP_USABLE, false, false, false))
             break;
         modules_mem_base -= 4096;
     }
tab: 248 wrap: offon