On 29 July 2014 17:29, Mark Salter <[email protected]> wrote:
> On Tue, 2014-07-29 at 12:49 +0200, Ard Biesheuvel wrote:
>> If we cannot relocate the kernel Image to its preferred offset of base of
>> DRAM
>> plus TEXT_OFFSET, instead relocate it to the lowest available 2 MB boundary
>> plus
>> TEXT_OFFSET. We may lose a bit of memory at the low end, but we can still
>> proceed normally otherwise.
>>
>> Signed-off-by: Ard Biesheuvel <[email protected]>
>> ---
>> arch/arm64/kernel/efi-stub.c | 16 ++++++----------
>> 1 file changed, 6 insertions(+), 10 deletions(-)
>
> Tested on Mustang (with loss of 2MB free memory).
>
Great, thanks!
>>
>> diff --git a/arch/arm64/kernel/efi-stub.c b/arch/arm64/kernel/efi-stub.c
>> index 60e98a639ac5..460c00c41e57 100644
>> --- a/arch/arm64/kernel/efi-stub.c
>> +++ b/arch/arm64/kernel/efi-stub.c
>> @@ -60,20 +60,16 @@ static efi_status_t
>> handle_kernel_image(efi_system_table_t *sys_table,
>> kernel_size = _edata - _text;
>> if (*image_addr != (dram_base + TEXT_OFFSET)) {
>> kernel_memsize = kernel_size + (_end - _edata);
>> - status = efi_relocate_kernel(sys_table, image_addr,
>> - kernel_size, kernel_memsize,
>> - dram_base + TEXT_OFFSET,
>> - PAGE_SIZE);
>
> Can we make efi_relocate_kernel static inline to get rid
> of the "defined but unused" warning?
>
I have some patches pending in the EFI tree to turn the stub into a
static library, and that already takes care of this issue.
> Otherwise:
>
> Acked-by: Mark Salter <[email protected]>
>
Cheers,
Ard.
>> + status = efi_low_alloc(sys_table, kernel_memsize + TEXT_OFFSET,
>> + SZ_2M, reserve_addr);
>> if (status != EFI_SUCCESS) {
>> pr_efi_err(sys_table, "Failed to relocate kernel\n");
>> return status;
>> }
>> - if (*image_addr != (dram_base + TEXT_OFFSET)) {
>> - pr_efi_err(sys_table, "Failed to alloc kernel
>> memory\n");
>> - efi_free(sys_table, kernel_memsize, *image_addr);
>> - return EFI_ERROR;
>> - }
>> - *image_size = kernel_memsize;
>> + memcpy((void *)*reserve_addr + TEXT_OFFSET, (void
>> *)*image_addr,
>> + kernel_size);
>> + *image_addr = *reserve_addr + TEXT_OFFSET;
>> + *reserve_size = kernel_memsize + TEXT_OFFSET;
>> }
>>
>>
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-efi" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html