From 878f10229662bedeca043904ee1bb1a36c1a4266 Mon Sep 17 00:00:00 2001 From: Dave Hansen Date: Thu, 16 Mar 2006 17:30:16 -0800 Subject: 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 Signed-off-by: Greg Kroah-Hartman --- init/main.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'init') diff --git a/init/main.c b/init/main.c index 7e117a231af1..f09354167789 100644 --- a/init/main.c +++ b/init/main.c @@ -789,12 +789,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; -- cgit v1.2.3