From 8873d8d3f46dfa9af13943826f2b682971dca2b2 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Mon, 20 Nov 2006 11:47:18 -0800 Subject: [PATCH] --- yaml --- r: 41021 b: refs/heads/master c: b3438f8266cb1f5010085ac47d7ad6a36a212164 h: refs/heads/master i: 41019: 46f0b85bb8e94dc52233111664df154de80be5cd v: v3 --- [refs] | 2 +- trunk/drivers/cpufreq/cpufreq.c | 2 +- trunk/include/asm-generic/vmlinux.lds.h | 2 ++ trunk/include/linux/init.h | 8 ++++++++ 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index ff6cbf126854..e0103904bc6c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f44ea623443ee0bec266d62f1cd346881224d47d +refs/heads/master: b3438f8266cb1f5010085ac47d7ad6a36a212164 diff --git a/trunk/drivers/cpufreq/cpufreq.c b/trunk/drivers/cpufreq/cpufreq.c index 86e69b7f9122..dd0c2623e27b 100644 --- a/trunk/drivers/cpufreq/cpufreq.c +++ b/trunk/drivers/cpufreq/cpufreq.c @@ -59,7 +59,7 @@ static int __init init_cpufreq_transition_notifier_list(void) srcu_init_notifier_head(&cpufreq_transition_notifier_list); return 0; } -core_initcall(init_cpufreq_transition_notifier_list); +pure_initcall(init_cpufreq_transition_notifier_list); static LIST_HEAD(cpufreq_governor_list); static DEFINE_MUTEX (cpufreq_governor_mutex); diff --git a/trunk/include/asm-generic/vmlinux.lds.h b/trunk/include/asm-generic/vmlinux.lds.h index 9d873163a7ab..e60d6f21fa62 100644 --- a/trunk/include/asm-generic/vmlinux.lds.h +++ b/trunk/include/asm-generic/vmlinux.lds.h @@ -215,6 +215,8 @@ .notes : { *(.note.*) } :note #define INITCALLS \ + *(.initcall0.init) \ + *(.initcall0s.init) \ *(.initcall1.init) \ *(.initcall1s.init) \ *(.initcall2.init) \ diff --git a/trunk/include/linux/init.h b/trunk/include/linux/init.h index ff40ea118e3a..5eb5d24b7680 100644 --- a/trunk/include/linux/init.h +++ b/trunk/include/linux/init.h @@ -93,6 +93,14 @@ extern void setup_arch(char **); static initcall_t __initcall_##fn##id __attribute_used__ \ __attribute__((__section__(".initcall" level ".init"))) = fn +/* + * A "pure" initcall has no dependencies on anything else, and purely + * initializes variables that couldn't be statically initialized. + * + * This only exists for built-in code, not for modules. + */ +#define pure_initcall(fn) __define_initcall("0",fn,1) + #define core_initcall(fn) __define_initcall("1",fn,1) #define core_initcall_sync(fn) __define_initcall("1s",fn,1s) #define postcore_initcall(fn) __define_initcall("2",fn,2)