include/linux/printk.h: add pr_<level>_once macros
- Move printk_once definitions and add an #ifdef CONFIG_PRINTK - Add pr_<level>_once so printks can use pr_fmt Signed-off-by: Joe Perches <joe@perches.com> Cc: Matt Mackall <mpm@selenic.com> Cc: Ingo Molnar <mingo@elte.hu> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
5264f2f75d
commit
16cb839f13
1 changed files with 44 additions and 15 deletions
|
@ -112,18 +112,6 @@ extern int printk_delay_msec;
|
||||||
extern int dmesg_restrict;
|
extern int dmesg_restrict;
|
||||||
extern int kptr_restrict;
|
extern int kptr_restrict;
|
||||||
|
|
||||||
/*
|
|
||||||
* Print a one-time message (analogous to WARN_ONCE() et al):
|
|
||||||
*/
|
|
||||||
#define printk_once(x...) ({ \
|
|
||||||
static bool __print_once; \
|
|
||||||
\
|
|
||||||
if (!__print_once) { \
|
|
||||||
__print_once = true; \
|
|
||||||
printk(x); \
|
|
||||||
} \
|
|
||||||
})
|
|
||||||
|
|
||||||
void log_buf_kexec_setup(void);
|
void log_buf_kexec_setup(void);
|
||||||
#else
|
#else
|
||||||
static inline __attribute__ ((format (printf, 1, 0)))
|
static inline __attribute__ ((format (printf, 1, 0)))
|
||||||
|
@ -146,9 +134,6 @@ static inline bool printk_timed_ratelimit(unsigned long *caller_jiffies,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* No effect, but we still get type checking even in the !PRINTK case: */
|
|
||||||
#define printk_once(fmt, ...) no_printk(fmt, ##__VA_ARGS__)
|
|
||||||
|
|
||||||
static inline void log_buf_kexec_setup(void)
|
static inline void log_buf_kexec_setup(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -214,6 +199,50 @@ extern void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
|
||||||
no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
|
no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print a one-time message (analogous to WARN_ONCE() et al):
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef CONFIG_PRINTK
|
||||||
|
#define printk_once(fmt, ...) \
|
||||||
|
({ \
|
||||||
|
static bool __print_once; \
|
||||||
|
\
|
||||||
|
if (!__print_once) { \
|
||||||
|
__print_once = true; \
|
||||||
|
printk(fmt, ##__VA_ARGS__); \
|
||||||
|
} \
|
||||||
|
})
|
||||||
|
#else
|
||||||
|
#define printk_once(fmt, ...) \
|
||||||
|
no_printk(fmt, ##__VA_ARGS__)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define pr_emerg_once(fmt, ...) \
|
||||||
|
printk_once(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__)
|
||||||
|
#define pr_alert_once(fmt, ...) \
|
||||||
|
printk_once(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__)
|
||||||
|
#define pr_crit_once(fmt, ...) \
|
||||||
|
printk_once(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__)
|
||||||
|
#define pr_err_once(fmt, ...) \
|
||||||
|
printk_once(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
|
||||||
|
#define pr_warn_once(fmt, ...) \
|
||||||
|
printk_once(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
|
||||||
|
#define pr_notice_once(fmt, ...) \
|
||||||
|
printk_once(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__)
|
||||||
|
#define pr_info_once(fmt, ...) \
|
||||||
|
printk_once(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
|
||||||
|
#define pr_cont_once(fmt, ...) \
|
||||||
|
printk_once(KERN_CONT pr_fmt(fmt), ##__VA_ARGS__)
|
||||||
|
/* If you are writing a driver, please use dev_dbg instead */
|
||||||
|
#if defined(DEBUG)
|
||||||
|
#define pr_debug_once(fmt, ...) \
|
||||||
|
printk_once(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
|
||||||
|
#else
|
||||||
|
#define pr_debug_once(fmt, ...) \
|
||||||
|
no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ratelimited messages with local ratelimit_state,
|
* ratelimited messages with local ratelimit_state,
|
||||||
* no local ratelimit_state used in the !PRINTK case
|
* no local ratelimit_state used in the !PRINTK case
|
||||||
|
|
Loading…
Reference in a new issue