kernel: split patches folder up into backport, pending and hack folders
[openwrt/staging/wigyori.git] / target / linux / generic / pending-4.9 / 920-mangle_bootargs.patch
diff --git a/target/linux/generic/pending-4.9/920-mangle_bootargs.patch b/target/linux/generic/pending-4.9/920-mangle_bootargs.patch
new file mode 100644 (file)
index 0000000..151a316
--- /dev/null
@@ -0,0 +1,78 @@
+From: Imre Kaloz <kaloz@openwrt.org>
+Subject: init: add CONFIG_MANGLE_BOOTARGS and disable it by default
+
+Enabling this option renames the bootloader supplied root=
+and rootfstype= variables, which might have to be know but
+would break the automatisms OpenWrt uses.
+
+Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
+---
+ init/Kconfig |  9 +++++++++
+ init/main.c  | 24 ++++++++++++++++++++++++
+ 2 files changed, 33 insertions(+)
+
+diff --git a/init/Kconfig b/init/Kconfig
+index 9063c81b9665..fb66d3ef78e0 100644
+--- a/init/Kconfig
++++ b/init/Kconfig
+@@ -1687,6 +1687,15 @@ config EMBEDDED
+         an embedded system so certain expert options are available
+         for configuration.
++config MANGLE_BOOTARGS
++      bool "Rename offending bootargs"
++      depends on EXPERT
++      help
++        Sometimes the bootloader passed bogus root= and rootfstype=
++        parameters to the kernel, and while you want to ignore them,
++        you need to know the values f.e. to support dual firmware
++        layouts on the flash.
++
+ config HAVE_PERF_EVENTS
+       bool
+       help
+diff --git a/init/main.c b/init/main.c
+index ae3996ae9bac..3855fa4ffb95 100644
+--- a/init/main.c
++++ b/init/main.c
+@@ -352,6 +352,29 @@ static inline void setup_nr_cpu_ids(void) { }
+ static inline void smp_prepare_cpus(unsigned int maxcpus) { }
+ #endif
++#ifdef CONFIG_MANGLE_BOOTARGS
++static void __init mangle_bootargs(char *command_line)
++{
++      char *rootdev;
++      char *rootfs;
++
++      rootdev = strstr(command_line, "root=/dev/mtdblock");
++
++      if (rootdev)
++              strncpy(rootdev, "mangled_rootblock=", 18);
++
++      rootfs = strstr(command_line, "rootfstype");
++
++      if (rootfs)
++              strncpy(rootfs, "mangled_fs", 10);
++
++}
++#else
++static void __init mangle_bootargs(char *command_line)
++{
++}
++#endif
++
+ /*
+  * We need to store the untouched command line for future reference.
+  * We also need to store the touched command line since the parameter
+@@ -504,6 +527,7 @@ asmlinkage __visible void __init start_kernel(void)
+       pr_notice("%s", linux_banner);
+       setup_arch(&command_line);
+       mm_init_cpumask(&init_mm);
++      mangle_bootargs(command_line);
+       setup_command_line(command_line);
+       setup_nr_cpu_ids();
+       setup_per_cpu_areas();
+-- 
+2.11.0
+