linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* linux-next: parsing mem=700M broken
@ 2008-12-23  3:06 Hugh Dickins
  2008-12-23  5:52 ` Yinghai Lu
  0 siblings, 1 reply; 19+ messages in thread
From: Hugh Dickins @ 2008-12-23  3:06 UTC (permalink / raw)
  To: Rusty Russell; +Cc: Stephen Rothwell, Andrew Morton, linux-kernel

Hi Rusty,

I find that bootparam "mem=700M" isn't working in linux-next or mmotm,
and have bisected it down to your patch below; but now I'm off to bed
without working out just what goes wrong (I'll bet it's the "=").

Hugh

commit 5c886584a758edba7e25ad9df974cf15a4a1f59d
Author: Rusty Russell <rusty@rustcorp.com.au>
Date:   Wed Dec 3 13:34:34 2008 +1030

    Call early_param earlier.
    
    We delete all the arch calls: we call it from start_kernel earlier
    now.  We also no longer take a temporary copy, but parse in place.
    
    Note: IA64 needs to parse "machvec=" before other commandline options
    but machvec_init_from_cmdline() needs efi_init() and io_port_init(),
    so they are all moved into arch_get_boot_command_line().
    
    Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
    Acked-by: Tony Luck <tony.luck@intel.com>

diff --git a/arch/avr32/kernel/setup.c b/arch/avr32/kernel/setup.c
index fd27063..7b4c0eb 100644
--- a/arch/avr32/kernel/setup.c
+++ b/arch/avr32/kernel/setup.c
@@ -580,8 +580,6 @@ void __init setup_arch(void)
 		       ((cpu_hz + 500) / 1000) % 1000);
 	}
 
-	parse_early_param();
-
 	setup_bootmem();
 
 #ifdef CONFIG_VT
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c
index 74868fa..0951971 100644
--- a/arch/ia64/kernel/setup.c
+++ b/arch/ia64/kernel/setup.c
@@ -533,15 +533,6 @@ void __init arch_get_boot_command_line(void)
 {
 	strlcpy(boot_command_line, __va(ia64_boot_param->command_line),
 		COMMAND_LINE_SIZE);
-}
-
-void __init setup_arch(void)
-{
-	unw_init();
-
-	paravirt_arch_setup_early();
-
-	ia64_patch_vtop((u64) __start___vtop_patchlist, (u64) __end___vtop_patchlist);
 
 	efi_init();
 	io_port_init();
@@ -554,8 +545,15 @@ void __init setup_arch(void)
 	 */
 	machvec_init_from_cmdline(boot_command_line);
 #endif
+}
+
+void __init setup_arch(void)
+{
+	unw_init();
+
+	paravirt_arch_setup_early();
 
-	parse_early_param();
+	ia64_patch_vtop((u64) __start___vtop_patchlist, (u64) __end___vtop_patchlist);
 
 	if (early_console_setup(boot_command_line) == 0)
 		mark_bsp_online();
diff --git a/arch/m68k/kernel/setup.c b/arch/m68k/kernel/setup.c
index ebb870b..d78e3c9 100644
--- a/arch/m68k/kernel/setup.c
+++ b/arch/m68k/kernel/setup.c
@@ -268,8 +268,6 @@ void __init setup_arch(void)
 	init_mm.end_data = (unsigned long) &_edata;
 	init_mm.brk = (unsigned long) &_end;
 
-	parse_early_param();
-
 #ifdef CONFIG_DUMMY_CONSOLE
 	conswitchp = &dummy_con;
 #endif
diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
index 2d9d479..7c02f39 100644
--- a/arch/mips/kernel/setup.c
+++ b/arch/mips/kernel/setup.c
@@ -482,8 +482,6 @@ static void __init arch_mem_init(void)
 	pr_info("Determined physical RAM map:\n");
 	print_memory_map();
 
-	parse_early_param();
-
 	if (usermem) {
 		pr_info("User-defined physical RAM map:\n");
 		print_memory_map();
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index 3a2dc7e..d36cbd0 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -1188,7 +1188,6 @@ void __init early_init_devtree(void *params)
 
 	/* Save command line for /proc/cmdline and then parse parameters */
 	strlcpy(boot_command_line, cmd_line, COMMAND_LINE_SIZE);
-	parse_early_param();
 
 	/* Reserve LMB regions used by kernel, initrd, dt, etc... */
 	lmb_reserve(PHYSICAL_START, __pa(klimit) - PHYSICAL_START);
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
index f736c68..7cb2868 100644
--- a/arch/s390/kernel/setup.c
+++ b/arch/s390/kernel/setup.c
@@ -785,8 +785,6 @@ setup_arch(void)
 	else
 		memcpy(&uaccess, &uaccess_std, sizeof(uaccess));
 
-	parse_early_param();
-
 	setup_ipl();
 	setup_memory_end();
 	setup_addressing_mode();
diff --git a/arch/sh/kernel/setup.c b/arch/sh/kernel/setup.c
index 58089b3..2fe5992 100644
--- a/arch/sh/kernel/setup.c
+++ b/arch/sh/kernel/setup.c
@@ -382,8 +382,6 @@ void __init setup_arch(void)
 	if (!memory_end)
 		memory_end = memory_start + __MEMORY_SIZE;
 
-	parse_early_param();
-
 	sh_mv_setup();
 
 	/*
diff --git a/arch/sparc/kernel/setup.c b/arch/sparc/kernel/setup.c
index 883bade..dac4a9e 100644
--- a/arch/sparc/kernel/setup.c
+++ b/arch/sparc/kernel/setup.c
@@ -215,9 +215,6 @@ void __init setup_arch(void)
 
 	sparc_ttable = (struct tt_entry *) &start;
 
-	/* Initialize PROM console. */
-	parse_early_param();
-
 	/* Set sparc_cpu_model */
 	sparc_cpu_model = sun_unknown;
 	if (!strcmp(&cputypval,"sun4 "))
diff --git a/arch/sparc64/kernel/setup.c b/arch/sparc64/kernel/setup.c
index 8827c2a..431cb97 100644
--- a/arch/sparc64/kernel/setup.c
+++ b/arch/sparc64/kernel/setup.c
@@ -283,9 +283,6 @@ void __init arch_get_boot_command_line(void)
 
 void __init setup_arch(void)
 {
-	/* Initialize PROM console. */
-	parse_early_param();
-
 	boot_flags_init(boot_command_line);
 	register_console(&prom_early_console);
 
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 1669ce2..13fec0e 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -876,8 +876,6 @@ void __init setup_arch(void)
 	bss_resource.start = virt_to_phys(&__bss_start);
 	bss_resource.end = virt_to_phys(&__bss_stop)-1;
 
-	parse_early_param();
-
 #ifdef CONFIG_X86_64
 	check_efer();
 #endif
@@ -915,7 +913,6 @@ void __init setup_arch(void)
 	probe_roms();
 #endif
 
-	/* after parse_early_param, so could debug it */
 	insert_resource(&iomem_resource, &code_resource);
 	insert_resource(&iomem_resource, &data_resource);
 	insert_resource(&iomem_resource, &bss_resource);
diff --git a/include/linux/init.h b/include/linux/init.h
index 9b57a61..8cd1a93 100644
--- a/include/linux/init.h
+++ b/include/linux/init.h
@@ -246,8 +246,6 @@ struct obs_kernel_param {
 #define early_param(str, fn)					\
 	__setup_param(str, fn, fn, 1)
 
-/* Relies on boot_command_line being set */
-void __init parse_early_param(void);
 #endif /* __ASSEMBLY__ */
 
 /**
diff --git a/init/main.c b/init/main.c
index 718027b..145579d 100644
--- a/init/main.c
+++ b/init/main.c
@@ -206,7 +206,7 @@ static int __init obsolete_checksetup(char *line)
 		int n = strlen(p->str);
 		if (!strncmp(line, p->str, n)) {
 			if (p->early) {
-				/* Already done in parse_early_param?
+				/* Already done in do_early_param?
 				 * (Needs exact match on param part).
 				 * Keep iterating, as we can have early
 				 * params and __setups of same names 8( */
@@ -523,21 +523,6 @@ static int __init do_early_param(char *param, char *val)
 	return 0;
 }
 
-/* Arch code calls this early on, or if not, just before other parsing. */
-void __init parse_early_param(void)
-{
-	static __initdata int done = 0;
-	static __initdata char tmp_cmdline[COMMAND_LINE_SIZE];
-
-	if (done)
-		return;
-
-	/* All fall through to do_early_param. */
-	strlcpy(tmp_cmdline, boot_command_line, COMMAND_LINE_SIZE);
-	parse_args("early options", tmp_cmdline, NULL, 0, do_early_param, true);
-	done = 1;
-}
-
 /*
  *	Activate the first processor.
  */
@@ -566,6 +551,9 @@ asmlinkage void __init start_kernel(void)
 	parse_args("Core params", boot_command_line, __start___core_param,
 		   __stop___core_param - __start___core_param,
 		   unknown_core_ok, true);
+	/* All fall through to do_early_param. */
+	parse_args("early options", boot_command_line, NULL, 0, do_early_param,
+		   true);
 
 	smp_setup_processor_id();
 
@@ -615,7 +603,6 @@ asmlinkage void __init start_kernel(void)
 	build_all_zonelists();
 	page_alloc_init();
 	printk(KERN_NOTICE "Kernel command line: %s\n", boot_command_line);
-	parse_early_param();
 	parse_args("Booting kernel", static_command_line, __start___param,
 		   __stop___param - __start___param,
 		   &unknown_bootoption, false);

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

end of thread, other threads:[~2009-01-01  3:43 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-12-23  3:06 linux-next: parsing mem=700M broken Hugh Dickins
2008-12-23  5:52 ` Yinghai Lu
2008-12-23 14:33   ` Ingo Molnar
2008-12-24  7:38     ` Rusty Russell
2008-12-24  8:09       ` Yinghai Lu
2008-12-24 23:09         ` Yinghai Lu
2008-12-25 11:40         ` Rusty Russell
2008-12-25 22:46           ` Yinghai Lu
2008-12-24 12:30       ` Ingo Oeser
2008-12-25  5:50         ` Rusty Russell
2008-12-24 14:44       ` Hugh Dickins
2008-12-25  3:28         ` Rusty Russell
2008-12-27 13:12         ` Rusty Russell
2008-12-28  0:43           ` Hugh Dickins
2008-12-28  2:07             ` Yinghai Lu
2009-01-01  3:42               ` Rusty Russell
2008-12-25 12:17     ` [RFC] boot parameter handling cleanup II Rusty Russell
2008-12-25 12:20       ` [RFC PATCH] param: start_kernel_with_args() Rusty Russell
2008-12-27 10:14       ` [RFC] boot parameter handling cleanup II Ingo Molnar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).