OSDN Git Service

nvme-pci: Hold cq_poll_lock while completing CQEs
[tomoyo/tomoyo-test1.git] / init / main.c
index 5924871..f95b014 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>
@@ -421,8 +421,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"? */
@@ -431,11 +430,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. */
@@ -447,7 +444,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) {
@@ -467,14 +464,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)
@@ -488,7 +487,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;
@@ -757,6 +756,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();
@@ -1198,6 +1198,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;
@@ -1206,7 +1212,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++)
@@ -1260,8 +1266,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);
@@ -1308,6 +1322,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)
 {