summaryrefslogtreecommitdiff
path: root/init/main.c
diff options
context:
space:
mode:
authorDave Hansen <haveblue@us.ibm.com>2006-03-16 17:30:16 -0800
committerStephen Rothwell <sfr@canb.auug.org.au>2008-05-01 11:27:16 +1000
commitb2b398afc5eb19888d7537af44747d5964a6ab32 (patch)
treeb4a635b807e9f285f327754e3118b2cb5a91d7fe /init/main.c
parentdc95c0773d550864ea3b9b47c5c27d11d5bf568e (diff)
warn when statically-allocated kobjects are used
One of the top ten sysfs problems is that users use statically allocated kobjects. This patch reminds them that this is a naughty thing. One _really_ nice thing this patch does, is us the kallsyms mechanism to print out exactly which symbol is being complained about: The kobject at, or inside 'statickobj.2'@(0xc040d020) is not dynamically allocated. This patch replaces the previous implementation's use of a _sdata symbol in favor of using kallsyms_lookup(). If a kobject's address is a resolvable symbol, then it isn't dynamically allocated. The one exception to this is init symbols. The patch also checks to see whether __init memory has been freed and if it has will allow kobjects in those sections. Signed-off-by: Dave Hansen <haveblue@us.ibm.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'init/main.c')
-rw-r--r--init/main.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/init/main.c b/init/main.c
index a87d4ca5c36c..3ae95abe0f7f 100644
--- a/init/main.c
+++ b/init/main.c
@@ -788,12 +788,21 @@ static void run_init_process(char *init_filename)
kernel_execve(init_filename, argv_init, envp_init);
}
+/*
+ * __init/__init_data sections are turned into normal
+ * dynamically allocated memory later in boot. When
+ * this is 0, the memory is for the __init purposes,
+ * when it it some other value, the memory is dynamic.
+ */
+int initmem_now_dynamic;
+
/* This is a non __init function. Force it to be noinline otherwise gcc
* makes it inline to init() and it becomes part of init.text section
*/
static int noinline init_post(void)
{
free_initmem();
+ initmem_now_dynamic = 1;
unlock_kernel();
mark_rodata_ro();
system_state = SYSTEM_RUNNING;