diff options
Diffstat (limited to 'arch/x86/boot/compressed')
| -rw-r--r-- | arch/x86/boot/compressed/eboot.c | 22 |
1 files changed, 5 insertions, 17 deletions
diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c index 5e708c0d466f..bf2c35d5ec1f 100644 --- a/arch/x86/boot/compressed/eboot.c +++ b/arch/x86/boot/compressed/eboot.c | |||
| @@ -527,25 +527,12 @@ static efi_status_t exit_boot(struct boot_params *boot_params, | |||
| 527 | u8 nr_entries; | 527 | u8 nr_entries; |
| 528 | int i; | 528 | int i; |
| 529 | 529 | ||
| 530 | size = sizeof(*mem_map) * 32; | ||
| 531 | |||
| 532 | again: | ||
| 533 | size += sizeof(*mem_map) * 2; | ||
| 534 | _size = size; | ||
| 535 | status = efi_low_alloc(sys_table, size, 1, (unsigned long *)&mem_map); | ||
| 536 | if (status != EFI_SUCCESS) | ||
| 537 | return status; | ||
| 538 | |||
| 539 | get_map: | 530 | get_map: |
| 540 | status = efi_call_phys5(sys_table->boottime->get_memory_map, &size, | 531 | status = efi_get_memory_map(sys_table, &mem_map, &size, &desc_size, |
| 541 | mem_map, &key, &desc_size, &desc_version); | 532 | &desc_version, &key); |
| 542 | if (status == EFI_BUFFER_TOO_SMALL) { | ||
| 543 | efi_free(sys_table, _size, (unsigned long)mem_map); | ||
| 544 | goto again; | ||
| 545 | } | ||
| 546 | 533 | ||
| 547 | if (status != EFI_SUCCESS) | 534 | if (status != EFI_SUCCESS) |
| 548 | goto free_mem_map; | 535 | return status; |
| 549 | 536 | ||
| 550 | memcpy(&efi->efi_loader_signature, EFI_LOADER_SIGNATURE, sizeof(__u32)); | 537 | memcpy(&efi->efi_loader_signature, EFI_LOADER_SIGNATURE, sizeof(__u32)); |
| 551 | efi->efi_systab = (unsigned long)sys_table; | 538 | efi->efi_systab = (unsigned long)sys_table; |
| @@ -574,6 +561,7 @@ get_map: | |||
| 574 | goto free_mem_map; | 561 | goto free_mem_map; |
| 575 | 562 | ||
| 576 | called_exit = true; | 563 | called_exit = true; |
| 564 | efi_call_phys1(sys_table->boottime->free_pool, mem_map); | ||
| 577 | goto get_map; | 565 | goto get_map; |
| 578 | } | 566 | } |
| 579 | 567 | ||
| @@ -642,7 +630,7 @@ get_map: | |||
| 642 | return EFI_SUCCESS; | 630 | return EFI_SUCCESS; |
| 643 | 631 | ||
| 644 | free_mem_map: | 632 | free_mem_map: |
| 645 | efi_free(sys_table, _size, (unsigned long)mem_map); | 633 | efi_call_phys1(sys_table->boottime->free_pool, mem_map); |
| 646 | return status; | 634 | return status; |
| 647 | } | 635 | } |
| 648 | 636 | ||
