vm: fix get_or_create_page not allocating enough memory for sparse page map
This commit is contained in:
@@ -60,7 +60,7 @@ static vm_page_t *get_or_create_page(phys_addr_t addr)
|
|||||||
vm_sector_t *sector = §or_array[sector_number];
|
vm_sector_t *sector = §or_array[sector_number];
|
||||||
|
|
||||||
if (!sector->s_pages) {
|
if (!sector->s_pages) {
|
||||||
sector->s_pages = kmalloc(vm_page_order_to_pages(sector->s_size) * sizeof(vm_page_t *), 0);
|
sector->s_pages = kzalloc(vm_page_order_to_pages(sector->s_size) * sizeof(vm_page_t), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
sector->s_pages[page_number].p_sector = sector_number;
|
sector->s_pages[page_number].p_sector = sector_number;
|
||||||
@@ -164,8 +164,7 @@ void vm_sparse_init(void)
|
|||||||
char sector_size_str[64];
|
char sector_size_str[64];
|
||||||
data_size_to_string(sector_bytes, sector_size_str, sizeof sector_size_str);
|
data_size_to_string(sector_bytes, sector_size_str, sizeof sector_size_str);
|
||||||
|
|
||||||
sector_array = memblock_alloc(sizeof(vm_sector_t) * nr_sectors, 8);
|
sector_array = kzalloc(sizeof(vm_sector_t) * nr_sectors, 0);
|
||||||
memset(sector_array, 0x00, sizeof(vm_sector_t) * nr_sectors);
|
|
||||||
sector_array_count = nr_sectors;
|
sector_array_count = nr_sectors;
|
||||||
|
|
||||||
for (unsigned int i = 0; i < nr_sectors; i++) {
|
for (unsigned int i = 0; i < nr_sectors; i++) {
|
||||||
@@ -184,7 +183,7 @@ void vm_sparse_init(void)
|
|||||||
|
|
||||||
for (uintptr_t i = it.it_base; i < it.it_limit; i += VM_PAGE_SIZE) {
|
for (uintptr_t i = it.it_base; i < it.it_limit; i += VM_PAGE_SIZE) {
|
||||||
vm_page_t *pg = get_or_create_page(i);
|
vm_page_t *pg = get_or_create_page(i);
|
||||||
memset(pg, 0x0, sizeof *pg);
|
pg->p_flags = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,7 +203,6 @@ void vm_sparse_init(void)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(pg, 0x0, sizeof *pg);
|
|
||||||
pg->p_flags = VM_PAGE_RESERVED;
|
pg->p_flags = VM_PAGE_RESERVED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user