how long does it take to init the scheduler?

From: Olaf Hering
Date: Sat May 08 2004 - 05:56:06 EST



Hi,

the patch below looks wrong to me. Why did you move it to the very end
of the boot process, instead to the very end of start_kernel()?

Now drivers will find an empty rootfs. A few of them do want to read
files from there. They cant currently use the call_usermodehelper
interface because this one checks for system_state. So they have to use
sys_open(). But either way, they will not get anything with 2.6.6.

populate_rootfs() should run before do_initcalls().



#date: 2004-04-21
#id: 1.1371.737.7
#tag: via-mm
#time: 07:42:18
#title: Call populate_rootfs later in boot
#who: akpm@xxxxxxxx[torvalds]
#
# ChangeSet
# 1.1371.737.7 04/04/21 07:42:18 akpm@xxxxxxxx[torvalds] +1 -0
# [PATCH] Call populate_rootfs later in boot
#
# populate_rootfs() is called rather early - before we've called init_idle().
#
# But populate_rootfs() does file I/O, which involves calls to cond_resched(),
# and downing of semaphores, etc. If it scheules, the scheduler emits
# scheduling-while-atomic warnings and sometimes oopses.
#
# So run populate_rootfs() later, after the scheduler is all set up.
#
# init/main.c +10 -11
#
diff -Nru a/init/main.c b/init/main.c
--- a/init/main.c Wed Apr 28 10:54:47 2004
+++ b/init/main.c Wed Apr 28 10:54:48 2004
@@ -89,6 +89,7 @@
extern void free_initmem(void);
extern void populate_rootfs(void);
extern void driver_init(void);
+extern void prepare_namespace(void);

#ifdef CONFIG_TC
extern void tc_init(void);
@@ -471,7 +472,6 @@
signals_init();
/* rootfs populating might need page-writeback */
page_writeback_init();
- populate_rootfs();
#ifdef CONFIG_PROC_FS
proc_root_init();
#endif
@@ -577,8 +577,6 @@
execve(init_filename, argv_init, envp_init);
}

-extern void prepare_namespace(void);
-
static int init(void * unused)
{
lock_kernel();
@@ -600,14 +598,15 @@
smp_init();
do_basic_setup();

- /*
- * check if there is an early userspace init, if yes
- * let it do all the work
- */
- if (sys_access("/init", 0) == 0)
- execute_command = "/init";
- else
- prepare_namespace();
+ populate_rootfs();
+ /*
+ * check if there is an early userspace init. If yes, let it do all
+ * the work
+ */
+ if (sys_access("/init", 0) == 0)
+ execute_command = "/init";
+ else
+ prepare_namespace();

/*
* Ok, we have completed the initial bootup, and
--
USB is for mice, FireWire is for men!

sUse lINUX ag, nÃRNBERG
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/