All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] kexec, x86: fix kexec when boot_params.hardware_subarch != 0
@ 2011-03-28 19:40 Chris Leech
  2011-03-28 21:40 ` Simon Horman
  2011-03-28 21:50 ` [PATCH V2] " Chris Leech
  0 siblings, 2 replies; 10+ messages in thread
From: Chris Leech @ 2011-03-28 19:40 UTC (permalink / raw)
  To: kexec

kexec needs to keep the subarch setting the same as the running kernel
in the boot parameters, or the kernel will die in early setup.  I ran
into this with X86_SUBARCH_MRST, but it should apply to CE4100 and any
future subarch that uses non-default early setup code.

This patch requires debugfs mounted at /sys/kernel/debug, as that's
the only way I know of to get at the running kernels boot_params.
Without debugfs mounted it falls back to the current behavior of
assuming subarch 0.

Signed-off-by: Chris Leech <christopher.leech@linux.intel.com>
---
 kexec/arch/i386/x86-linux-setup.c |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/kexec/arch/i386/x86-linux-setup.c b/kexec/arch/i386/x86-linux-setup.c
index f843ca4..b7f8bd8 100644
--- a/kexec/arch/i386/x86-linux-setup.c
+++ b/kexec/arch/i386/x86-linux-setup.c
@@ -20,6 +20,7 @@
 #include <string.h>
 #include <stdarg.h>
 #include <stdlib.h>
+#include <stddef.h>
 #include <errno.h>
 #include <limits.h>
 #include <sys/types.h>
@@ -396,12 +397,32 @@ out:
 		real_mode->eddbuf_entries);
 }
 
+#define BOOT_PARAMS_DBGFS	"/sys/kernel/debug/boot_params/data"
+
+void setup_subarch(struct x86_linux_param_header *real_mode)
+{
+	int data_file;
+	const off_t offset = offsetof(typeof(*real_mode), hardware_subarch);
+
+	data_file = open(BOOT_PARAMS_DBGFS, O_RDONLY);
+	if (data_file < 0)
+		return;
+	if (lseek(data_file, offset, SEEK_SET) < 0)
+		goto close;
+	read(data, &real_mode->hardware_subarch, sizeof(uint32_t));
+close:
+	close(data_file);
+}
+
 void setup_linux_system_parameters(struct x86_linux_param_header *real_mode,
 					unsigned long kexec_flags)
 {
 	/* Fill in information the BIOS would usually provide */
 	struct memory_range *range;
 	int i, ranges;
+
+	/* get subarch from running kernel */
+	setup_subarch(real_mode);
 	
 	/* Default screen size */
 	real_mode->orig_x = 0;


_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2011-04-27  6:18 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-28 19:40 [PATCH] kexec, x86: fix kexec when boot_params.hardware_subarch != 0 Chris Leech
2011-03-28 21:40 ` Simon Horman
2011-03-28 21:45   ` Chris Leech
2011-03-28 21:50 ` [PATCH V2] " Chris Leech
2011-03-28 22:19   ` Simon Horman
2011-03-29  9:04   ` WANG Cong
2011-03-29 23:22     ` Simon Horman
2011-03-31 17:21       ` Chris Leech
2011-04-01  2:00         ` [PATCH V2] kexec, x86: fix kexec when?boot_params.hardware_subarch " Simon Horman
2011-04-27  6:18           ` Simon Horman

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.