mirror of
https://github.com/justinian/jsix.git
synced 2025-12-10 00:14:32 -08:00
[boot] Fix missing last memory map entry
The bootloader was dropping the last memory map entry of the kernel map.
This commit is contained in:
@@ -276,7 +276,7 @@ build_kernel_mem_map(kernel::args::header *args, uefi::boot_services *bs)
|
|||||||
for (auto desc : map) {
|
for (auto desc : map) {
|
||||||
/*
|
/*
|
||||||
// EFI map dump
|
// EFI map dump
|
||||||
console::print(L" Range %lx (%lx) %x(%s) [%lu]\r\n",
|
console::print(L" eRange %lx (%lx) %x(%s) [%lu]\r\n",
|
||||||
desc->physical_start, desc->attribute, desc->type, memory_type_name(desc->type), desc->number_of_pages);
|
desc->physical_start, desc->attribute, desc->type, memory_type_name(desc->type), desc->number_of_pages);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -323,18 +323,19 @@ build_kernel_mem_map(kernel::args::header *args, uefi::boot_services *bs)
|
|||||||
// TODO: validate uefi's map is sorted
|
// TODO: validate uefi's map is sorted
|
||||||
if (first) {
|
if (first) {
|
||||||
first = false;
|
first = false;
|
||||||
kernel_map[nent].start = desc->physical_start;
|
mem_entry &ent = kernel_map[nent++];
|
||||||
kernel_map[nent].pages = desc->number_of_pages;
|
ent.start = desc->physical_start;
|
||||||
kernel_map[nent].type = type;
|
ent.pages = desc->number_of_pages;
|
||||||
kernel_map[nent].attr = (desc->attribute & 0xffffffff);
|
ent.type = type;
|
||||||
|
ent.attr = (desc->attribute & 0xffffffff);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
mem_entry &prev = kernel_map[nent];
|
mem_entry &prev = kernel_map[nent - 1];
|
||||||
if (can_merge(prev, type, desc)) {
|
if (can_merge(prev, type, desc)) {
|
||||||
prev.pages += desc->number_of_pages;
|
prev.pages += desc->number_of_pages;
|
||||||
} else {
|
} else {
|
||||||
mem_entry &next = kernel_map[++nent];
|
mem_entry &next = kernel_map[nent++];
|
||||||
next.start = desc->physical_start;
|
next.start = desc->physical_start;
|
||||||
next.pages = desc->number_of_pages;
|
next.pages = desc->number_of_pages;
|
||||||
next.type = type;
|
next.type = type;
|
||||||
@@ -350,7 +351,7 @@ build_kernel_mem_map(kernel::args::header *args, uefi::boot_services *bs)
|
|||||||
// kernel map dump
|
// kernel map dump
|
||||||
for (unsigned i = 0; i < nent; ++i) {
|
for (unsigned i = 0; i < nent; ++i) {
|
||||||
const kernel::args::mem_entry &e = kernel_map[i];
|
const kernel::args::mem_entry &e = kernel_map[i];
|
||||||
console::print(L" Range %lx (%lx) %x(%s) [%lu]\r\n",
|
console::print(L" kRange %lx (%lx) %x(%s) [%lu]\r\n",
|
||||||
e.start, e.attr, e.type, kernel_memory_type_name(e.type), e.pages);
|
e.start, e.attr, e.type, kernel_memory_type_name(e.type), e.pages);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user