diff options
author | Maarten Lankhorst <m.b.lankhorst@gmail.com> | 2011-08-09 01:44:06 +0200 |
---|---|---|
committer | Matt Fleming <matt.fleming@intel.com> | 2011-08-09 23:10:30 +0100 |
commit | d0efc62a079f7c2de0c9b5acb74515ac44d97f2d (patch) | |
tree | 3e882f301651f1bf2e4746172aa17f323379ec5a | |
parent | b9680f1c1dee2905d77ae8c3e16485e90dc400b2 (diff) | |
download | efilinux-d0efc62a079f7c2de0c9b5acb74515ac44d97f2d.tar.gz |
bzimage: Merge memory types
Fix failure to boot because of >128 e820 entries
Signed-off-by: Maarten Lankhorst <m.b.lankhorst@gmail.com>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
-rw-r--r-- | loaders/bzimage/bzimage.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/loaders/bzimage/bzimage.c b/loaders/bzimage/bzimage.c index 0b93611..3edf84d 100644 --- a/loaders/bzimage/bzimage.c +++ b/loaders/bzimage/bzimage.c @@ -69,7 +69,7 @@ load_kernel(EFI_HANDLE image, CHAR16 *name, char *cmdline) EFI_STATUS err; UINTN size = 0; char *initrd; - int i; + int i, j = 0; err = file_open(name, &file); if (err != EFI_SUCCESS) @@ -370,13 +370,18 @@ again: continue; } - e820_map->addr = d->PhysicalStart; - e820_map->size = d->NumberOfPages << EFI_PAGE_SHIFT; - e820_map->type = e820_type; - e820_map++; + if (j && e820_map[j-1].type == e820_type && + (e820_map[j-1].addr + e820_map[j-1].size) == d->PhysicalStart) { + e820_map[j-1].size += d->NumberOfPages << EFI_PAGE_SHIFT; + } else { + e820_map[j].addr = d->PhysicalStart; + e820_map[j].size = d->NumberOfPages << EFI_PAGE_SHIFT; + e820_map[j].type = e820_type; + j++; + } } - boot_params->e820_entries = i; + boot_params->e820_entries = j; asm volatile ("lidt %0" :: "m" (idt)); asm volatile ("lgdt %0" :: "m" (gdt)); |