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