diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-07 18:35:47 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-07 18:35:47 -0500 |
commit | 67acd8b4b7a3f1b183ae358e1dfdb8a80e170736 (patch) | |
tree | 4418034f6e83f954337a17bc6a872fa5ae3c4b5e /init | |
parent | b13d3720ecd29d5044334fdbbae3432f26802bae (diff) | |
parent | ad160d23198193135cb2bcc75222e0816b5838c0 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/arjan/linux-2.6-async
* git://git.kernel.org/pub/scm/linux/kernel/git/arjan/linux-2.6-async:
async: don't do the initcall stuff post boot
bootchart: improve output based on Dave Jones' feedback
async: make the final inode deletion an asynchronous event
fastboot: Make libata initialization even more async
fastboot: make the libata port scan asynchronous
fastboot: make scsi probes asynchronous
async: Asynchronous function calls to speed up kernel boot
Diffstat (limited to 'init')
-rw-r--r-- | init/do_mounts.c | 2 | ||||
-rw-r--r-- | init/main.c | 5 |
2 files changed, 6 insertions, 1 deletions
diff --git a/init/do_mounts.c b/init/do_mounts.c index 5efca73b39f9..708105e163df 100644 --- a/init/do_mounts.c +++ b/init/do_mounts.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
14 | #include <linux/fs.h> | 14 | #include <linux/fs.h> |
15 | #include <linux/initrd.h> | 15 | #include <linux/initrd.h> |
16 | #include <linux/async.h> | ||
16 | 17 | ||
17 | #include <linux/nfs_fs.h> | 18 | #include <linux/nfs_fs.h> |
18 | #include <linux/nfs_fs_sb.h> | 19 | #include <linux/nfs_fs_sb.h> |
@@ -372,6 +373,7 @@ void __init prepare_namespace(void) | |||
372 | /* wait for the known devices to complete their probing */ | 373 | /* wait for the known devices to complete their probing */ |
373 | while (driver_probe_done() != 0) | 374 | while (driver_probe_done() != 0) |
374 | msleep(100); | 375 | msleep(100); |
376 | async_synchronize_full(); | ||
375 | 377 | ||
376 | md_run_setup(); | 378 | md_run_setup(); |
377 | 379 | ||
diff --git a/init/main.c b/init/main.c index 05b313283311..844209453c02 100644 --- a/init/main.c +++ b/init/main.c | |||
@@ -62,6 +62,7 @@ | |||
62 | #include <linux/signal.h> | 62 | #include <linux/signal.h> |
63 | #include <linux/idr.h> | 63 | #include <linux/idr.h> |
64 | #include <linux/ftrace.h> | 64 | #include <linux/ftrace.h> |
65 | #include <linux/async.h> | ||
65 | #include <trace/boot.h> | 66 | #include <trace/boot.h> |
66 | 67 | ||
67 | #include <asm/io.h> | 68 | #include <asm/io.h> |
@@ -685,7 +686,7 @@ asmlinkage void __init start_kernel(void) | |||
685 | rest_init(); | 686 | rest_init(); |
686 | } | 687 | } |
687 | 688 | ||
688 | static int initcall_debug; | 689 | int initcall_debug; |
689 | core_param(initcall_debug, initcall_debug, bool, 0644); | 690 | core_param(initcall_debug, initcall_debug, bool, 0644); |
690 | 691 | ||
691 | int do_one_initcall(initcall_t fn) | 692 | int do_one_initcall(initcall_t fn) |
@@ -786,6 +787,8 @@ static void run_init_process(char *init_filename) | |||
786 | */ | 787 | */ |
787 | static noinline int init_post(void) | 788 | static noinline int init_post(void) |
788 | { | 789 | { |
790 | /* need to finish all async __init code before freeing the memory */ | ||
791 | async_synchronize_full(); | ||
789 | free_initmem(); | 792 | free_initmem(); |
790 | unlock_kernel(); | 793 | unlock_kernel(); |
791 | mark_rodata_ro(); | 794 | mark_rodata_ro(); |