Timer re-worked!
[lunaix-os.git] / lunaix-os / kernel / mm / pmm.c
index c6b0a25b7dd77cf39fa8f7fd8aa113b52c45a0c8..054b247743404044a2c184ad7bfbabcfe15e7e2c 100644 (file)
     uint32_t leading_shifts =                                                  \
       (page_count + offset) < 8 ? page_count : 8 - offset;
 
-uint8_t pm_bitmap[PM_BMP_MAX_SIZE];
+static uint8_t pm_bitmap[PM_BMP_MAX_SIZE];
 
-uintptr_t max_pg;
+static uintptr_t max_pg;
 
+//  ... |xxxx xxxx |
+//  ... |-->|
 void
 pmm_mark_page_free(uintptr_t ppn)
 {
@@ -77,7 +79,7 @@ size_t pg_lookup_ptr;
 void
 pmm_init(uintptr_t mem_upper_lim)
 {
-    max_pg = (PG_ALIGN(mem_upper_lim) >> 12) + 1;
+    max_pg = (PG_ALIGN(mem_upper_lim) >> 12);
 
     pg_lookup_ptr = LOOKUP_START;
 
@@ -91,7 +93,7 @@ void*
 pmm_alloc_page()
 {
     // Next fit approach. Maximize the throughput!
-    uintptr_t good_page_found = NULL;
+    uintptr_t good_page_found = (uintptr_t)NULL;
     size_t old_pg_ptr = pg_lookup_ptr;
     size_t upper_lim = max_pg;
     uint8_t chunk = 0;