* 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®