[PATCH] make all archs use early_param

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



To celebrate the 2-year anniversary of the creation of the arch-indep
early_param() macros and the generic parse_early_param(), this patch
stops calling it for archs which didn't inserts explicit calls,
polite FIXMEs and a BUG_ON().

Gold star to PowerPC and s390 for calling parse_early_param(), *and*
using it instead of open-coded early cmdline hacking.

Quick guide:
(1) setup_arch() should call parse_early_param() as soon as
    saved_command_line is set.

(2) Use "early_param("param", parse_param);": parse_param() gets a
    NULL arg if cmdline is "param", otherwise whatever follows
    "param=".  Returns 0 on success, -ve on error (which causes printk).

Signed-off-by: Rusty Russell <[email protected]>

diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/dontdiff --minimal linux-2.6.18-rc3-mm2/init/main.c working-2.6.18-rc3-mm2-early_param-for-all/init/main.c
--- linux-2.6.18-rc3-mm2/init/main.c	2006-08-07 12:41:01.000000000 +1000
+++ working-2.6.18-rc3-mm2-early_param-for-all/init/main.c	2006-08-11 17:14:26.000000000 +1000
@@ -445,19 +445,17 @@ static int __init do_early_param(char *p
 	return 0;
 }
 
-/* Arch code calls this early on, or if not, just before other parsing. */
+static __initdata int early_param_parsed;
+
+/* Arch code calls this early on, usually from setup_arch. */
 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, saved_command_line, COMMAND_LINE_SIZE);
 	parse_args("early options", tmp_cmdline, NULL, 0, do_early_param);
-	done = 1;
+	early_param_parsed = 1;
 }
 
 /*
@@ -521,7 +519,7 @@ asmlinkage void __init start_kernel(void
 	build_all_zonelists();
 	page_alloc_init();
 	printk(KERN_NOTICE "Kernel command line: %s\n", saved_command_line);
-	parse_early_param();
+	BUG_ON(!early_param_parsed);
 	parse_args("Booting kernel", command_line, __start___param,
 		   __stop___param - __start___param,
 		   &unknown_bootoption);
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/dontdiff --minimal linux-2.6.18-rc3-mm2/arch/alpha/kernel/setup.c working-2.6.18-rc3-mm2-early_param-for-all/arch/alpha/kernel/setup.c
--- linux-2.6.18-rc3-mm2/arch/alpha/kernel/setup.c	2006-08-07 12:40:14.000000000 +1000
+++ working-2.6.18-rc3-mm2-early_param-for-all/arch/alpha/kernel/setup.c	2006-08-11 17:14:03.000000000 +1000
@@ -545,8 +545,10 @@ setup_arch(char **cmdline_p)
 	strcpy(saved_command_line, command_line);
 	*cmdline_p = command_line;
 
+	parse_early_param();
+
 	/* 
-	 * Process command-line arguments.
+	 * Process command-line arguments.  FIXME: Convert to early_param()
 	 */
 	while ((p = strsep(&args, " \t")) != NULL) {
 		if (!*p) continue;
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/dontdiff --minimal linux-2.6.18-rc3-mm2/arch/arm26/kernel/setup.c working-2.6.18-rc3-mm2-early_param-for-all/arch/arm26/kernel/setup.c
--- linux-2.6.18-rc3-mm2/arch/arm26/kernel/setup.c	2006-08-07 12:40:14.000000000 +1000
+++ working-2.6.18-rc3-mm2-early_param-for-all/arch/arm26/kernel/setup.c	2006-08-11 17:14:03.000000000 +1000
@@ -494,6 +494,7 @@ void __init setup_arch(char **cmdline_p)
 
 	memcpy(saved_command_line, from, COMMAND_LINE_SIZE);
 	saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
+	parse_early_param();
 	parse_cmdline(&meminfo, cmdline_p, from);
 	bootmem_init(&meminfo);
 	paging_init(&meminfo);
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/dontdiff --minimal linux-2.6.18-rc3-mm2/arch/avr32/kernel/setup.c working-2.6.18-rc3-mm2-early_param-for-all/arch/avr32/kernel/setup.c
--- linux-2.6.18-rc3-mm2/arch/avr32/kernel/setup.c	2006-08-07 12:40:14.000000000 +1000
+++ working-2.6.18-rc3-mm2-early_param-for-all/arch/avr32/kernel/setup.c	2006-08-11 17:14:03.000000000 +1000
@@ -341,7 +341,9 @@ void __init setup_arch (char **cmdline_p
 	init_mm.end_data = (unsigned long) &_edata;
 	init_mm.brk = (unsigned long) &_end;
 
+	/* FIXME: use early_param() */
 	parse_cmdline_early(cmdline_p);
+	parse_early_param();
 
 	setup_bootmem();
 
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/dontdiff --minimal linux-2.6.18-rc3-mm2/arch/cris/kernel/setup.c working-2.6.18-rc3-mm2-early_param-for-all/arch/cris/kernel/setup.c
--- linux-2.6.18-rc3-mm2/arch/cris/kernel/setup.c	2006-08-07 12:40:14.000000000 +1000
+++ working-2.6.18-rc3-mm2-early_param-for-all/arch/cris/kernel/setup.c	2006-08-11 17:14:03.000000000 +1000
@@ -155,6 +155,7 @@ setup_arch(char **cmdline_p)
 	/* Save command line for future references. */
 	memcpy(saved_command_line, cris_command_line, COMMAND_LINE_SIZE);
 	saved_command_line[COMMAND_LINE_SIZE - 1] = '\0';
+	parse_early_param();
 
 	/* give credit for the CRIS port */
 	show_etrax_copyright();
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/dontdiff --minimal linux-2.6.18-rc3-mm2/arch/frv/kernel/setup.c working-2.6.18-rc3-mm2-early_param-for-all/arch/frv/kernel/setup.c
--- linux-2.6.18-rc3-mm2/arch/frv/kernel/setup.c	2006-08-03 12:50:11.000000000 +1000
+++ working-2.6.18-rc3-mm2-early_param-for-all/arch/frv/kernel/setup.c	2006-08-11 17:14:03.000000000 +1000
@@ -765,6 +765,7 @@ void __init setup_arch(char **cmdline_p)
 #endif
 
 	memcpy(saved_command_line, redboot_command_line, COMMAND_LINE_SIZE);
+	parse_early_param();
 
 	determine_cpu();
 	determine_clocks(1);
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/dontdiff --minimal linux-2.6.18-rc3-mm2/arch/h8300/kernel/setup.c working-2.6.18-rc3-mm2-early_param-for-all/arch/h8300/kernel/setup.c
--- linux-2.6.18-rc3-mm2/arch/h8300/kernel/setup.c	2006-08-03 12:50:11.000000000 +1000
+++ working-2.6.18-rc3-mm2-early_param-for-all/arch/h8300/kernel/setup.c	2006-08-11 17:14:03.000000000 +1000
@@ -156,6 +156,7 @@ void __init setup_arch(char **cmdline_p)
 	*cmdline_p = &command_line[0];
 	memcpy(saved_command_line, command_line, COMMAND_LINE_SIZE);
 	saved_command_line[COMMAND_LINE_SIZE-1] = 0;
+	parse_early_param();
 
 #ifdef DEBUG
 	if (strlen(*cmdline_p)) 
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/dontdiff --minimal linux-2.6.18-rc3-mm2/arch/ia64/kernel/setup.c working-2.6.18-rc3-mm2-early_param-for-all/arch/ia64/kernel/setup.c
--- linux-2.6.18-rc3-mm2/arch/ia64/kernel/setup.c	2006-08-07 12:40:18.000000000 +1000
+++ working-2.6.18-rc3-mm2-early_param-for-all/arch/ia64/kernel/setup.c	2006-08-11 17:14:03.000000000 +1000
@@ -444,6 +444,7 @@ setup_arch (char **cmdline_p)
 	machvec_init(NULL);
 #endif
 
+	/* FIXME: Convert this and platform_setup to use early_param() */
 	if (early_console_setup(*cmdline_p) == 0)
 		mark_bsp_online();
 
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/dontdiff --minimal linux-2.6.18-rc3-mm2/arch/m32r/kernel/setup.c working-2.6.18-rc3-mm2-early_param-for-all/arch/m32r/kernel/setup.c
--- linux-2.6.18-rc3-mm2/arch/m32r/kernel/setup.c	2006-08-03 12:50:15.000000000 +1000
+++ working-2.6.18-rc3-mm2-early_param-for-all/arch/m32r/kernel/setup.c	2006-08-11 17:14:03.000000000 +1000
@@ -260,7 +260,9 @@ void __init setup_arch(char **cmdline_p)
 	data_resource.start = virt_to_phys(_etext);
 	data_resource.end = virt_to_phys(_edata)-1;
 
+	/* FIXME: Use early_param() */
 	parse_mem_cmdline(cmdline_p);
+	parse_early_param();
 
 	setup_memory();
 
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/dontdiff --minimal linux-2.6.18-rc3-mm2/arch/m68k/kernel/setup.c working-2.6.18-rc3-mm2-early_param-for-all/arch/m68k/kernel/setup.c
--- linux-2.6.18-rc3-mm2/arch/m68k/kernel/setup.c	2006-08-03 12:50:15.000000000 +1000
+++ working-2.6.18-rc3-mm2-early_param-for-all/arch/m68k/kernel/setup.c	2006-08-11 17:14:03.000000000 +1000
@@ -242,7 +242,9 @@ void __init setup_arch(char **cmdline_p)
 
 	*cmdline_p = m68k_command_line;
 	memcpy(saved_command_line, *cmdline_p, CL_SIZE);
+	parse_early_param();
 
+	/* FIXME: Replace with early_param() */
 	/* Parse the command line for arch-specific options.
 	 * For the m68k, this is currently only "debug=xxx" to enable printing
 	 * certain kernel messages to some machine-specific device.
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/dontdiff --minimal linux-2.6.18-rc3-mm2/arch/m68knommu/kernel/setup.c working-2.6.18-rc3-mm2-early_param-for-all/arch/m68knommu/kernel/setup.c
--- linux-2.6.18-rc3-mm2/arch/m68knommu/kernel/setup.c	2006-08-03 12:50:15.000000000 +1000
+++ working-2.6.18-rc3-mm2-early_param-for-all/arch/m68knommu/kernel/setup.c	2006-08-11 17:14:03.000000000 +1000
@@ -236,6 +236,7 @@ void setup_arch(char **cmdline_p)
 	*cmdline_p = &command_line[0];
 	memcpy(saved_command_line, command_line, COMMAND_LINE_SIZE);
 	saved_command_line[COMMAND_LINE_SIZE-1] = 0;
+	parse_early_param();
 
 #ifdef DEBUG
 	if (strlen(*cmdline_p))
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/dontdiff --minimal linux-2.6.18-rc3-mm2/arch/mips/kernel/setup.c working-2.6.18-rc3-mm2-early_param-for-all/arch/mips/kernel/setup.c
--- linux-2.6.18-rc3-mm2/arch/mips/kernel/setup.c	2006-08-03 12:50:17.000000000 +1000
+++ working-2.6.18-rc3-mm2-early_param-for-all/arch/mips/kernel/setup.c	2006-08-11 17:14:03.000000000 +1000
@@ -476,7 +476,9 @@ static void __init arch_mem_init(char **
 	strlcpy(saved_command_line, command_line, COMMAND_LINE_SIZE);
 
 	*cmdline_p = command_line;
+	parse_early_param();
 
+	/* FIXME: replace with early_param() */
 	parse_cmdline_early();
 	bootmem_init();
 	sparse_init();
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/dontdiff --minimal linux-2.6.18-rc3-mm2/arch/parisc/kernel/setup.c working-2.6.18-rc3-mm2-early_param-for-all/arch/parisc/kernel/setup.c
--- linux-2.6.18-rc3-mm2/arch/parisc/kernel/setup.c	2006-08-03 12:50:18.000000000 +1000
+++ working-2.6.18-rc3-mm2-early_param-for-all/arch/parisc/kernel/setup.c	2006-08-11 17:14:03.000000000 +1000
@@ -141,6 +141,7 @@ void __init setup_arch(char **cmdline_p)
 #endif
 	setup_pdc();
 	setup_cmdline(cmdline_p);
+	parse_early_param();
 	collect_boot_cpu_data();
 	do_memory_inventory();  /* probe for physical memory */
 	parisc_cache_init();
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/dontdiff --minimal linux-2.6.18-rc3-mm2/arch/s390/kernel/setup.c working-2.6.18-rc3-mm2-early_param-for-all/arch/s390/kernel/setup.c
--- linux-2.6.18-rc3-mm2/arch/s390/kernel/setup.c	2006-08-03 12:50:21.000000000 +1000
+++ working-2.6.18-rc3-mm2-early_param-for-all/arch/s390/kernel/setup.c	2006-08-11 17:14:03.000000000 +1000
@@ -600,6 +600,7 @@ setup_arch(char **cmdline_p)
 
 	/* Save unparsed command line copy for /proc/cmdline */
 	strlcpy(saved_command_line, COMMAND_LINE, COMMAND_LINE_SIZE);
+	parse_early_param();
 
 	*cmdline_p = COMMAND_LINE;
 	*(*cmdline_p + COMMAND_LINE_SIZE - 1) = '\0';
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/dontdiff --minimal linux-2.6.18-rc3-mm2/arch/sh/kernel/setup.c working-2.6.18-rc3-mm2-early_param-for-all/arch/sh/kernel/setup.c
--- linux-2.6.18-rc3-mm2/arch/sh/kernel/setup.c	2006-08-07 12:40:19.000000000 +1000
+++ working-2.6.18-rc3-mm2-early_param-for-all/arch/sh/kernel/setup.c	2006-08-11 17:14:03.000000000 +1000
@@ -274,7 +274,9 @@ void __init setup_arch(char **cmdline_p)
 	data_resource.start = (unsigned long)virt_to_phys(_etext);
 	data_resource.end = (unsigned long)virt_to_phys(_edata)-1;
 
+	/* FIXME: Replace with early_param() */
 	sh_mv_setup(cmdline_p);
+	parse_early_param();
 
 	/*
 	 * Find the highest page frame number we have available
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/dontdiff --minimal linux-2.6.18-rc3-mm2/arch/sh64/kernel/setup.c working-2.6.18-rc3-mm2-early_param-for-all/arch/sh64/kernel/setup.c
--- linux-2.6.18-rc3-mm2/arch/sh64/kernel/setup.c	2006-08-03 12:50:21.000000000 +1000
+++ working-2.6.18-rc3-mm2-early_param-for-all/arch/sh64/kernel/setup.c	2006-08-11 17:14:03.000000000 +1000
@@ -194,7 +194,9 @@ void __init setup_arch(char **cmdline_p)
 	data_resource.start = __pa(_etext);
 	data_resource.end = __pa(_edata)-1;
 
+	/* FIXME: Use early_param() */
 	parse_mem_cmdline(cmdline_p);
+	parse_early_param();
 
 	/*
 	 * Find the lowest and highest page frame numbers we have available
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/dontdiff --minimal linux-2.6.18-rc3-mm2/arch/sparc/kernel/setup.c working-2.6.18-rc3-mm2-early_param-for-all/arch/sparc/kernel/setup.c
--- linux-2.6.18-rc3-mm2/arch/sparc/kernel/setup.c	2006-08-03 12:50:21.000000000 +1000
+++ working-2.6.18-rc3-mm2-early_param-for-all/arch/sparc/kernel/setup.c	2006-08-11 17:14:03.000000000 +1000
@@ -259,6 +259,7 @@ void __init setup_arch(char **cmdline_p)
 	/* Initialize PROM console and command line. */
 	*cmdline_p = prom_getbootargs();
 	strcpy(saved_command_line, *cmdline_p);
+	parse_early_param();
 
 	/* Set sparc_cpu_model */
 	sparc_cpu_model = sun_unknown;
@@ -306,6 +307,7 @@ void __init setup_arch(char **cmdline_p)
 #elif defined(CONFIG_PROM_CONSOLE)
 	conswitchp = &prom_con;
 #endif
+	/* FIXME: use early_param() */
 	boot_flags_init(*cmdline_p);
 
 	idprom_init();
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/dontdiff --minimal linux-2.6.18-rc3-mm2/arch/sparc64/kernel/setup.c working-2.6.18-rc3-mm2-early_param-for-all/arch/sparc64/kernel/setup.c
--- linux-2.6.18-rc3-mm2/arch/sparc64/kernel/setup.c	2006-08-03 12:50:22.000000000 +1000
+++ working-2.6.18-rc3-mm2-early_param-for-all/arch/sparc64/kernel/setup.c	2006-08-11 17:14:03.000000000 +1000
@@ -328,6 +328,7 @@ void __init setup_arch(char **cmdline_p)
 	/* Initialize PROM console and command line. */
 	*cmdline_p = prom_getbootargs();
 	strcpy(saved_command_line, *cmdline_p);
+	parse_early_param();
 
 	if (tlb_type == hypervisor)
 		printk("ARCH: SUN4V\n");
@@ -340,6 +341,7 @@ void __init setup_arch(char **cmdline_p)
 	conswitchp = &prom_con;
 #endif
 
+	/* FIXME: use early_param() */
 	boot_flags_init(*cmdline_p);
 
 	idprom_init();
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/dontdiff --minimal linux-2.6.18-rc3-mm2/arch/um/kernel/um_arch.c working-2.6.18-rc3-mm2-early_param-for-all/arch/um/kernel/um_arch.c
--- linux-2.6.18-rc3-mm2/arch/um/kernel/um_arch.c	2006-08-07 12:40:19.000000000 +1000
+++ working-2.6.18-rc3-mm2-early_param-for-all/arch/um/kernel/um_arch.c	2006-08-11 17:14:03.000000000 +1000
@@ -485,6 +485,7 @@ void __init setup_arch(char **cmdline_p)
 	paging_init();
         strlcpy(saved_command_line, command_line, COMMAND_LINE_SIZE);
  	*cmdline_p = command_line;
+	parse_early_param();
 	setup_hostinfo();
 }
 
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/dontdiff --minimal linux-2.6.18-rc3-mm2/arch/v850/kernel/setup.c working-2.6.18-rc3-mm2-early_param-for-all/arch/v850/kernel/setup.c
--- linux-2.6.18-rc3-mm2/arch/v850/kernel/setup.c	2006-08-07 12:40:20.000000000 +1000
+++ working-2.6.18-rc3-mm2-early_param-for-all/arch/v850/kernel/setup.c	2006-08-11 17:14:03.000000000 +1000
@@ -66,6 +66,7 @@ void __init setup_arch (char **cmdline)
 	*cmdline = command_line;
 	memcpy (saved_command_line, command_line, COMMAND_LINE_SIZE);
 	saved_command_line[COMMAND_LINE_SIZE - 1] = '\0';
+	parse_early_param();
 
 	console_verbose ();
 
@@ -83,6 +84,7 @@ void __init setup_arch (char **cmdline)
 		CPU_MODEL_LONG, PLATFORM_LONG);
 
 	/* do machine-specific setups.  */
+	/* FIXME: use early_param() */
 	mach_setup (cmdline);
 
 #ifdef CONFIG_MTD
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/dontdiff --minimal linux-2.6.18-rc3-mm2/arch/xtensa/kernel/setup.c working-2.6.18-rc3-mm2-early_param-for-all/arch/xtensa/kernel/setup.c
--- linux-2.6.18-rc3-mm2/arch/xtensa/kernel/setup.c	2006-08-03 12:50:24.000000000 +1000
+++ working-2.6.18-rc3-mm2-early_param-for-all/arch/xtensa/kernel/setup.c	2006-08-11 17:14:03.000000000 +1000
@@ -258,6 +258,7 @@ void __init setup_arch(char **cmdline_p)
 	memcpy(saved_command_line, command_line, COMMAND_LINE_SIZE);
 	saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
 	*cmdline_p = command_line;
+	parse_early_param();
 
 	/* Reserve some memory regions */
 

-- 
Help! Save Australia from the worst of the DMCA: http://linux.org.au/law

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux