Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 106168
b: refs/heads/master
c: c2147a5
h: refs/heads/master
v: v3
  • Loading branch information
Eduard - Gabriel Munteanu authored and Linus Torvalds committed Jul 26, 2008
1 parent a3d0957 commit 018d4d9
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 89081d17f7bb81d89fa1aa9b70f821c5cf4d39e9
refs/heads/master: c2147a5092cfe13dbf3210e54e8a622015edeecc
2 changes: 2 additions & 0 deletions trunk/include/asm-generic/vmlinux.lds.h
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,8 @@
}

#define INITCALLS \
*(.initcallearly.init) \
__early_initcall_end = .; \
*(.initcall0.init) \
*(.initcall0s.init) \
*(.initcall1.init) \
Expand Down
7 changes: 7 additions & 0 deletions trunk/include/linux/init.h
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,13 @@ extern void (*late_time_init)(void);
static initcall_t __initcall_##fn##id __used \
__attribute__((__section__(".initcall" level ".init"))) = fn

/*
* Early initcalls run before initializing SMP.
*
* Only for built-in code, not modules.
*/
#define early_initcall(fn) __define_initcall("early",fn,early)

/*
* A "pure" initcall has no dependencies on anything else, and purely
* initializes variables that couldn't be statically initialized.
Expand Down
13 changes: 11 additions & 2 deletions trunk/init/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -743,13 +743,13 @@ static void __init do_one_initcall(initcall_t fn)
}


extern initcall_t __initcall_start[], __initcall_end[];
extern initcall_t __initcall_start[], __initcall_end[], __early_initcall_end[];

static void __init do_initcalls(void)
{
initcall_t *call;

for (call = __initcall_start; call < __initcall_end; call++)
for (call = __early_initcall_end; call < __initcall_end; call++)
do_one_initcall(*call);

/* Make sure there is no pending stuff from the initcall sequence */
Expand Down Expand Up @@ -783,6 +783,14 @@ static int __init nosoftlockup_setup(char *str)
}
__setup("nosoftlockup", nosoftlockup_setup);

static void __init __do_pre_smp_initcalls(void)
{
initcall_t *call;

for (call = __initcall_start; call < __early_initcall_end; call++)
do_one_initcall(*call);
}

static void __init do_pre_smp_initcalls(void)
{
extern int spawn_ksoftirqd(void);
Expand Down Expand Up @@ -865,6 +873,7 @@ static int __init kernel_init(void * unused)

smp_prepare_cpus(setup_max_cpus);

__do_pre_smp_initcalls();
do_pre_smp_initcalls();

smp_init();
Expand Down

0 comments on commit 018d4d9

Please sign in to comment.