[vm] when marking boot physical pages used, make sure the address range is inclusive
This commit is contained in:
@@ -319,13 +319,25 @@ retry:
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void dump_arena(const pmm_arena_t *arena)
|
||||
static void dump_page(const vm_page_t *page)
|
||||
{
|
||||
printf("page %p: address 0x%lx flags 0x%x\n", page, page_to_address(page), page->flags);
|
||||
}
|
||||
|
||||
static void dump_arena(const pmm_arena_t *arena, bool dump_pages)
|
||||
{
|
||||
printf("arena %p: name '%s' base 0x%lx size 0x%x priority %u flags 0x%x\n",
|
||||
arena, arena->name, arena->base, arena->size, arena->priority, arena->flags);
|
||||
printf("\tpage_array %p, free_count %zu\n",
|
||||
arena->page_array, arena->free_count);
|
||||
|
||||
/* dump all of the pages */
|
||||
if (dump_pages) {
|
||||
for (size_t i = 0; i < arena->size / PAGE_SIZE; i++) {
|
||||
dump_page(&arena->page_array[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/* dump the free pages */
|
||||
printf("\tfree ranges:\n");
|
||||
ssize_t last = -1;
|
||||
@@ -347,11 +359,6 @@ static void dump_arena(const pmm_arena_t *arena)
|
||||
}
|
||||
}
|
||||
|
||||
static void dump_page(const vm_page_t *page)
|
||||
{
|
||||
printf("page %p: address 0x%lx flags 0x%x\n", page, page_to_address(page), page->flags);
|
||||
}
|
||||
|
||||
static int cmd_pmm(int argc, const cmd_args *argv)
|
||||
{
|
||||
if (argc < 2) {
|
||||
@@ -374,7 +381,7 @@ usage:
|
||||
if (!strcmp(argv[1].str, "arenas")) {
|
||||
pmm_arena_t *a;
|
||||
list_for_every_entry(&arena_list, a, pmm_arena_t, node) {
|
||||
dump_arena(a);
|
||||
dump_arena(a, false);
|
||||
}
|
||||
} else if (!strcmp(argv[1].str, "alloc")) {
|
||||
if (argc < 3) goto notenoughargs;
|
||||
|
||||
@@ -44,6 +44,12 @@ static void mark_pages_in_use(vaddr_t va, size_t len)
|
||||
struct list_node list;
|
||||
list_initialize(&list);
|
||||
|
||||
/* make sure we are inclusive of all of the pages in the address range */
|
||||
len = PAGE_ALIGN(len + (va & (PAGE_SIZE - 1)));
|
||||
va = ROUNDDOWN(va, PAGE_SIZE);
|
||||
|
||||
LTRACEF("aligned va 0x%lx, len 0x%zx\n", va, len);
|
||||
|
||||
for (size_t offset = 0; offset < len; offset += PAGE_SIZE) {
|
||||
uint flags;
|
||||
paddr_t pa;
|
||||
@@ -70,7 +76,6 @@ static void vm_init_preheap(uint level)
|
||||
if (boot_alloc_end != boot_alloc_start) {
|
||||
LTRACEF("marking boot alloc used from 0x%lx to 0x%lx\n", boot_alloc_start, boot_alloc_end);
|
||||
|
||||
// XXX handle last partial page?
|
||||
mark_pages_in_use(boot_alloc_start, boot_alloc_end - boot_alloc_start);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user