mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Roman Fietze <roman.fietze@telemotive.de>
To: Joe Perches <realty@perches.com>
Cc: Jason Baron <jbaron@redhat.com>, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/2] printk.h dynamic_debug.h: add hex_dump_<level> macros
Date: Tue, 1 Feb 2011 13:46:53 +0100	[thread overview]
Message-ID: <201102011346.53756.roman.fietze@telemotive.de> (raw)
In-Reply-To: <201102011345.30618.roman.fietze@telemotive.de>


>From d2a76e8b586bdfb5c77151f4a0b35d0fb25144af Mon Sep 17 00:00:00 2001
From: Roman Fietze <roman.fietze@telemotive.de>
Date: Tue, 1 Feb 2011 10:41:17 +0100
Subject: [PATCH 1/2] printk.h dynamic_debug.h: add hex_dump_<level> macros

Add macros e.g. named hex_dump_<level> calling print_hex_dump with the
approriate level, with level beeing emerg, alert, ..., dbg. This is
similiar to the functions starting with "pr_" or "dev_".

The parameters for those macros are the same as for print_hex_dump
excluding the level.

Use dynamic printk wrapper to support turning hex_dump_debug on and
off similar to pr_debug using the dynamic debug sysfs control file.

Signed-off-by: Roman Fietze <roman.fietze@telemotive.de>
---
 include/linux/dynamic_debug.h |   20 ++++++++
 include/linux/printk.h        |   97 +++++++++++++++++++++++++++++++++++++---
 2 files changed, 109 insertions(+), 8 deletions(-)

diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
index 1c70028..be185ca 100644
--- a/include/linux/dynamic_debug.h
+++ b/include/linux/dynamic_debug.h
@@ -64,6 +64,20 @@ extern int ddebug_remove_module(const char *mod_name);
 		dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__);	\
 	} while (0)
 
+#define dynamic_hex_dump_dbg(prefix_str, prefix_type,			\
+			     rowsize, groupsize,			\
+			     buf, len, ascii)				\
+	do {								\
+		static struct _ddebug descriptor			\
+			__used						\
+			__attribute__((section("__verbose"), aligned(8))) = { \
+			KBUILD_MODNAME, __func__, __FILE__, prefix_str, __LINE__, \
+			_DPRINTK_FLAGS_DEFAULT };			\
+		if (unlikely(descriptor.enabled))			\
+			print_hex_dump(KERN_DEBUG, prefix_str, prefix_type, \
+				       rowsize, groupsize, buf, len, ascii); \
+	} while (0)
+
 #else
 
 static inline int ddebug_remove_module(const char *mod)
@@ -75,6 +89,12 @@ static inline int ddebug_remove_module(const char *mod)
 	do { if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); } while (0)
 #define dynamic_dev_dbg(dev, fmt, ...)					\
 	do { if (0) dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__); } while (0)
+#define dynamic_hex_dump_dbg(prefix_str, prefix_type,		\
+			     rowsize, groupsize,		\
+			     buf, len, ascii)			\
+	no_print_hex_dump(KERN_DEBUG, prefix_str, prefix_type,	\
+			  rowsize, groupsize,			\
+			  buf, len, ascii)
 #endif
 
 #endif
diff --git a/include/linux/printk.h b/include/linux/printk.h
index ee048e7..35ef67a 100644
--- a/include/linux/printk.h
+++ b/include/linux/printk.h
@@ -77,8 +77,8 @@ struct va_format {
 #define HW_ERR		"[Hardware Error]: "
 
 /*
- * Dummy printk for disabled debugging statements to use whilst maintaining
- * gcc's format and side-effect checking.
+ * Dummy printk and print_hex_dump for disabled debugging statements to use
+ * whilst maintaining gcc's format and side-effect checking.
  */
 static inline __attribute__ ((format (printf, 1, 2)))
 int no_printk(const char *fmt, ...)
@@ -86,6 +86,13 @@ int no_printk(const char *fmt, ...)
 	return 0;
 }
 
+static inline
+void no_print_hex_dump(const char *level, const char *prefix_str,
+		       int prefix_type, int rowsize, int groupsize,
+		       const void *buf, size_t len, bool ascii)
+{
+}
+
 extern asmlinkage __attribute__ ((format (printf, 1, 2)))
 void early_printk(const char *fmt, ...);
 
@@ -163,26 +170,104 @@ extern void dump_stack(void) __cold;
 #define pr_cont(fmt, ...) \
 	printk(KERN_CONT fmt, ##__VA_ARGS__)
 
-/* pr_devel() should produce zero code unless DEBUG is defined */
+#define hex_dump_emerg(prefix_str, prefix_type,			\
+		       rowsize,  groupsize,			\
+		       buf, len, ascii)				\
+	print_hex_dump(KERN_EMERG, prefix_str, prefix_type,	\
+		       rowsize, groupsize,			\
+		       buf, len, ascii)
+#define hex_dump_alert(prefix_str, prefix_type,			\
+		       rowsize,  groupsize,			\
+		       buf, len, ascii)				\
+	print_hex_dump(KERN_ALERT, prefix_str, prefix_type,	\
+		       rowsize, groupsize,			\
+		       buf, len, ascii)
+#define hex_dump_crit(prefix_str, prefix_type,			\
+		      rowsize,  groupsize,			\
+		      buf, len, ascii)				\
+	print_hex_dump(KERN_CRIT, prefix_str, prefix_type,	\
+		       rowsize, groupsize,			\
+		       buf, len, ascii)
+#define hex_dump_err(prefix_str, prefix_type,			\
+		     rowsize,  groupsize,			\
+		     buf, len, ascii)				\
+	print_hex_dump(KERN_ERR, prefix_str, prefix_type,	\
+		       rowsize, groupsize,			\
+		       buf, len, ascii)
+#define hex_dump_warn(prefix_str, prefix_type,			\
+		      rowsize,  groupsize,			\
+		      buf, len, ascii)				\
+	print_hex_dump(KERN_WARNING, prefix_str, prefix_type,	\
+		       rowsize, groupsize,			\
+		       buf, len, ascii)
+#define hex_dump_notice(prefix_str, prefix_type,		\
+			rowsize,  groupsize,			\
+			buf, len, ascii)			\
+	print_hex_dump(KERN_NOTICE, prefix_str, prefix_type,	\
+		       rowsize, groupsize,			\
+		       buf, len, ascii)
+#define hex_dump_info(prefix_str, prefix_type,			\
+		      rowsize,  groupsize,			\
+		      buf, len, ascii)				\
+	print_hex_dump(KERN_INFO, prefix_str, prefix_type,	\
+		       rowsize, groupsize,			\
+		       buf, len, ascii)
+
+/* pr_devel() and pr_devel_hex_dump() should produce zero code unless DEBUG is
+ * defined */
 #ifdef DEBUG
 #define pr_devel(fmt, ...) \
 	printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
+#define hex_dump_devel(prefix_str, prefix_type,		\
+		       rowsize,  groupsize,		\
+		       buf, len, ascii)			\
+	print_hex_dump(KERN_DEBUG,			\
+		       pr_fmt(prefix_str), prefix_type,	\
+		       rowsize, groupsize,		\
+		       buf, len, ascii)
 #else
 #define pr_devel(fmt, ...) \
 	no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
+#define hex_dump_devel(prefix_str, prefix_type,			\
+		       rowsize,  groupsize,			\
+		       buf, len, ascii)				\
+	no_print_hex_dump(KERN_DEBUG,				\
+			  pr_fmt(prefix_str), prefix_type,	\
+			  rowsize, groupsize,			\
+			  buf, len, ascii)
 #endif
 
 /* If you are writing a driver, please use dev_dbg instead */
 #if defined(DEBUG)
 #define pr_debug(fmt, ...) \
 	printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
+#define hex_dump_dbg(prefix_str, prefix_type,		\
+		     rowsize,  groupsize,		\
+		     buf, len, ascii)			\
+	print_hex_dump(KERN_DEBUG,			\
+		       pr_fmt(prefix_str), prefix_type,	\
+		       rowsize, groupsize,		\
+		       buf, len, ascii)
 #elif defined(CONFIG_DYNAMIC_DEBUG)
 /* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */
 #define pr_debug(fmt, ...) \
 	dynamic_pr_debug(fmt, ##__VA_ARGS__)
+#define hex_dump_dbg(prefix_str, prefix_type,			\
+		     rowsize, groupsize,			\
+		     buf, len, ascii)				\
+	dynamic_hex_dump_dbg(pr_fmt(prefix_str), prefix_type,	\
+			     rowsize, groupsize,		\
+			     buf, len, ascii)
 #else
 #define pr_debug(fmt, ...) \
 	no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
+#define hex_dump_dbg(prefix_str, prefix_type,			\
+		     rowsize, groupsize,			\
+		     buf, len, ascii)				\
+	no_print_hex_dump(KERN_DEBUG,				\
+			  pr_fmt(prefix_str), prefix_type,	\
+			  rowsize, groupsize,			\
+			  buf, len, ascii)
 #endif
 
 /*
@@ -287,11 +372,7 @@ extern void print_hex_dump(const char *level, const char *prefix_str,
 extern void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
 				 const void *buf, size_t len);
 #else
-static inline void print_hex_dump(const char *level, const char *prefix_str,
-				  int prefix_type, int rowsize, int groupsize,
-				  const void *buf, size_t len, bool ascii)
-{
-}
+#define print_hex_dump	no_print_hex_dump
 static inline void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
 					const void *buf, size_t len)
 {
-- 
1.7.3.4



-- 
Roman Fietze              Telemotive AG Buero Muehlhausen
Breitwiesen                             73347 Muehlhausen
Tel.: +49(0)7335/18493-45        http://www.telemotive.de

  reply	other threads:[~2011-02-01 12:46 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-03 14:17 [PATCH] Proposal to add dynamic debug feature for print_hex_dump [0/3] Roman Fietze
2010-12-03 14:19 ` [PATCH] Proposal to add dynamic debug feature for print_hex_dump [1/2] Roman Fietze
2010-12-03 20:35   ` Joe Perches
2010-12-03 14:21 ` [PATCH] Proposal to add dynamic debug feature for print_hex_dump [2/2] Roman Fietze
2010-12-03 20:37   ` Joe Perches
2010-12-06  5:58     ` Roman Fietze
2010-12-06  6:04       ` Joe Perches
     [not found] ` <201012061113.01576.roman.fietze@telemotive.de>
     [not found]   ` <1291822758.1240.8.camel@Joe-Laptop>
2011-01-14  8:43     ` [PATCH] Proposal to add dynamic debug feature for print_hex_dump Roman Fietze
2011-01-14 18:19       ` Joe Perches
2011-02-01 12:45         ` [PATCH 0/2] Fixed proposal " Roman Fietze
2011-02-01 12:46           ` Roman Fietze [this message]
2011-02-01 12:48           ` [PATCH 2/2] hex_dump_dbg: replace all calls to print_hex_dump with level KERN_DEBUG Roman Fietze
2011-02-02  1:27             ` Joe Perches

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=201102011346.53756.roman.fietze@telemotive.de \
    --to=roman.fietze@telemotive.de \
    --cc=jbaron@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=realty@perches.com \
    /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®