Skip to contentSkip to conversation

initcall: add config option for compiling initcall_debug

PATCH Superseded Konstantin Khlebnikov 5 participants 6 messages Mar 27, 2011 – Mar 30, 2011

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 initcall: add config option for compiling initcall_debug

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
---
 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(-)
Documentation/kernel-parameters.txt +1 -1
index c357a31..ea3843a 100644
@@ -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
 
include/linux/init.h +4 -0
index 577671c..e2005ab 100644
@@ -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
   
init/main.c +2 -0
index 4a9479e..0902999 100644
@@ -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];
 
kernel/async.c +1 -3
index 3d8220a..8801e1e 100644
@@ -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!
  */
lib/Kconfig.debug +7 -0
index df9234c..ebc1357 100644
@@ -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
#1 lore raw
Quoted 2 lines · On Sun, 27 Mar 2011 15:55:06 +0400 Konstantin Khlebnikov wrote:

Add bool config option CONFIG_INITCALL_DEBUG for compiling initcalls debuging, make it on by default to keep current behaviour.

Typo fixes only:

Quoted 14 lines
---
 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(-)
Documentation/kernel-parameters.txt +0 -0
index c357a31..ea3843a 100644

Documentation/kernel-parameters.txt bytes respectively. Such letter suffixes can also be entirely omitted. · line 973

Quoted 5 lines
Documentation/kernel-parameters.txt +1 -1
@@ -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.

depends on the CONFIG_INITCALL_DEBUG option.

Quoted 9 lines
Documentation/kernel-parameters.txt +0 -0
 	initrd=		[BOOT] Specify the location of the initial ramdisk
 
 
lib/Kconfig.debug +0 -0
index df9234c..ebc1357 100644

lib/Kconfig.debug config DEBUG_CREDENTIALS · line 814

Quoted 8 lines
lib/Kconfig.debug +5 -0
@@ -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

allows you to trace initcalls by

lib/Kconfig.debug config DEBUG_CREDENTIALS · line 815

Quoted 1 line
lib/Kconfig.debug +1 -0
+	  adding "initcall_debug" to kernel command line.

to the kernel command line.

lib/Kconfig.debug config DEBUG_CREDENTIALS · line 819

Quoted 4 lines
lib/Kconfig.debug +1 -0
+
 #
 # Select this config option from the architecture Kconfig, if it
 # it is preferred to always offer frame pointers as a config

---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***

#2 lore raw
Quoted 6 lines · Randy Dunlap
Quoted 2 lines · On Sun, 27 Mar 2011 15:55:06 +0400 Konstantin Khlebnikov wrote:

Add bool config option CONFIG_INITCALL_DEBUG for compiling initcalls debuging, make it on by default to keep current behaviour.

Typo fixes only:

Ok, thanks.

Quoted 57 lines
Quoted 16 lines
---
  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(-)
Documentation/kernel-parameters.txt +0 -0
index c357a31..ea3843a 100644

Documentation/kernel-parameters.txt bytes respectively. Such letter suffixes can also be entirely omitted. · line 973

Quoted 5 lines
Documentation/kernel-parameters.txt +1 -1
@@ -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.

depends on the CONFIG_INITCALL_DEBUG option.

Quoted 9 lines
Documentation/kernel-parameters.txt +0 -0
  	initrd=		[BOOT] Specify the location of the initial ramdisk
 
 
lib/Kconfig.debug +0 -0
index df9234c..ebc1357 100644

lib/Kconfig.debug config DEBUG_CREDENTIALS · line 814

Quoted 8 lines
lib/Kconfig.debug +5 -0
@@ -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

allows you to trace initcalls by

lib/Kconfig.debug config DEBUG_CREDENTIALS · line 815

Quoted 1 line
lib/Kconfig.debug +1 -0
+	  adding "initcall_debug" to kernel command line.

to the kernel command line.

lib/Kconfig.debug config DEBUG_CREDENTIALS · line 819

Quoted 4 lines
lib/Kconfig.debug +1 -0
+
  #
  # Select this config option from the architecture Kconfig, if it
  # it is preferred to always offer frame pointers as a config

---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***

#3 lore raw

PATCH v2 1/1 initcall: add config option for compiling initcall_debug

In reply to Konstantin Khlebnikov

This patch adds bool config option CONFIG_INITCALL_DEBUG for compiling initcalls debuging, 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
---
 Documentation/kernel-parameters.txt |    3 ++-
 include/linux/init.h                |    4 ++++
 init/main.c                         |    2 ++
 kernel/async.c                      |    4 +---
 lib/Kconfig.debug                   |    7 +++++++
 5 files changed, 16 insertions(+), 4 deletions(-)
Documentation/kernel-parameters.txt +2 -1
index c357a31..a6417e5 100644
@@ -970,7 +970,8 @@ 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 depends on the CONFIG_INITCALL_DEBUG
+			option.
 
 	initrd=		[BOOT] Specify the location of the initial ramdisk
 
include/linux/init.h +4 -0
index 577671c..e2005ab 100644
@@ -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
   
init/main.c +2 -0
index 4a9479e..0902999 100644
@@ -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];
 
kernel/async.c +1 -3
index 3d8220a..8801e1e 100644
@@ -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!
  */
lib/Kconfig.debug +7 -0
index df9234c..f6e6c17 100644
@@ -807,6 +807,13 @@ config DEBUG_CREDENTIALS
 
 	  If unsure, say N.
 
+config INITCALL_DEBUG
+	bool "Debug kernel initcalls"
+	default y
+	help
+	  This build option allows you to trace initcalls by
+	  adding "initcall_debug" to the kernel command line.
+
 #
 # Select this config option from the architecture Kconfig, if it
 # it is preferred to always offer frame pointers as a config
maintainer
#4 lore raw
Quoted 19 lines · On Mon, 28 Mar 2011 11:51:31 +0400 Konstantin Khlebnikov…

This patch adds bool config option CONFIG_INITCALL_DEBUG for compiling initcalls debuging, 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
Quoted 8 lines
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

Well. One hopes that most things which use initcall_debug are marked __init or __initdata.

I see that async and pm have borrowed inticall_debug for reasonably appropriate reasons, but I wonder if all that is permanent code, or if it will later get removed. Because if it gets removed, this patch becomes rather pointless.

And the async code didn't try very hard anyway - it has a bunch of code wired into .text which is only used at boot time.

#5 lore raw
Quoted 31 lines · Andrew Morton
Quoted 19 lines · On Mon, 28 Mar 2011 11:51:31 +0400 Konstantin Khlebnikov…

This patch adds bool config option CONFIG_INITCALL_DEBUG for compiling initcalls debuging, 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
Quoted 8 lines
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
Quoted 7 lines

Well. One hopes that most things which use initcall_debug are marked __init or __initdata.

I see that async and pm have borrowed inticall_debug for reasonably appropriate reasons, but I wonder if all that is permanent code, or if it will later get removed. Because if it gets removed, this patch becomes rather pointless.

This is permanent code, as far as PM is concerned.

Thanks,
Rafael