dynamic_debug: refactor dynamic_pr_debug and friends
For the upcoming 'define the _ddebug descriptor in assembly', we need all the descriptors in a translation unit to have distinct names (because asm does not understand C scope). The easiest way to achieve that is as usual with an extra level of macros, passing the identifier to use to the innermost macro, generating it via __UNIQUE_ID or something. However, instead of repeating that exercise for dynamic_pr_debug, dynamic_dev_dbg, dynamic_netdev_dbg and dynamic_hex_dump separately, we can use the similarity between their bodies to implement them via a common macro, _dynamic_func_call - though the hex_dump case requires a slight variant, since print_hex_dump does not take the _ddebug descriptor. We'll also get to use that variant elsewhere (btrfs). Link: http://lkml.kernel.org/r/20190212214150.4807-11-linux@rasmusvillemoes.dk Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk> Acked-by: Jason Baron <jbaron@akamai.com> Cc: David Sterba <dsterba@suse.com> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Ingo Molnar <mingo@kernel.org> Cc: Petr Mladek <pmladek@suse.com> Cc: "Rafael J . Wysocki" <rafael.j.wysocki@intel.com> Cc: Steven Rostedt <rostedt@goodmis.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
a4507fedcd
commit
47cdd64be4
|
@ -112,40 +112,54 @@ void __dynamic_netdev_dbg(struct _ddebug *descriptor,
|
|||
|
||||
#endif
|
||||
|
||||
#define dynamic_pr_debug(fmt, ...) \
|
||||
do { \
|
||||
DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \
|
||||
if (DYNAMIC_DEBUG_BRANCH(descriptor)) \
|
||||
__dynamic_pr_debug(&descriptor, pr_fmt(fmt), \
|
||||
##__VA_ARGS__); \
|
||||
#define __dynamic_func_call(id, fmt, func, ...) do { \
|
||||
DEFINE_DYNAMIC_DEBUG_METADATA(id, fmt); \
|
||||
if (DYNAMIC_DEBUG_BRANCH(id)) \
|
||||
func(&id, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define __dynamic_func_call_no_desc(id, fmt, func, ...) do { \
|
||||
DEFINE_DYNAMIC_DEBUG_METADATA(id, fmt); \
|
||||
if (DYNAMIC_DEBUG_BRANCH(id)) \
|
||||
func(__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* "Factory macro" for generating a call to func, guarded by a
|
||||
* DYNAMIC_DEBUG_BRANCH. The dynamic debug decriptor will be
|
||||
* initialized using the fmt argument. The function will be called with
|
||||
* the address of the descriptor as first argument, followed by all
|
||||
* the varargs. Note that fmt is repeated in invocations of this
|
||||
* macro.
|
||||
*/
|
||||
#define _dynamic_func_call(fmt, func, ...) \
|
||||
__dynamic_func_call(__UNIQUE_ID(ddebug), fmt, func, ##__VA_ARGS__)
|
||||
/*
|
||||
* A variant that does the same, except that the descriptor is not
|
||||
* passed as the first argument to the function; it is only called
|
||||
* with precisely the macro's varargs.
|
||||
*/
|
||||
#define _dynamic_func_call_no_desc(fmt, func, ...) \
|
||||
__dynamic_func_call_no_desc(__UNIQUE_ID(ddebug), fmt, func, ##__VA_ARGS__)
|
||||
|
||||
#define dynamic_pr_debug(fmt, ...) \
|
||||
_dynamic_func_call(fmt, __dynamic_pr_debug, \
|
||||
pr_fmt(fmt), ##__VA_ARGS__)
|
||||
|
||||
#define dynamic_dev_dbg(dev, fmt, ...) \
|
||||
do { \
|
||||
DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \
|
||||
if (DYNAMIC_DEBUG_BRANCH(descriptor)) \
|
||||
__dynamic_dev_dbg(&descriptor, dev, fmt, \
|
||||
##__VA_ARGS__); \
|
||||
} while (0)
|
||||
_dynamic_func_call(fmt,__dynamic_dev_dbg, \
|
||||
dev, fmt, ##__VA_ARGS__)
|
||||
|
||||
#define dynamic_netdev_dbg(dev, fmt, ...) \
|
||||
do { \
|
||||
DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \
|
||||
if (DYNAMIC_DEBUG_BRANCH(descriptor)) \
|
||||
__dynamic_netdev_dbg(&descriptor, dev, fmt, \
|
||||
##__VA_ARGS__); \
|
||||
} while (0)
|
||||
_dynamic_func_call(fmt, __dynamic_netdev_dbg, \
|
||||
dev, fmt, ##__VA_ARGS__)
|
||||
|
||||
#define dynamic_hex_dump(prefix_str, prefix_type, rowsize, \
|
||||
groupsize, buf, len, ascii) \
|
||||
do { \
|
||||
DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, \
|
||||
__builtin_constant_p(prefix_str) ? prefix_str : "hexdump");\
|
||||
if (DYNAMIC_DEBUG_BRANCH(descriptor)) \
|
||||
print_hex_dump(KERN_DEBUG, prefix_str, \
|
||||
prefix_type, rowsize, groupsize, \
|
||||
buf, len, ascii); \
|
||||
} while (0)
|
||||
#define dynamic_hex_dump(prefix_str, prefix_type, rowsize, \
|
||||
groupsize, buf, len, ascii) \
|
||||
_dynamic_func_call_no_desc(__builtin_constant_p(prefix_str) ? prefix_str : "hexdump", \
|
||||
print_hex_dump, \
|
||||
KERN_DEBUG, prefix_str, prefix_type, \
|
||||
rowsize, groupsize, buf, len, ascii)
|
||||
|
||||
#else
|
||||
|
||||
|
|
Loading…
Reference in New Issue