From: jim.cromie@gmail.com
To: jbaron@redhat.com
Cc: greg@kroah.com, joe@perches.com, bart.vanassche@gmail.com,
linux-kernel@vger.kernel.org, Jim Cromie <jim.cromie@gmail.com>
Subject: [PATCH 25/25] dynamic_debug: protect "dyndbg" fake module param name at compile-time
Date: Wed, 30 Nov 2011 12:56:54 -0700 [thread overview]
Message-ID: <1322683014-13285-26-git-send-email-jim.cromie@gmail.com> (raw)
In-Reply-To: <1322683014-13285-1-git-send-email-jim.cromie@gmail.com>
From: Jim Cromie <jim.cromie@gmail.com>
Add BUILD_BUG_DECL(name, cond) to cause compile error if condition is
true. Unlike other flavors of BUILD_BUG_*, this works at file scope;
it declares an unused 0-sized var: __BUILD_BUG_DECL_##name, whose
declaration is readily found if compile errors happen.
Use this macro in module_param_named() to insure that "dyndbg" is
reserved and not used by modules as a param name, and drop the
run-time check for same.
Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
include/linux/kernel.h | 10 ++++++++++
include/linux/moduleparam.h | 1 +
lib/dynamic_debug.c | 8 --------
3 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index e8b1597..62f210b 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -665,6 +665,7 @@ static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { }
#define BUILD_BUG_ON_ZERO(e) (0)
#define BUILD_BUG_ON_NULL(e) ((void*)0)
#define BUILD_BUG_ON(condition)
+#define BUILD_BUG_DECL(name, condition)
#else /* __CHECKER__ */
/* Force a compilation error if a constant expression is not a power of 2 */
@@ -703,6 +704,15 @@ extern int __build_bug_on_failed;
if (condition) __build_bug_on_failed = 1; \
} while(0)
#endif
+/*
+ * BUILD_BUG_DECL is usable at file scope (by avoiding do {} loop).
+ * If condition is true, causes a compile error, otherwize it declares
+ * a 0-sized array (so it doesn't waste space)
+ */
+#define BUILD_BUG_DECL(name, condition) \
+ static struct __BUILD_BUG_DECL_ ##name { \
+ int __BUILD_BUG_DECL_ ##name[1 - 2*!!(condition)]; \
+ } __BUILD_BUG_DECL_ ##name[0] __attribute__((unused))
#endif /* __CHECKER__ */
/* Trap pasters of __FUNCTION__ at compile-time */
diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h
index e62e5ce..490e557 100644
--- a/include/linux/moduleparam.h
+++ b/include/linux/moduleparam.h
@@ -118,6 +118,7 @@ struct kparam_array
* structure. This allows exposure under a different name.
*/
#define module_param_named(name, value, type, perm) \
+ BUILD_BUG_DECL(name, !__builtin_strcmp(#name, "dyndbg")); \
param_check_##type(name, &(value)); \
module_param_cb(name, ¶m_ops_##type, &value, perm); \
__MODULE_PARM_TYPE(name, #type)
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index a077cd4..9b07a3b 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -887,7 +887,6 @@ void ddebug_module_parse_args(const char *modname, char* modargs,
struct kernel_param *params, unsigned num)
{
char *param, *val, *args_it, *arg_dup_ptr;
- int i;
if (!modargs || !*modargs)
return; /* no args, return now, avoid pr_infos */
@@ -901,13 +900,6 @@ void ddebug_module_parse_args(const char *modname, char* modargs,
if (verbose)
pr_info("%s ARGS: %s\n", modname, args_it);
- /* warn if modules declare ddebug param - todo BUILD_BUG ?? */
- for (i = 0; i < num; i++) {
- if (!strcmp("ddebug", params[i].name))
- pr_warning("Module %s uses reserved keyword "
- "*ddebug* as parameter\n", modname);
- }
-
while (*args_it) {
args_it = next_arg(args_it, ¶m, &val);
if (strcmp(param, "dyndbg"))
--
1.7.7.3
next prev parent reply other threads:[~2011-11-30 19:58 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-30 19:56 [patch 00/25] dynamic-debug during module initialization jim.cromie
2011-11-30 19:56 ` [PATCH 01/25] kernel/module.c: fix compile err, warnings under ifdef DEBUGP jim.cromie
2011-11-30 19:56 ` [PATCH 02/25] dynamic_debug: fix whitespace complaints from scripts/cleanfile jim.cromie
2011-11-30 19:56 ` [PATCH 03/25] dynamic_debug: drop enabled field from struct _ddebug, use _DPRINTK_FLAGS_PRINT jim.cromie
2011-11-30 19:56 ` [PATCH 04/25] dynamic_debug: make dynamic-debug supersede DEBUG ccflag jim.cromie
2011-11-30 22:03 ` Jason Baron
2011-11-30 22:16 ` Joe Perches
2011-12-01 0:26 ` Jim Cromie
2011-11-30 19:56 ` [PATCH 05/25] dynamic_debug: change verbosity at runtime jim.cromie
2011-11-30 19:56 ` [PATCH 06/25] dynamic_debug: replace strcpy with strlcpy, in ddebug_setup_query() jim.cromie
2011-11-30 19:56 ` [PATCH 07/25] dynamic_debug: pr_err() call should not depend upon verbosity jim.cromie
2011-11-30 19:56 ` [PATCH 08/25] dynamic_debug: drop explicit !=NULL checks jim.cromie
2011-11-30 19:56 ` [PATCH 09/25] dynamic_debug: describe_flags with '=[pmflt_]*' jim.cromie
2011-11-30 19:56 ` [PATCH 10/25] dynamic_debug: tighten up error checking on debug queries jim.cromie
2011-11-30 19:56 ` [PATCH 11/25] dynamic_debug: early return if _ddebug table is empty jim.cromie
2011-11-30 19:56 ` [PATCH 12/25] dynamic_debug: reduce lineno field to a saner 18 bits jim.cromie
2011-11-30 19:56 ` [PATCH 13/25] dynamic_debug: chop off comments in ddebug_tokenize jim.cromie
2011-11-30 19:56 ` [PATCH 14/25] dynamic_debug: enlarge command/query write buffer jim.cromie
2011-11-30 19:56 ` [PATCH 15/25] dynamic_debug: add trim_prefix() to provide source-root relative paths jim.cromie
2011-11-30 19:56 ` [PATCH 16/25] dynamic_debug: factor vpr_info_dq out of ddebug_parse_query jim.cromie
2011-11-30 19:56 ` [PATCH 17/25] dynamic_debug: process multiple debug-queries on a line jim.cromie
2011-11-30 19:56 ` [PATCH 18/25] dynamic_debug: Introduce global fake module param module.ddebug jim.cromie
2011-12-01 2:19 ` Rusty Russell
2011-12-01 8:15 ` Jim Cromie
2011-12-02 0:50 ` Rusty Russell
2011-11-30 19:56 ` [PATCH 19/25] pnp: if CONFIG_DYNAMIC_DEBUG, use pnp.ddebug instead of pnp.debug jim.cromie
2011-12-01 11:15 ` Thomas Renninger
2011-12-05 5:42 ` Jim Cromie
2011-12-05 14:47 ` Thomas Renninger
2011-12-05 19:15 ` Jim Cromie
2011-12-05 21:44 ` Thomas Renninger
2011-11-30 19:56 ` [PATCH 20/25] dynamic_debug: rename ddebug param to dyndbg, plus minor tweaks jim.cromie
2011-11-30 19:56 ` [PATCH 21/25] dynamic_debug: handle $module.dyndbg="+mfp" boot-line args jim.cromie
2011-11-30 19:56 ` [PATCH 22/25] dynamic_debug: add modname arg to exec_query callchain jim.cromie
2011-11-30 19:56 ` [PATCH 23/25] dynamic_debug: allow wildcard modname in boot-line query jim.cromie
2011-11-30 19:56 ` [PATCH 24/25] kernel/module: replace DEBUGP with pr_debug jim.cromie
2011-11-30 19:56 ` jim.cromie [this message]
2011-12-01 21:20 ` [patch 00/25] dynamic-debug during module initialization Jason Baron
2011-12-03 15:56 ` Jim Cromie
[not found] ` <201203051614.29457.trenn@suse.de>
[not found] ` <CAJfuBxw=kL5j2VNxXLqiY3ftY3n7MQnY5SkfB09Nscyw8Fh9Zw@mail.gmail.com>
[not found] ` <201203061002.57810.trenn@suse.de>
[not found] ` <20120306144754.GA2421@redhat.com>
2012-03-07 0:30 ` [PATCH 18/25] dynamic_debug: Introduce global fake module param module.ddebug Rusty Russell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1322683014-13285-26-git-send-email-jim.cromie@gmail.com \
--to=jim.cromie@gmail.com \
--cc=bart.vanassche@gmail.com \
--cc=greg@kroah.com \
--cc=jbaron@redhat.com \
--cc=joe@perches.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®