X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/cd09c4b222e4ddf45a42522563ae2471a829d1c8..9440be3a5115a91dcdf8dff05a361cac4b6cea29:/lunaix-os/kernel/mm/pmm.c diff --git a/lunaix-os/kernel/mm/pmm.c b/lunaix-os/kernel/mm/pmm.c index c6b0a25..dcc70b0 100644 --- a/lunaix-os/kernel/mm/pmm.c +++ b/lunaix-os/kernel/mm/pmm.c @@ -13,10 +13,12 @@ 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; @@ -126,7 +128,7 @@ pmm_alloc_page() int pmm_free_page(void* page) { - // TODO: Add kernel reserved memory page check + // XXX: Add kernel reserved memory page check or simply ownership check? uint32_t pg = (uintptr_t)page >> 12; if (pg && pg < max_pg) {