static char *static_command_line;
 /* Untouched extra command line */
 static char *extra_command_line;
+/* Extra init arguments */
+static char *extra_init_args;
 
 static char *execute_command;
 static char *ramdisk_execute_command;
                pr_info("Load boot config: %d bytes\n", size);
                /* keys starting with "kernel." are passed via cmdline */
                extra_command_line = xbc_make_cmdline("kernel");
+               /* Also, "init." keys are init arguments */
+               extra_init_args = xbc_make_cmdline("init");
        }
 }
 #else
  */
 static void __init setup_command_line(char *command_line)
 {
-       size_t len, xlen = 0;
+       size_t len, xlen = 0, ilen = 0;
 
        if (extra_command_line)
                xlen = strlen(extra_command_line);
+       if (extra_init_args)
+               ilen = strlen(extra_init_args) + 4; /* for " -- " */
 
        len = xlen + strlen(boot_command_line) + 1;
 
-       saved_command_line = memblock_alloc(len, SMP_CACHE_BYTES);
+       saved_command_line = memblock_alloc(len + ilen, SMP_CACHE_BYTES);
        if (!saved_command_line)
-               panic("%s: Failed to allocate %zu bytes\n", __func__, len);
+               panic("%s: Failed to allocate %zu bytes\n", __func__, len + ilen);
 
        static_command_line = memblock_alloc(len, SMP_CACHE_BYTES);
        if (!static_command_line)
        }
        strcpy(saved_command_line + xlen, boot_command_line);
        strcpy(static_command_line + xlen, command_line);
+
+       if (ilen) {
+               /*
+                * Append supplemental init boot args to saved_command_line
+                * so that user can check what command line options passed
+                * to init.
+                */
+               len = strlen(saved_command_line);
+               if (!strstr(boot_command_line, " -- ")) {
+                       strcpy(saved_command_line + len, " -- ");
+                       len += 4;
+               } else
+                       saved_command_line[len++] = ' ';
+
+               strcpy(saved_command_line + len, extra_init_args);
+       }
 }
 
 /*
        if (!IS_ERR_OR_NULL(after_dashes))
                parse_args("Setting init args", after_dashes, NULL, 0, -1, -1,
                           NULL, set_init_arg);
+       if (extra_init_args)
+               parse_args("Setting extra init args", extra_init_args,
+                          NULL, 0, -1, -1, NULL, set_init_arg);
 
        /*
         * These use large bootmem allocations and must precede