aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/firmware/efi/libstub/efi-stub-helper.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/firmware/efi/libstub/efi-stub-helper.c')
-rw-r--r--drivers/firmware/efi/libstub/efi-stub-helper.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/firmware/efi/libstub/efi-stub-helper.c b/drivers/firmware/efi/libstub/efi-stub-helper.c
index a920fec8fe88..d073e3946383 100644
--- a/drivers/firmware/efi/libstub/efi-stub-helper.c
+++ b/drivers/firmware/efi/libstub/efi-stub-helper.c
@@ -66,25 +66,29 @@ efi_status_t efi_get_memory_map(efi_system_table_t *sys_table_arg,
66 unsigned long key; 66 unsigned long key;
67 u32 desc_version; 67 u32 desc_version;
68 68
69 *map_size = sizeof(*m) * 32; 69 *map_size = 0;
70again: 70 *desc_size = 0;
71 key = 0;
72 status = efi_call_early(get_memory_map, map_size, NULL,
73 &key, desc_size, &desc_version);
74 if (status != EFI_BUFFER_TOO_SMALL)
75 return EFI_LOAD_ERROR;
76
71 /* 77 /*
72 * Add an additional efi_memory_desc_t because we're doing an 78 * Add an additional efi_memory_desc_t because we're doing an
73 * allocation which may be in a new descriptor region. 79 * allocation which may be in a new descriptor region.
74 */ 80 */
75 *map_size += sizeof(*m); 81 *map_size += *desc_size;
76 status = efi_call_early(allocate_pool, EFI_LOADER_DATA, 82 status = efi_call_early(allocate_pool, EFI_LOADER_DATA,
77 *map_size, (void **)&m); 83 *map_size, (void **)&m);
78 if (status != EFI_SUCCESS) 84 if (status != EFI_SUCCESS)
79 goto fail; 85 goto fail;
80 86
81 *desc_size = 0;
82 key = 0;
83 status = efi_call_early(get_memory_map, map_size, m, 87 status = efi_call_early(get_memory_map, map_size, m,
84 &key, desc_size, &desc_version); 88 &key, desc_size, &desc_version);
85 if (status == EFI_BUFFER_TOO_SMALL) { 89 if (status == EFI_BUFFER_TOO_SMALL) {
86 efi_call_early(free_pool, m); 90 efi_call_early(free_pool, m);
87 goto again; 91 return EFI_LOAD_ERROR;
88 } 92 }
89 93
90 if (status != EFI_SUCCESS) 94 if (status != EFI_SUCCESS)
@@ -101,7 +105,7 @@ fail:
101} 105}
102 106
103 107
104unsigned long __init get_dram_base(efi_system_table_t *sys_table_arg) 108unsigned long get_dram_base(efi_system_table_t *sys_table_arg)
105{ 109{
106 efi_status_t status; 110 efi_status_t status;
107 unsigned long map_size; 111 unsigned long map_size;