lkml.org 
[lkml]   [2004]   [May]   [8]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
DateSat, 8 May 2004 12:53:11 +0200
FromOlaf Hering <>
Subjecthow long does it take to init the scheduler?
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@osdl.org[torvalds]
#
# ChangeSet
#   1.1371.737.7 04/04/21 07:42:18 akpm@osdl.org[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@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 14:03    [from the cache]
©2003-2008