--- linux/init/main-orig.c Sat Dec 21 16:53:09 2002 +++ linux/init/main.c Sat Dec 21 17:35:50 2002 @@ -126,6 +126,7 @@ static char * argv_init[MAX_INIT_ARGS+2] = { "init", NULL, }; char * envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, }; +static int setuptime; /* time(ms) to let devices set up before root mount */ static int __init profile_setup(char *str) { @@ -136,6 +137,15 @@ __setup("profile=", profile_setup); +static int __init setuptime_setup(char *str) +{ + int par; + if (get_option(&str,&par)) setuptime = par; + return 1; +} + +__setup("setuptime=", setuptime_setup); + static int __init checksetup(char *line) { struct kernel_param *p; @@ -546,11 +556,25 @@ extern void prepare_namespace(void); +static int finish_setup() +{ + int tleft; + if (setuptime) { + printk("Waiting %d ms for devices to set up.\n", setuptime); + tleft = setuptime * HZ / 1000; + while (tleft) { + set_current_state(TASK_INTERRUPTIBLE); + tleft = schedule_timeout(tleft); + } + } +} + static int init(void * unused) { lock_kernel(); do_basic_setup(); + finish_setup(); prepare_namespace(); /*