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)
{
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;
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;