mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* how long does it take to init the scheduler?
@ 2004-05-08 10:53 Olaf Hering
  2004-05-08 10:59 ` Andrew Morton
  0 siblings, 1 reply; 6+ messages in thread
From: Olaf Hering @ 2004-05-08 10:53 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-kernel


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

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: how long does it take to init the scheduler?
  2004-05-08 10:53 how long does it take to init the scheduler? Olaf Hering
@ 2004-05-08 10:59 ` Andrew Morton
  2004-05-08 11:09   ` Olaf Hering
  0 siblings, 1 reply; 6+ messages in thread
From: Andrew Morton @ 2004-05-08 10:59 UTC (permalink / raw)
  To: Olaf Hering; +Cc: linux-kernel

Olaf Hering <olh@suse.de> wrote:
>
> 
> 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()?
> 

coz I forgot about drivers which want to go opening files in their
module_init().

Like this?

--- 25/init/main.c~populate_rootfs-before-initcalls	2004-05-08 03:57:54.168918048 -0700
+++ 25-akpm/init/main.c	2004-05-08 03:58:58.668112680 -0700
@@ -660,9 +660,15 @@ static int init(void * unused)
 	fixup_cpu_present_map();
 	smp_init();
 	sched_init_smp();
-	do_basic_setup();
 
+	/*
+	 * Do this before initcalls, because some drivers want to access
+	 * firmware files.
+	 */
 	populate_rootfs();
+
+	do_basic_setup();
+
 	/*
 	 * check if there is an early userspace init.  If yes, let it do all
 	 * the work

_


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: how long does it take to init the scheduler?
  2004-05-08 10:59 ` Andrew Morton
@ 2004-05-08 11:09   ` Olaf Hering
  2004-05-08 11:19     ` Andrew Morton
  2004-05-08 11:24     ` Andrew Morton
  0 siblings, 2 replies; 6+ messages in thread
From: Olaf Hering @ 2004-05-08 11:09 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-kernel

 On Sat, May 08, Andrew Morton wrote:

> Olaf Hering <olh@suse.de> wrote:
> >
> > 
> > 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()?
> > 
> 
> coz I forgot about drivers which want to go opening files in their
> module_init().
> 
> Like this?

Yes, but I cant verify it before Monday.

That leads to another question. usermodehelper_init() is now an initcall.
all the binfmt stuff is also an initcall. We had a patch (for debugging)
that turned init_elf_binfmt() into core_initcall.
Can we change that as well, so one could finally run stuff via the
driver hotplug events? init_script_binfmt() should be also
core_initcall, so you can run scripts. But I havent looked at the
dependencies for the binfmt stuff.

-- 
USB is for mice, FireWire is for men!

sUse lINUX ag, nÜRNBERG

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: how long does it take to init the scheduler?
  2004-05-08 11:09   ` Olaf Hering
@ 2004-05-08 11:19     ` Andrew Morton
  2004-05-08 11:30       ` Andrew Morton
  2004-05-08 11:24     ` Andrew Morton
  1 sibling, 1 reply; 6+ messages in thread
From: Andrew Morton @ 2004-05-08 11:19 UTC (permalink / raw)
  To: Olaf Hering; +Cc: linux-kernel

Olaf Hering <olh@suse.de> wrote:
>
> That leads to another question. usermodehelper_init() is now an initcall.
>  all the binfmt stuff is also an initcall. We had a patch (for debugging)
>  that turned init_elf_binfmt() into core_initcall.
>  Can we change that as well, so one could finally run stuff via the
>  driver hotplug events? init_script_binfmt() should be also
>  core_initcall, so you can run scripts. But I havent looked at the
>  dependencies for the binfmt stuff.

yes, that's surely OK - those init functions only call register_binfmt()
and register_filesystem(), and they merely stick things into a list.


 25-akpm/fs/binfmt_aout.c   |    2 +-
 25-akpm/fs/binfmt_elf.c    |    2 +-
 25-akpm/fs/binfmt_em86.c   |    2 +-
 25-akpm/fs/binfmt_flat.c   |    2 +-
 25-akpm/fs/binfmt_misc.c   |    2 +-
 25-akpm/fs/binfmt_script.c |    2 +-
 25-akpm/fs/binfmt_som.c    |    2 +-
 7 files changed, 7 insertions(+), 7 deletions(-)

diff -puN fs/binfmt_aout.c~binfmt-use-core_initcall fs/binfmt_aout.c
--- 25/fs/binfmt_aout.c~binfmt-use-core_initcall	2004-05-08 04:17:46.882598008 -0700
+++ 25-akpm/fs/binfmt_aout.c	2004-05-08 04:17:46.895596032 -0700
@@ -520,6 +520,6 @@ static void __exit exit_aout_binfmt(void
 	unregister_binfmt(&aout_format);
 }
 
-module_init(init_aout_binfmt);
+core_initcall(init_aout_binfmt);
 module_exit(exit_aout_binfmt);
 MODULE_LICENSE("GPL");
diff -puN fs/binfmt_elf.c~binfmt-use-core_initcall fs/binfmt_elf.c
--- 25/fs/binfmt_elf.c~binfmt-use-core_initcall	2004-05-08 04:17:46.884597704 -0700
+++ 25-akpm/fs/binfmt_elf.c	2004-05-08 04:17:46.896595880 -0700
@@ -1542,6 +1542,6 @@ static void __exit exit_elf_binfmt(void)
 	unregister_binfmt(&elf_format);
 }
 
-module_init(init_elf_binfmt)
+core_initcall(init_elf_binfmt)
 module_exit(exit_elf_binfmt)
 MODULE_LICENSE("GPL");
diff -puN fs/binfmt_em86.c~binfmt-use-core_initcall fs/binfmt_em86.c
--- 25/fs/binfmt_em86.c~binfmt-use-core_initcall	2004-05-08 04:17:46.885597552 -0700
+++ 25-akpm/fs/binfmt_em86.c	2004-05-08 04:17:46.896595880 -0700
@@ -110,6 +110,6 @@ static void __exit exit_em86_binfmt(void
 	unregister_binfmt(&em86_format);
 }
 
-module_init(init_em86_binfmt)
+core_initcall(init_em86_binfmt)
 module_exit(exit_em86_binfmt)
 MODULE_LICENSE("GPL");
diff -puN fs/binfmt_flat.c~binfmt-use-core_initcall fs/binfmt_flat.c
--- 25/fs/binfmt_flat.c~binfmt-use-core_initcall	2004-05-08 04:17:46.887597248 -0700
+++ 25-akpm/fs/binfmt_flat.c	2004-05-08 04:17:46.898595576 -0700
@@ -895,7 +895,7 @@ static void __exit exit_flat_binfmt(void
 
 /****************************************************************************/
 
-module_init(init_flat_binfmt);
+core_initcall(init_flat_binfmt);
 module_exit(exit_flat_binfmt);
 
 /****************************************************************************/
diff -puN fs/binfmt_misc.c~binfmt-use-core_initcall fs/binfmt_misc.c
--- 25/fs/binfmt_misc.c~binfmt-use-core_initcall	2004-05-08 04:17:46.888597096 -0700
+++ 25-akpm/fs/binfmt_misc.c	2004-05-08 04:17:46.898595576 -0700
@@ -775,6 +775,6 @@ static void __exit exit_misc_binfmt(void
 	unregister_filesystem(&bm_fs_type);
 }
 
-module_init(init_misc_binfmt);
+core_initcall(init_misc_binfmt);
 module_exit(exit_misc_binfmt);
 MODULE_LICENSE("GPL");
diff -puN fs/binfmt_script.c~binfmt-use-core_initcall fs/binfmt_script.c
--- 25/fs/binfmt_script.c~binfmt-use-core_initcall	2004-05-08 04:17:46.890596792 -0700
+++ 25-akpm/fs/binfmt_script.c	2004-05-08 04:17:46.899595424 -0700
@@ -111,6 +111,6 @@ static void __exit exit_script_binfmt(vo
 	unregister_binfmt(&script_format);
 }
 
-module_init(init_script_binfmt)
+core_initcall(init_script_binfmt)
 module_exit(exit_script_binfmt)
 MODULE_LICENSE("GPL");
diff -puN fs/binfmt_som.c~binfmt-use-core_initcall fs/binfmt_som.c
--- 25/fs/binfmt_som.c~binfmt-use-core_initcall	2004-05-08 04:17:46.891596640 -0700
+++ 25-akpm/fs/binfmt_som.c	2004-05-08 04:17:46.899595424 -0700
@@ -305,5 +305,5 @@ static void __exit exit_som_binfmt(void)
 	unregister_binfmt(&som_format);
 }
 
-module_init(init_som_binfmt);
+core_initcall(init_som_binfmt);
 module_exit(exit_som_binfmt);

_


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: how long does it take to init the scheduler?
  2004-05-08 11:09   ` Olaf Hering
  2004-05-08 11:19     ` Andrew Morton
@ 2004-05-08 11:24     ` Andrew Morton
  1 sibling, 0 replies; 6+ messages in thread
From: Andrew Morton @ 2004-05-08 11:24 UTC (permalink / raw)
  To: Olaf Hering; +Cc: linux-kernel

Olaf Hering <olh@suse.de> wrote:
>
> That leads to another question. usermodehelper_init() is now an initcall.
>  all the binfmt stuff is also an initcall. We had a patch (for debugging)
>  that turned init_elf_binfmt() into core_initcall.
>  Can we change that as well, so one could finally run stuff via the
>  driver hotplug events? init_script_binfmt() should be also
>  core_initcall, so you can run scripts. But I havent looked at the
>  dependencies for the binfmt stuff.



We may as well make usermodehelper_init() core_initcall as well, to make
sure its services are avaialble to all the other initcall levels.



diff -puN kernel/kmod.c~usermodehelper_init-use-core_initcall kernel/kmod.c
--- 25/kernel/kmod.c~usermodehelper_init-use-core_initcall	2004-05-08 04:22:23.119603600 -0700
+++ 25-akpm/kernel/kmod.c	2004-05-08 04:22:28.096846944 -0700
@@ -269,4 +269,4 @@ static __init int usermodehelper_init(vo
 	BUG_ON(!khelper_wq);
 	return 0;
 }
-__initcall(usermodehelper_init);
+core_initcall(usermodehelper_init);

_


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: how long does it take to init the scheduler?
  2004-05-08 11:19     ` Andrew Morton
@ 2004-05-08 11:30       ` Andrew Morton
  0 siblings, 0 replies; 6+ messages in thread
From: Andrew Morton @ 2004-05-08 11:30 UTC (permalink / raw)
  To: olh, linux-kernel

Andrew Morton <akpm@osdl.org> wrote:
>
>  -module_init(init_elf_binfmt)
>  +core_initcall(init_elf_binfmt)

Sigh.  core_initcall() requires a semicolon, but module_init() does not.


diff -puN fs/binfmt_aout.c~binfmt-use-core_initcall fs/binfmt_aout.c
--- 25/fs/binfmt_aout.c~binfmt-use-core_initcall	2004-05-08 04:17:46.882598008 -0700
+++ 25-akpm/fs/binfmt_aout.c	2004-05-08 04:17:46.895596032 -0700
@@ -520,6 +520,6 @@ static void __exit exit_aout_binfmt(void
 	unregister_binfmt(&aout_format);
 }
 
-module_init(init_aout_binfmt);
+core_initcall(init_aout_binfmt);
 module_exit(exit_aout_binfmt);
 MODULE_LICENSE("GPL");
diff -puN fs/binfmt_elf.c~binfmt-use-core_initcall fs/binfmt_elf.c
--- 25/fs/binfmt_elf.c~binfmt-use-core_initcall	2004-05-08 04:17:46.884597704 -0700
+++ 25-akpm/fs/binfmt_elf.c	2004-05-08 04:28:39.475388824 -0700
@@ -1542,6 +1542,6 @@ static void __exit exit_elf_binfmt(void)
 	unregister_binfmt(&elf_format);
 }
 
-module_init(init_elf_binfmt)
-module_exit(exit_elf_binfmt)
+core_initcall(init_elf_binfmt);
+module_exit(exit_elf_binfmt);
 MODULE_LICENSE("GPL");
diff -puN fs/binfmt_em86.c~binfmt-use-core_initcall fs/binfmt_em86.c
--- 25/fs/binfmt_em86.c~binfmt-use-core_initcall	2004-05-08 04:17:46.885597552 -0700
+++ 25-akpm/fs/binfmt_em86.c	2004-05-08 04:29:02.014962288 -0700
@@ -110,6 +110,6 @@ static void __exit exit_em86_binfmt(void
 	unregister_binfmt(&em86_format);
 }
 
-module_init(init_em86_binfmt)
-module_exit(exit_em86_binfmt)
+core_initcall(init_em86_binfmt);
+module_exit(exit_em86_binfmt);
 MODULE_LICENSE("GPL");
diff -puN fs/binfmt_flat.c~binfmt-use-core_initcall fs/binfmt_flat.c
--- 25/fs/binfmt_flat.c~binfmt-use-core_initcall	2004-05-08 04:17:46.887597248 -0700
+++ 25-akpm/fs/binfmt_flat.c	2004-05-08 04:17:46.898595576 -0700
@@ -895,7 +895,7 @@ static void __exit exit_flat_binfmt(void
 
 /****************************************************************************/
 
-module_init(init_flat_binfmt);
+core_initcall(init_flat_binfmt);
 module_exit(exit_flat_binfmt);
 
 /****************************************************************************/
diff -puN fs/binfmt_misc.c~binfmt-use-core_initcall fs/binfmt_misc.c
--- 25/fs/binfmt_misc.c~binfmt-use-core_initcall	2004-05-08 04:17:46.888597096 -0700
+++ 25-akpm/fs/binfmt_misc.c	2004-05-08 04:17:46.898595576 -0700
@@ -775,6 +775,6 @@ static void __exit exit_misc_binfmt(void
 	unregister_filesystem(&bm_fs_type);
 }
 
-module_init(init_misc_binfmt);
+core_initcall(init_misc_binfmt);
 module_exit(exit_misc_binfmt);
 MODULE_LICENSE("GPL");
diff -puN fs/binfmt_script.c~binfmt-use-core_initcall fs/binfmt_script.c
--- 25/fs/binfmt_script.c~binfmt-use-core_initcall	2004-05-08 04:17:46.890596792 -0700
+++ 25-akpm/fs/binfmt_script.c	2004-05-08 04:26:17.946904424 -0700
@@ -111,6 +111,6 @@ static void __exit exit_script_binfmt(vo
 	unregister_binfmt(&script_format);
 }
 
-module_init(init_script_binfmt)
-module_exit(exit_script_binfmt)
+core_initcall(init_script_binfmt);
+module_exit(exit_script_binfmt);
 MODULE_LICENSE("GPL");
diff -puN fs/binfmt_som.c~binfmt-use-core_initcall fs/binfmt_som.c
--- 25/fs/binfmt_som.c~binfmt-use-core_initcall	2004-05-08 04:17:46.891596640 -0700
+++ 25-akpm/fs/binfmt_som.c	2004-05-08 04:17:46.899595424 -0700
@@ -305,5 +305,5 @@ static void __exit exit_som_binfmt(void)
 	unregister_binfmt(&som_format);
 }
 
-module_init(init_som_binfmt);
+core_initcall(init_som_binfmt);
 module_exit(exit_som_binfmt);

_


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2004-05-08 11:30 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-05-08 10:53 how long does it take to init the scheduler? Olaf Hering
2004-05-08 10:59 ` Andrew Morton
2004-05-08 11:09   ` Olaf Hering
2004-05-08 11:19     ` Andrew Morton
2004-05-08 11:30       ` Andrew Morton
2004-05-08 11:24     ` Andrew Morton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®