forked from pool/u-boot
1 OBS-URL: https://build.opensuse.org/request/show/390469 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/u-boot?expand=0&rev=72
56 lines
1.6 KiB
Diff
56 lines
1.6 KiB
Diff
From 88cba11445329c9f79f34b91e443eafa556adf92 Mon Sep 17 00:00:00 2001
|
|
From: Alexander Graf <agraf@suse.de>
|
|
Date: Mon, 11 Apr 2016 23:47:30 +0200
|
|
Subject: [PATCH 14/17] efi_loader: Expose ascending efi memory map
|
|
|
|
The EFI memory map does not need to be in a strict order, but 32bit
|
|
grub2 does expect it to be ascending. If it's not, it may try to
|
|
allocate memory inside the U-Boot data memory region.
|
|
|
|
We already sort the memory map in descending order, so let's just
|
|
reverse it when we pass it to a payload.
|
|
|
|
Signed-off-by: Alexander Graf <agraf@suse.de>
|
|
---
|
|
lib/efi_loader/efi_memory.c | 9 +++++++--
|
|
1 file changed, 7 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c
|
|
index 8a1e249..df99585 100644
|
|
--- a/lib/efi_loader/efi_memory.c
|
|
+++ b/lib/efi_loader/efi_memory.c
|
|
@@ -286,10 +286,13 @@ efi_status_t efi_get_memory_map(unsigned long *memory_map_size,
|
|
uint32_t *descriptor_version)
|
|
{
|
|
ulong map_size = 0;
|
|
+ int map_entries = 0;
|
|
struct list_head *lhandle;
|
|
|
|
list_for_each(lhandle, &efi_mem)
|
|
- map_size += sizeof(struct efi_mem_desc);
|
|
+ map_entries++;
|
|
+
|
|
+ map_size = map_entries * sizeof(struct efi_mem_desc);
|
|
|
|
*memory_map_size = map_size;
|
|
|
|
@@ -301,12 +304,14 @@ efi_status_t efi_get_memory_map(unsigned long *memory_map_size,
|
|
|
|
/* Copy list into array */
|
|
if (memory_map) {
|
|
+ /* Return the list in ascending order */
|
|
+ memory_map = &memory_map[map_entries - 1];
|
|
list_for_each(lhandle, &efi_mem) {
|
|
struct efi_mem_list *lmem;
|
|
|
|
lmem = list_entry(lhandle, struct efi_mem_list, link);
|
|
*memory_map = lmem->desc;
|
|
- memory_map++;
|
|
+ memory_map--;
|
|
}
|
|
}
|
|
|
|
--
|
|
1.8.5.6
|
|
|