Messages in this thread Patch in this message | | | Subject | [PATCH] initcall: add config option for compiling initcall_debug | From | Konstantin Khlebnikov <> | Date | Sun, 27 Mar 2011 15:55:06 +0400 |
| |
Add bool config option CONFIG_INITCALL_DEBUG for compiling initcalls debuging, make it on by default to keep current behaviour.
With CONFIG_INITCALL_DEBUG=n bloat-o-meter shows:
add/remove: 0/7 grow/shrink: 3/10 up/down: 88/-1448 (-1360) function old new delta device_resume 350 404 +54 __device_suspend 331 363 +32 device_resume_noirq 230 232 +2 kernel_init 355 354 -1 initcall_debug 4 - -4 __param_str_initcall_debug 15 - -15 dpm_suspend 431 415 -16 syscore_suspend 280 250 -30 syscore_shutdown 123 93 -30 __param_initcall_debug 32 - -32 syscore_resume 215 173 -42 static.initcall_debug_start 71 - -71 static.initcall_debug_report 102 - -102 legacy_resume 129 - -129 async_synchronize_cookie_domain 286 152 -134 legacy_suspend 135 - -135 async_run_entry_fn 348 188 -160 do_one_initcall 364 197 -167 pm_op 536 366 -170 pm_noirq_op 576 366 -210
Signed-off-by: Konstantin Khlebnikov <khlebnikov@openvz.org> --- Documentation/kernel-parameters.txt | 2 +- include/linux/init.h | 4 ++++ init/main.c | 2 ++ kernel/async.c | 4 +--- lib/Kconfig.debug | 7 +++++++ 5 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index c357a31..ea3843a 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt @@ -970,7 +970,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. initcall_debug [KNL] Trace initcalls as they are executed. Useful for working out where the kernel is dying during - startup. + startup. This depend on CONFIG_INITCALL_DEBUG option. initrd= [BOOT] Specify the location of the initial ramdisk diff --git a/include/linux/init.h b/include/linux/init.h index 577671c..e2005ab 100644 --- a/include/linux/init.h +++ b/include/linux/init.h @@ -156,7 +156,11 @@ void prepare_namespace(void); extern void (*late_time_init)(void); +#ifdef CONFIG_INITCALL_DEBUG extern int initcall_debug; +#else +# define initcall_debug 0 +#endif #endif diff --git a/init/main.c b/init/main.c index 4a9479e..0902999 100644 --- a/init/main.c +++ b/init/main.c @@ -636,8 +636,10 @@ static void __init do_ctors(void) #endif } +#ifdef CONFIG_INITCALL_DEBUG int initcall_debug; core_param(initcall_debug, initcall_debug, bool, 0644); +#endif static char msgbuf[64]; diff --git a/kernel/async.c b/kernel/async.c index 3d8220a..8801e1e 100644 --- a/kernel/async.c +++ b/kernel/async.c @@ -48,6 +48,7 @@ asynchronous and synchronous parts of the kernel. */ +#include <linux/init.h> #include <linux/async.h> #include <linux/module.h> #include <linux/wait.h> @@ -77,9 +78,6 @@ static DECLARE_WAIT_QUEUE_HEAD(async_done); static atomic_t entry_count; -extern int initcall_debug; - - /* * MUST be called with the lock held! */ diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index df9234c..ebc1357 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -807,6 +807,13 @@ config DEBUG_CREDENTIALS If unsure, say N. +config INITCALL_DEBUG + bool "Debug kernel initcalls" + default y + help + This build option allow you trace initcalls after + adding "initcall_debug" to kernel command line. + # # Select this config option from the architecture Kconfig, if it # it is preferred to always offer frame pointers as a config
| |