diff options
Diffstat (limited to 'init')
-rw-r--r-- | init/main.c | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/init/main.c b/init/main.c index 0ec25157deef..e8ae1fef0908 100644 --- a/init/main.c +++ b/init/main.c | |||
@@ -253,6 +253,27 @@ static int __init repair_env_string(char *param, char *val, const char *unused) | |||
253 | return 0; | 253 | return 0; |
254 | } | 254 | } |
255 | 255 | ||
256 | /* Anything after -- gets handed straight to init. */ | ||
257 | static int __init set_init_arg(char *param, char *val, const char *unused) | ||
258 | { | ||
259 | unsigned int i; | ||
260 | |||
261 | if (panic_later) | ||
262 | return 0; | ||
263 | |||
264 | repair_env_string(param, val, unused); | ||
265 | |||
266 | for (i = 0; argv_init[i]; i++) { | ||
267 | if (i == MAX_INIT_ARGS) { | ||
268 | panic_later = "init"; | ||
269 | panic_param = param; | ||
270 | return 0; | ||
271 | } | ||
272 | } | ||
273 | argv_init[i] = param; | ||
274 | return 0; | ||
275 | } | ||
276 | |||
256 | /* | 277 | /* |
257 | * Unknown boot options get handed to init, unless they look like | 278 | * Unknown boot options get handed to init, unless they look like |
258 | * unused parameters (modprobe will find them in /proc/cmdline). | 279 | * unused parameters (modprobe will find them in /proc/cmdline). |
@@ -479,7 +500,7 @@ static void __init mm_init(void) | |||
479 | 500 | ||
480 | asmlinkage __visible void __init start_kernel(void) | 501 | asmlinkage __visible void __init start_kernel(void) |
481 | { | 502 | { |
482 | char * command_line; | 503 | char * command_line, *after_dashes; |
483 | extern const struct kernel_param __start___param[], __stop___param[]; | 504 | extern const struct kernel_param __start___param[], __stop___param[]; |
484 | 505 | ||
485 | /* | 506 | /* |
@@ -519,9 +540,13 @@ asmlinkage __visible void __init start_kernel(void) | |||
519 | 540 | ||
520 | pr_notice("Kernel command line: %s\n", boot_command_line); | 541 | pr_notice("Kernel command line: %s\n", boot_command_line); |
521 | parse_early_param(); | 542 | parse_early_param(); |
522 | parse_args("Booting kernel", static_command_line, __start___param, | 543 | after_dashes = parse_args("Booting kernel", |
523 | __stop___param - __start___param, | 544 | static_command_line, __start___param, |
524 | -1, -1, &unknown_bootoption); | 545 | __stop___param - __start___param, |
546 | -1, -1, &unknown_bootoption); | ||
547 | if (after_dashes) | ||
548 | parse_args("Setting init args", after_dashes, NULL, 0, -1, -1, | ||
549 | set_init_arg); | ||
525 | 550 | ||
526 | jump_label_init(); | 551 | jump_label_init(); |
527 | 552 | ||