Merge tag 'trace-v5.6-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt...
[linux-2.6-microblaze.git] / init / main.c
index 491f1cd..cc0ee48 100644 (file)
@@ -64,7 +64,7 @@
 #include <linux/lockdep.h>
 #include <linux/kmemleak.h>
 #include <linux/pid_namespace.h>
-#include <linux/device.h>
+#include <linux/device/driver.h>
 #include <linux/kthread.h>
 #include <linux/sched.h>
 #include <linux/sched/init.h>
@@ -399,8 +399,7 @@ not_found:
 #endif
 
 /* Change NUL term back to "=", to make "param" the whole string. */
-static int __init repair_env_string(char *param, char *val,
-                                   const char *unused, void *arg)
+static void __init repair_env_string(char *param, char *val)
 {
        if (val) {
                /* param=val or param="val"? */
@@ -409,11 +408,9 @@ static int __init repair_env_string(char *param, char *val,
                else if (val == param+strlen(param)+2) {
                        val[-2] = '=';
                        memmove(val-1, val, strlen(val)+1);
-                       val--;
                } else
                        BUG();
        }
-       return 0;
 }
 
 /* Anything after -- gets handed straight to init. */
@@ -425,7 +422,7 @@ static int __init set_init_arg(char *param, char *val,
        if (panic_later)
                return 0;
 
-       repair_env_string(param, val, unused, NULL);
+       repair_env_string(param, val);
 
        for (i = 0; argv_init[i]; i++) {
                if (i == MAX_INIT_ARGS) {
@@ -445,14 +442,16 @@ static int __init set_init_arg(char *param, char *val,
 static int __init unknown_bootoption(char *param, char *val,
                                     const char *unused, void *arg)
 {
-       repair_env_string(param, val, unused, NULL);
+       size_t len = strlen(param);
+
+       repair_env_string(param, val);
 
        /* Handle obsolete-style parameters */
        if (obsolete_checksetup(param))
                return 0;
 
        /* Unused module parameter. */
-       if (strchr(param, '.') && (!val || strchr(param, '.') < val))
+       if (strnchr(param, len, '.'))
                return 0;
 
        if (panic_later)
@@ -466,7 +465,7 @@ static int __init unknown_bootoption(char *param, char *val,
                                panic_later = "env";
                                panic_param = param;
                        }
-                       if (!strncmp(param, envp_init[i], val - param))
+                       if (!strncmp(param, envp_init[i], len+1))
                                break;
                }
                envp_init[i] = param;
@@ -734,6 +733,7 @@ static void __init mm_init(void)
         * bigger than MAX_ORDER unless SPARSEMEM.
         */
        page_ext_init_flatmem();
+       init_debug_pagealloc();
        report_meminit();
        mem_init();
        kmem_cache_init();
@@ -1175,6 +1175,12 @@ static const char *initcall_level_names[] __initdata = {
        "late",
 };
 
+static int __init ignore_unknown_bootoption(char *param, char *val,
+                              const char *unused, void *arg)
+{
+       return 0;
+}
+
 static void __init do_initcall_level(int level, char *command_line)
 {
        initcall_entry_t *fn;
@@ -1183,7 +1189,7 @@ static void __init do_initcall_level(int level, char *command_line)
                   command_line, __start___param,
                   __stop___param - __start___param,
                   level, level,
-                  NULL, &repair_env_string);
+                  NULL, ignore_unknown_bootoption);
 
        trace_initcall_level(initcall_level_names[level]);
        for (fn = initcall_levels[level]; fn < initcall_levels[level+1]; fn++)
@@ -1237,8 +1243,16 @@ static void __init do_pre_smp_initcalls(void)
 
 static int run_init_process(const char *init_filename)
 {
+       const char *const *p;
+
        argv_init[0] = init_filename;
        pr_info("Run %s as init process\n", init_filename);
+       pr_debug("  with arguments:\n");
+       for (p = argv_init; *p; p++)
+               pr_debug("    %s\n", *p);
+       pr_debug("  with environment:\n");
+       for (p = envp_init; *p; p++)
+               pr_debug("    %s\n", *p);
        return do_execve(getname_kernel(init_filename),
                (const char __user *const __user *)argv_init,
                (const char __user *const __user *)envp_init);
@@ -1285,6 +1299,11 @@ static void mark_readonly(void)
        } else
                pr_info("Kernel memory protection disabled.\n");
 }
+#elif defined(CONFIG_ARCH_HAS_STRICT_KERNEL_RWX)
+static inline void mark_readonly(void)
+{
+       pr_warn("Kernel memory protection not selected by kernel config.\n");
+}
 #else
 static inline void mark_readonly(void)
 {