diff options
author | Jim Cromie <jim.cromie@gmail.com> | 2012-04-27 16:30:39 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-04-30 16:25:39 -0400 |
commit | 4107692760db8160a65347f7bb2fa7fa7bf9b0d1 (patch) | |
tree | 7e729fc32c723bc8fa77e852f3bf9308822fa653 /lib/dynamic_debug.c | |
parent | af442399fcf378a21ffe924b182f6d9ee70001ca (diff) |
dynamic_debug: print ram usage by ddebug tables if verbose
Print ram usage of dynamic-debug tables and verbose section so user
knows cost of enabling CONFIG_DYNAMIC_DEBUG. This only counts the
size of the _ddebug tables for builtins and the __verbose section that
they refer to, not those used in loadable modules.
Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
Acked-by: Jason Baron <jbaron@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'lib/dynamic_debug.c')
-rw-r--r-- | lib/dynamic_debug.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 66e0ec4d21f7..76da6aa66ce7 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c | |||
@@ -970,7 +970,8 @@ static int __init dynamic_debug_init(void) | |||
970 | const char *modname = NULL; | 970 | const char *modname = NULL; |
971 | char *cmdline; | 971 | char *cmdline; |
972 | int ret = 0; | 972 | int ret = 0; |
973 | int n = 0; | 973 | int n = 0, entries = 0, modct = 0; |
974 | int verbose_bytes = 0; | ||
974 | 975 | ||
975 | if (__start___verbose == __stop___verbose) { | 976 | if (__start___verbose == __stop___verbose) { |
976 | pr_warn("_ddebug table is empty in a " | 977 | pr_warn("_ddebug table is empty in a " |
@@ -981,7 +982,12 @@ static int __init dynamic_debug_init(void) | |||
981 | modname = iter->modname; | 982 | modname = iter->modname; |
982 | iter_start = iter; | 983 | iter_start = iter; |
983 | for (; iter < __stop___verbose; iter++) { | 984 | for (; iter < __stop___verbose; iter++) { |
985 | entries++; | ||
986 | verbose_bytes += strlen(iter->modname) + strlen(iter->function) | ||
987 | + strlen(iter->filename) + strlen(iter->format); | ||
988 | |||
984 | if (strcmp(modname, iter->modname)) { | 989 | if (strcmp(modname, iter->modname)) { |
990 | modct++; | ||
985 | ret = ddebug_add_module(iter_start, n, modname); | 991 | ret = ddebug_add_module(iter_start, n, modname); |
986 | if (ret) | 992 | if (ret) |
987 | goto out_err; | 993 | goto out_err; |
@@ -996,6 +1002,10 @@ static int __init dynamic_debug_init(void) | |||
996 | goto out_err; | 1002 | goto out_err; |
997 | 1003 | ||
998 | ddebug_init_success = 1; | 1004 | ddebug_init_success = 1; |
1005 | vpr_info("%d modules, %d entries and %d bytes in ddebug tables," | ||
1006 | " %d bytes in (readonly) verbose section\n", | ||
1007 | modct, entries, (int)( modct * sizeof(struct ddebug_table)), | ||
1008 | verbose_bytes + (int)(__stop___verbose - __start___verbose)); | ||
999 | 1009 | ||
1000 | /* apply ddebug_query boot param, dont unload tables on err */ | 1010 | /* apply ddebug_query boot param, dont unload tables on err */ |
1001 | if (ddebug_setup_string[0] != '\0') { | 1011 | if (ddebug_setup_string[0] != '\0') { |