28cfac93e1
OBS-URL: https://build.opensuse.org/request/show/232373 OBS-URL: https://build.opensuse.org/package/show/Kernel:kdump/kexec-tools?expand=0&rev=44
55 lines
1.7 KiB
Diff
55 lines
1.7 KiB
Diff
From: Laurent Dufour <ldufour@linux.vnet.ibm.com>
|
|
Subject: [PATCH] kexec/fs2dt : Fix endianess issue with initrd base and size
|
|
Date: Fri, 11 Apr 2014 12:10:30 +0200
|
|
Git-commit: db3c32babc5279816344be8210ca91a64331f0fe
|
|
References: bnc#873169
|
|
Signed-off-by: Tony Jones <tonyj@suse.de>
|
|
|
|
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 <ldufour@linux.vnet.ibm.com>
|
|
---
|
|
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);
|