[PATCH] fixup! arm64: allow kernel Image to be loaded anywhere in physical memory

Ard Biesheuvel ard.biesheuvel at linaro.org
Thu May 21 23:34:35 PDT 2015


On 22 May 2015 at 07:43, AKASHI Takahiro <takahiro.akashi at linaro.org> wrote:
> Ard,
>
> In testing my kexec/dump code, I found that your patch doesn't work
> with initrd. Since the virtual addresses of initrd are calc'ed earlier
> than map_mem(), they have bogus values and unpack_to_rootfs() will fail.
>
> This patch fixes the issue.
> Please think of taking it in your next version.

Thanks a lot! This series is obviously still under review, but I will
squash this into the next version if it is still appropriate by then.
And I will make sure to test with initrd as well :-)

Regards,
Ard.

> ---
>  arch/arm64/mm/mmu.c |    8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
> index 7e3e6af..43c2317 100644
> --- a/arch/arm64/mm/mmu.c
> +++ b/arch/arm64/mm/mmu.c
> @@ -21,6 +21,7 @@
>  #include <linux/kernel.h>
>  #include <linux/errno.h>
>  #include <linux/init.h>
> +#include <linux/initrd.h>
>  #include <linux/libfdt.h>
>  #include <linux/mman.h>
>  #include <linux/nodemask.h>
> @@ -452,6 +453,13 @@ static void __init map_mem(void)
>         bootstrap_linear_mapping(new_va_offset);
>
>         kernel_va_offset = new_va_offset;
> +
> +       /* Recalculate virtual addresses of initrd region */
> +       if (initrd_start) {
> +               initrd_start += new_va_offset;
> +               initrd_end += new_va_offset;
> +       }
> +
>         memstart_addr = new_memstart_addr;
>
>         /* map all the memory banks */
> --
> 1.7.9.5
>



More information about the linux-arm-kernel mailing list