From: Joe Perches <joe@perches.com>
To: Tim Hockin <thockin@hockin.org>
Cc: schwidefsky@de.ibm.com, linux-kernel@vger.kernel.org,
linux-s390@vger.kernel.org,
lf_kernel_messages@lists.linux-foundation.org,
"Andrew Morton" <akpm@linux-foundation.org>,
"Michael Holzheu" <holzheu@de.ibm.com>,
"Gerrit Huizenga" <gh@us.ibm.com>,
"Greg Kroah-Hartman" <gregkh@suse.de>,
"Randy Dunlap" <randy.dunlap@oracle.com>,
"Jan Kara" <jack@suse.cz>, "Pavel Machek" <pavel@ucw.cz>,
"Sam Ravnborg" <sam@ravnborg.org>,
"Jochen Voß" <jochen.voss@googlemail.com>,
"Kunai Takashi" <kunai@linux-foundation.jp>,
"Tim Bird" <tim.bird@am.sony.com>
Subject: Re: [patch 1/3] kmsg: Kernel message catalog macros.
Date: Thu, 14 Aug 2008 20:08:59 -0700 [thread overview]
Message-ID: <1218769739.24527.76.camel@localhost> (raw)
In-Reply-To: <b3ece790808141150s3770531bsc88ec387e0f840d3@mail.gmail.com>
On Thu, 2008-08-14 at 11:50 -0700, Tim Hockin wrote:
> // this is the actual implementation
> extern void send_kmsg(int level, const char *fmt, ...);
> // this is a convenience wrapper, maybe not needed as they get combinatoric
> #define kmsg_err(fmt, ...) \
> send_kmsg(KERN_ERROR, fmt, ##__VA_ARGS__)
> inside a subsystem-specific header:
> #define mysubsys_kmsg_err(fmt, ...) \
> kmsg_err("mysubsys:" fmt "\n", ##__VA_ARGS__)
> inside each subsystem-driver:
> #define mydriver_kmsg_err(fmt, ...) \
> mysubsys_kmsg_err("mydriver:" fmt, ##__VA_ARGS__)
> then the driver just calls:
> mydriver_kmsg_err("something happened");
I think adding system/subsystem/driver prefixes
to function names is not good.
Though Martin Schwidefsky thinks KMSG_COMPONENT is necessary,
I am unconvinced.
Perhaps using something like Jason Baron's new dynamic
debug infrastructure, all the event logging functions
could optionally print KBUILD_MODNAME, __func__ and __line__
if desired.
> Do you see *every* printk() becoming a kmsg?
> Just printk() in drivers?
> Or just some hand-chosen printk()s ?
I'd prefer every printk(KERN_<level> become pr_<level>
and kernel.h be reorganized so that all logging functions
are declared in a separate include file, maybe logging.h
kmsg_<level> could eventually live in logging.h
Here's a reorganization of kernel.h:
----------------------
Create <linux/logging.h>
Move content of <linux/ratelimit.h> into <linux/logging.h>
Delete <linux/ratelimit.h>
Move logging content from <linux/kernel.h> into <linux/logging.h>
Signed-off-by: Joe Perches <joe@perches.com>
---
include/linux/kernel.h | 109 +----------------------------------
include/linux/logging.h | 139 +++++++++++++++++++++++++++++++++++++++++++++
include/linux/ratelimit.h | 27 ---------
3 files changed, 141 insertions(+), 134 deletions(-)
diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index 2651f80..63e647b 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -15,13 +15,11 @@
#include <linux/bitops.h>
#include <linux/log2.h>
#include <linux/typecheck.h>
-#include <linux/ratelimit.h>
+#include <linux/logging.h>
+
#include <asm/byteorder.h>
#include <asm/bug.h>
-extern const char linux_banner[];
-extern const char linux_proc_banner[];
-
#define USHORT_MAX ((u16)(~0U))
#define SHORT_MAX ((s16)(USHORT_MAX>>1))
#define SHORT_MIN (-SHORT_MAX - 1)
@@ -81,29 +79,6 @@ extern const char linux_proc_banner[];
*/
#define lower_32_bits(n) ((u32)(n))
-#define KERN_EMERG "<0>" /* system is unusable */
-#define KERN_ALERT "<1>" /* action must be taken immediately */
-#define KERN_CRIT "<2>" /* critical conditions */
-#define KERN_ERR "<3>" /* error conditions */
-#define KERN_WARNING "<4>" /* warning conditions */
-#define KERN_NOTICE "<5>" /* normal but significant condition */
-#define KERN_INFO "<6>" /* informational */
-#define KERN_DEBUG "<7>" /* debug-level messages */
-
-/*
- * Annotation for a "continued" line of log printout (only done after a
- * line that had no enclosing \n). Only to be used by core/arch code
- * during early bootup (a continued line is not SMP-safe otherwise).
- */
-#define KERN_CONT ""
-
-extern int console_printk[];
-
-#define console_loglevel (console_printk[0])
-#define default_message_loglevel (console_printk[1])
-#define minimum_console_loglevel (console_printk[2])
-#define default_console_loglevel (console_printk[3])
-
struct completion;
struct pt_regs;
struct user;
@@ -190,48 +165,8 @@ extern int kernel_text_address(unsigned long addr);
struct pid;
extern struct pid *session_of_pgrp(struct pid *pgrp);
-#ifdef CONFIG_PRINTK
-asmlinkage int vprintk(const char *fmt, va_list args)
- __attribute__ ((format (printf, 1, 0)));
-asmlinkage int printk(const char * fmt, ...)
- __attribute__ ((format (printf, 1, 2))) __cold;
-
-extern struct ratelimit_state printk_ratelimit_state;
-extern int printk_ratelimit(void);
-extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,
- unsigned int interval_msec);
-#else
-static inline int vprintk(const char *s, va_list args)
- __attribute__ ((format (printf, 1, 0)));
-static inline int vprintk(const char *s, va_list args) { return 0; }
-static inline int printk(const char *s, ...)
- __attribute__ ((format (printf, 1, 2)));
-static inline int __cold printk(const char *s, ...) { return 0; }
-static inline int printk_ratelimit(void) { return 0; }
-static inline bool printk_timed_ratelimit(unsigned long *caller_jiffies, \
- unsigned int interval_msec) \
- { return false; }
-#endif
-
-extern void asmlinkage __attribute__((format(printf, 1, 2)))
- early_printk(const char *fmt, ...);
-
unsigned long int_sqrt(unsigned long);
-static inline void console_silent(void)
-{
- console_loglevel = 0;
-}
-
-static inline void console_verbose(void)
-{
- if (console_loglevel)
- console_loglevel = 15;
-}
-
-extern void bust_spinlocks(int yes);
-extern void wake_up_klogd(void);
-extern int oops_in_progress; /* If set, an oops, panic(), BUG() or die() is in progress */
extern int panic_timeout;
extern int panic_on_oops;
extern int panic_on_unrecovered_nmi;
@@ -261,22 +196,6 @@ extern enum system_states {
#define TAINT_OVERRIDDEN_ACPI_TABLE (1<<8)
#define TAINT_WARN (1<<9)
-extern void dump_stack(void) __cold;
-
-enum {
- DUMP_PREFIX_NONE,
- DUMP_PREFIX_ADDRESS,
- DUMP_PREFIX_OFFSET
-};
-extern void hex_dump_to_buffer(const void *buf, size_t len,
- int rowsize, int groupsize,
- char *linebuf, size_t linebuflen, bool ascii);
-extern 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);
-extern void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
- const void *buf, size_t len);
-
extern const char hex_asc[];
#define hex_asc_lo(x) hex_asc[((x) & 0x0f)]
#define hex_asc_hi(x) hex_asc[((x) & 0xf0) >> 4]
@@ -288,30 +207,6 @@ static inline char *pack_hex_byte(char *buf, u8 byte)
return buf;
}
-#define pr_emerg(fmt, arg...) \
- printk(KERN_EMERG fmt, ##arg)
-#define pr_alert(fmt, arg...) \
- printk(KERN_ALERT fmt, ##arg)
-#define pr_crit(fmt, arg...) \
- printk(KERN_CRIT fmt, ##arg)
-#define pr_err(fmt, arg...) \
- printk(KERN_ERR fmt, ##arg)
-#define pr_warning(fmt, arg...) \
- printk(KERN_WARNING fmt, ##arg)
-#define pr_notice(fmt, arg...) \
- printk(KERN_NOTICE fmt, ##arg)
-#define pr_info(fmt, arg...) \
- printk(KERN_INFO fmt, ##arg)
-
-#ifdef DEBUG
-/* If you are writing a driver, please use dev_dbg instead */
-#define pr_debug(fmt, arg...) \
- printk(KERN_DEBUG fmt, ##arg)
-#else
-#define pr_debug(fmt, arg...) \
- ({ if (0) printk(KERN_DEBUG fmt, ##arg); 0; })
-#endif
-
/*
* Display an IP address in readable format.
*/
diff --git a/include/linux/logging.h b/include/linux/logging.h
new file mode 100644
index 0000000..63734cd
--- /dev/null
+++ b/include/linux/logging.h
@@ -0,0 +1,139 @@
+#ifndef _LINUX_LOGGING_H
+#define _LINUX_LOGGING_H
+
+#include <linux/param.h>
+
+extern const char linux_banner[];
+extern const char linux_proc_banner[];
+
+extern const char *print_tainted(void);
+
+extern int console_printk[];
+
+#define console_loglevel (console_printk[0])
+#define default_message_loglevel (console_printk[1])
+#define minimum_console_loglevel (console_printk[2])
+#define default_console_loglevel (console_printk[3])
+
+static inline void console_silent(void)
+{
+ console_loglevel = 0;
+}
+
+static inline void console_verbose(void)
+{
+ if (console_loglevel)
+ console_loglevel = 15;
+}
+
+
+#ifdef CONFIG_PRINTK
+asmlinkage int vprintk(const char *fmt, va_list args)
+ __attribute__ ((format (printf, 1, 0)));
+asmlinkage int printk(const char * fmt, ...)
+ __attribute__ ((format (printf, 1, 2))) __cold;
+
+extern struct ratelimit_state printk_ratelimit_state;
+extern int printk_ratelimit(void);
+extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,
+ unsigned int interval_msec);
+#else
+static inline int vprintk(const char *s, va_list args)
+ __attribute__ ((format (printf, 1, 0)));
+static inline int vprintk(const char *s, va_list args) { return 0; }
+static inline int printk(const char *s, ...)
+ __attribute__ ((format (printf, 1, 2)));
+static inline int __cold printk(const char *s, ...) { return 0; }
+static inline int printk_ratelimit(void) { return 0; }
+static inline bool printk_timed_ratelimit(unsigned long *caller_jiffies, \
+ unsigned int interval_msec) \
+ { return false; }
+#endif
+
+extern void asmlinkage __attribute__((format(printf, 1, 2)))
+ early_printk(const char *fmt, ...);
+
+extern void dump_stack(void) __cold;
+
+enum {
+ DUMP_PREFIX_NONE,
+ DUMP_PREFIX_ADDRESS,
+ DUMP_PREFIX_OFFSET
+};
+extern void hex_dump_to_buffer(const void *buf, size_t len,
+ int rowsize, int groupsize,
+ char *linebuf, size_t linebuflen, bool ascii);
+extern 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);
+extern void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
+ const void *buf, size_t len);
+
+#define KERN_EMERG "<0>" /* system is unusable */
+#define KERN_ALERT "<1>" /* action must be taken immediately */
+#define KERN_CRIT "<2>" /* critical conditions */
+#define KERN_ERR "<3>" /* error conditions */
+#define KERN_WARNING "<4>" /* warning conditions */
+#define KERN_NOTICE "<5>" /* normal but significant condition */
+#define KERN_INFO "<6>" /* informational */
+#define KERN_DEBUG "<7>" /* debug-level messages */
+
+/*
+ * Annotation for a "continued" line of log printout (only done after a
+ * line that had no enclosing \n). Only to be used by core/arch code
+ * during early bootup (a continued line is not SMP-safe otherwise).
+ */
+#define KERN_CONT ""
+
+#define pr_emerg(fmt, arg...) \
+ printk(KERN_EMERG fmt, ##arg)
+#define pr_alert(fmt, arg...) \
+ printk(KERN_ALERT fmt, ##arg)
+#define pr_crit(fmt, arg...) \
+ printk(KERN_CRIT fmt, ##arg)
+#define pr_err(fmt, arg...) \
+ printk(KERN_ERR fmt, ##arg)
+#define pr_warning(fmt, arg...) \
+ printk(KERN_WARNING fmt, ##arg)
+#define pr_notice(fmt, arg...) \
+ printk(KERN_NOTICE fmt, ##arg)
+#define pr_info(fmt, arg...) \
+ printk(KERN_INFO fmt, ##arg)
+
+#ifdef DEBUG
+/* If you are writing a driver, please use dev_dbg instead */
+#define pr_debug(fmt, arg...) \
+ printk(KERN_DEBUG fmt, ##arg)
+#else
+#define pr_debug(fmt, arg...) \
+ ({ if (0) printk(KERN_DEBUG fmt, ##arg); 0; })
+#endif
+
+extern void bust_spinlocks(int yes);
+extern void wake_up_klogd(void);
+extern int oops_in_progress; /* If set, an oops, panic(), BUG() or die() is in progress */
+
+#define DEFAULT_RATELIMIT_INTERVAL (5 * HZ)
+#define DEFAULT_RATELIMIT_BURST 10
+
+struct ratelimit_state {
+ int interval;
+ int burst;
+ int printed;
+ int missed;
+ unsigned long begin;
+};
+
+#define DEFINE_RATELIMIT_STATE(name, interval, burst) \
+ struct ratelimit_state name = {interval, burst,}
+
+extern int __ratelimit(struct ratelimit_state *rs);
+
+static inline int ratelimit(void)
+{
+ static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL,
+ DEFAULT_RATELIMIT_BURST);
+ return __ratelimit(&rs);
+}
+
+#endif
diff --git a/include/linux/ratelimit.h b/include/linux/ratelimit.h
deleted file mode 100644
index 18a5b9b..0000000
--- a/include/linux/ratelimit.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef _LINUX_RATELIMIT_H
-#define _LINUX_RATELIMIT_H
-#include <linux/param.h>
-
-#define DEFAULT_RATELIMIT_INTERVAL (5 * HZ)
-#define DEFAULT_RATELIMIT_BURST 10
-
-struct ratelimit_state {
- int interval;
- int burst;
- int printed;
- int missed;
- unsigned long begin;
-};
-
-#define DEFINE_RATELIMIT_STATE(name, interval, burst) \
- struct ratelimit_state name = {interval, burst,}
-
-extern int __ratelimit(struct ratelimit_state *rs);
-
-static inline int ratelimit(void)
-{
- static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL,
- DEFAULT_RATELIMIT_BURST);
- return __ratelimit(&rs);
-}
-#endif
next prev parent reply other threads:[~2008-08-15 3:08 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-30 16:56 [patch 0/3] [RFC] kmsg macros and script, take x+1 Martin Schwidefsky
2008-07-30 16:56 ` [patch 1/3] kmsg: Kernel message catalog macros Martin Schwidefsky
2008-07-30 19:39 ` Greg KH
2008-07-31 8:35 ` Martin Schwidefsky
2008-07-30 22:02 ` Kay Sievers
2008-07-30 22:04 ` Greg KH
2008-07-31 9:10 ` Martin Schwidefsky
2008-08-05 22:31 ` Greg KH
2008-08-06 8:35 ` Martin Schwidefsky
2008-08-06 20:07 ` Greg KH
2008-08-07 8:31 ` Martin Schwidefsky
2008-08-07 15:59 ` Joe Perches
2008-08-10 0:08 ` Martin Schwidefsky
2008-08-16 19:36 ` Joe Perches
2008-08-17 17:27 ` Martin Schwidefsky
2008-08-07 17:01 ` Greg KH
2008-08-10 0:03 ` Martin Schwidefsky
2008-08-11 10:54 ` Jan Kara
2008-07-31 8:36 ` Martin Schwidefsky
2008-08-13 0:35 ` Tim Hockin
2008-08-14 17:04 ` Martin Schwidefsky
2008-08-14 18:50 ` Tim Hockin
2008-08-15 3:08 ` Joe Perches [this message]
2008-08-15 3:44 ` Greg KH
2008-08-15 5:33 ` Tim Hockin
2008-08-15 11:21 ` Jan Blunck
2008-08-15 15:39 ` Tim Hockin
2008-08-18 9:23 ` Pavel Machek
2008-08-18 10:39 ` Jan Kara
2008-08-18 17:51 ` Tim Hockin
2008-08-15 16:03 ` Greg KH
2008-08-15 17:03 ` Tim Hockin
2008-08-16 18:06 ` Martin Schwidefsky
2008-08-13 4:33 ` Rusty Russell
2008-08-13 7:04 ` Tim Hockin
2008-08-13 7:13 ` Pavel Machek
2008-08-13 14:50 ` Tim Hockin
2008-08-14 1:53 ` Rusty Russell
2008-08-14 15:40 ` Tim Hockin
2008-08-14 17:11 ` Martin Schwidefsky
2008-08-14 17:07 ` Martin Schwidefsky
2008-08-14 23:22 ` Rusty Russell
2008-08-16 17:49 ` Martin Schwidefsky
2008-08-16 20:40 ` Tim Hockin
2008-08-17 3:39 ` Rick Troth
2008-08-17 5:11 ` Rusty Russell
2008-08-17 17:33 ` Martin Schwidefsky
2008-08-17 17:28 ` Martin Schwidefsky
2008-08-17 17:31 ` Tim Hockin
2008-08-15 20:05 ` Rick Troth
2008-08-16 17:45 ` Martin Schwidefsky
2008-08-25 15:56 ` Martin Schwidefsky
2008-08-26 1:38 ` Rusty Russell
2008-09-01 12:28 ` Martin Schwidefsky
2008-09-02 13:34 ` Rusty Russell
2008-09-02 14:16 ` Martin Schwidefsky
2008-07-30 16:56 ` [patch 2/3] kmsg: Kernel message catalog script Martin Schwidefsky
2008-07-31 6:40 ` KOSAKI Motohiro
2008-07-31 10:23 ` Takashi Nishiie
2008-07-31 10:23 ` Takashi Nishiie
2008-08-01 11:39 ` Martin Schwidefsky
2008-07-30 16:56 ` [patch 3/3] kmsg: convert xpram messages to kmsg api Martin Schwidefsky
2008-07-30 19:43 ` Greg KH
2008-07-31 8:33 ` Martin Schwidefsky
2008-08-05 22:34 ` Greg KH
2008-08-06 8:46 ` Martin Schwidefsky
2008-08-06 8:46 ` Martin Schwidefsky
2008-08-06 20:11 ` Greg KH
2008-08-07 8:39 ` Martin Schwidefsky
2008-08-07 17:03 ` Greg KH
2008-08-04 6:48 ` Pavel Machek
2008-08-04 8:06 ` Martin Schwidefsky
[not found] ` <20080804202614.GA29170@uranus.ravnborg.org>
2008-08-05 8:03 ` [patch 0/3] [RFC] kmsg macros and script, take x+1 Martin Schwidefsky
[not found] <OF576C88F7.D38E7FE6-ONC12574B1.00547361-C12574B1.005502D2@de.ibm.com>
2008-09-01 12:30 ` [patch 1/3] kmsg: Kernel message catalog macros Martin Schwidefsky
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=1218769739.24527.76.camel@localhost \
--to=joe@perches.com \
--cc=akpm@linux-foundation.org \
--cc=gh@us.ibm.com \
--cc=gregkh@suse.de \
--cc=holzheu@de.ibm.com \
--cc=jack@suse.cz \
--cc=jochen.voss@googlemail.com \
--cc=kunai@linux-foundation.jp \
--cc=lf_kernel_messages@lists.linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=pavel@ucw.cz \
--cc=randy.dunlap@oracle.com \
--cc=sam@ravnborg.org \
--cc=schwidefsky@de.ibm.com \
--cc=thockin@hockin.org \
--cc=tim.bird@am.sony.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.