Adds epoch_*sec() helpers
[akaros.git] / kern / src / pmap.c
index 94ee546..2cd8286 100644 (file)
@@ -33,15 +33,16 @@ uintptr_t boot_freelimit = 0;
 
 static size_t sizeof_mboot_mmentry(struct multiboot_mmap_entry *entry)
 {
-       /* Careful - addr + len is a uint64 (need to cast down for 32 bit) */
-       return (size_t)(entry->addr + entry->len);
+       /* Careful - len is a uint64 (need to cast down for 32 bit) */
+       return (size_t)(entry->len);
 }
 
 static void adjust_max_pmem(struct multiboot_mmap_entry *entry, void *data)
 {
        if (entry->type != MULTIBOOT_MEMORY_AVAILABLE)
                return;
-       max_pmem = MAX(max_pmem, sizeof_mboot_mmentry(entry));
+       /* Careful - addr + len is a uint64 (need to cast down for 32 bit) */
+       max_pmem = MAX(max_pmem, (size_t)(entry->addr + entry->len));
 }
 
 /**
@@ -332,3 +333,25 @@ bool regions_collide_unsafe(uintptr_t start1, uintptr_t end1,
                return TRUE;
        }
 }
+
+void print_free_mem(void)
+{
+       static uint8_t *bm = 0;
+       /* racy, but this is debugging code */
+       if (!bm)
+               bm = kzmalloc((max_nr_pages + 1) / 8, 0);
+
+       long x = 0;
+       for (int i = 0; i < max_nr_pages; i++) {
+               if (page_is_free(i)) {
+                       x++;
+                       SET_BITMASK_BIT(bm, i);
+               } else {
+                       if (GET_BITMASK_BIT(bm, i)) {
+                               print_pageinfo(ppn2page(i));
+                               CLR_BITMASK_BIT(bm, i);
+                       }
+               }
+       }
+       printk("Nr Free pages: %lld\n", x);
+}