On Fri, Apr 11, 2014 at 12:10:30PM +0200, Laurent Dufour wrote:
> The initrd values exposed in the device tree of the kexeced kernel must be
> encoded in Big Endian format.
> 
> Without this patch, kexeced LE kernel are expected to panic when dealing
> with the initrd image.
> 
> Signed-off-by: Laurent Dufour <[email protected]>

Thanks, applied.

> ---
>  kexec/fs2dt.c |    9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/kexec/fs2dt.c b/kexec/fs2dt.c
> index 5e6b98d..2a90979 100644
> --- a/kexec/fs2dt.c
> +++ b/kexec/fs2dt.c
> @@ -531,7 +531,7 @@ static void putnode(void)
>       /* Add initrd entries to the second kernel */
>       if (initrd_base && initrd_size && !strcmp(basename,"chosen/")) {
>               int len = 8;
> -             unsigned long long initrd_end;
> +             uint64_t bevalue;
>  
>               dt_reserve(&dt, 12); /* both props, of 6 words ea. */
>               *dt++ = cpu_to_be32(3);
> @@ -539,7 +539,8 @@ static void putnode(void)
>               *dt++ = cpu_to_be32(propnum("linux,initrd-start"));
>               pad_structure_block(len);
>  
> -             memcpy(dt,&initrd_base,len);
> +             bevalue = cpu_to_be64(initrd_base);
> +             memcpy(dt, &bevalue, len);
>               dt += (len + 3)/4;
>  
>               len = 8;
> @@ -547,10 +548,10 @@ static void putnode(void)
>               *dt++ = cpu_to_be32(len);
>               *dt++ = cpu_to_be32(propnum("linux,initrd-end"));
>  
> -             initrd_end = initrd_base + initrd_size;
> +             bevalue = cpu_to_be64(initrd_base + initrd_size);
>               pad_structure_block(len);
>  
> -             memcpy(dt,&initrd_end,len);
> +             memcpy(dt, &bevalue, len);
>               dt += (len + 3)/4;
>  
>               reserve(initrd_base, initrd_size);
> 

_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to