linux/include/linux/printk.h
<<
>>
Prefs
   1#ifndef __KERNEL_PRINTK__
   2#define __KERNEL_PRINTK__
   3
   4#include <stdarg.h>
   5#include <linux/init.h>
   6#include <linux/kern_levels.h>
   7#include <linux/linkage.h>
   8#include <linux/cache.h>
   9
  10extern const char linux_banner[];
  11extern const char linux_proc_banner[];
  12
  13static inline int printk_get_level(const char *buffer)
  14{
  15        if (buffer[0] == KERN_SOH_ASCII && buffer[1]) {
  16                switch (buffer[1]) {
  17                case '0' ... '7':
  18                case 'd':       /* KERN_DEFAULT */
  19                case 'c':       /* KERN_CONT */
  20                        return buffer[1];
  21                }
  22        }
  23        return 0;
  24}
  25
  26static inline const char *printk_skip_level(const char *buffer)
  27{
  28        if (printk_get_level(buffer))
  29                return buffer + 2;
  30
  31        return buffer;
  32}
  33
  34#define CONSOLE_EXT_LOG_MAX     8192
  35
  36/* printk's without a loglevel use this.. */
  37#define MESSAGE_LOGLEVEL_DEFAULT CONFIG_MESSAGE_LOGLEVEL_DEFAULT
  38
  39/* We show everything that is MORE important than this.. */
  40#define CONSOLE_LOGLEVEL_SILENT  0 /* Mum's the word */
  41#define CONSOLE_LOGLEVEL_MIN     1 /* Minimum loglevel we let people use */
  42#define CONSOLE_LOGLEVEL_QUIET   4 /* Shhh ..., when booted with "quiet" */
  43#define CONSOLE_LOGLEVEL_DEFAULT 7 /* anything MORE serious than KERN_DEBUG */
  44#define CONSOLE_LOGLEVEL_DEBUG  10 /* issue debug messages */
  45#define CONSOLE_LOGLEVEL_MOTORMOUTH 15  /* You can't shut this one up */
  46
  47extern int console_printk[];
  48
  49#define console_loglevel (console_printk[0])
  50#define default_message_loglevel (console_printk[1])
  51#define minimum_console_loglevel (console_printk[2])
  52#define default_console_loglevel (console_printk[3])
  53
  54static inline void console_silent(void)
  55{
  56        console_loglevel = CONSOLE_LOGLEVEL_SILENT;
  57}
  58
  59static inline void console_verbose(void)
  60{
  61        if (console_loglevel)
  62                console_loglevel = CONSOLE_LOGLEVEL_MOTORMOUTH;
  63}
  64
  65/* strlen("ratelimit") + 1 */
  66#define DEVKMSG_STR_MAX_SIZE 10
  67extern char devkmsg_log_str[];
  68struct ctl_table;
  69
  70struct va_format {
  71        const char *fmt;
  72        va_list *va;
  73};
  74
  75/*
  76 * FW_BUG
  77 * Add this to a message where you are sure the firmware is buggy or behaves
  78 * really stupid or out of spec. Be aware that the responsible BIOS developer
  79 * should be able to fix this issue or at least get a concrete idea of the
  80 * problem by reading your message without the need of looking at the kernel
  81 * code.
  82 *
  83 * Use it for definite and high priority BIOS bugs.
  84 *
  85 * FW_WARN
  86 * Use it for not that clear (e.g. could the kernel messed up things already?)
  87 * and medium priority BIOS bugs.
  88 *
  89 * FW_INFO
  90 * Use this one if you want to tell the user or vendor about something
  91 * suspicious, but generally harmless related to the firmware.
  92 *
  93 * Use it for information or very low priority BIOS bugs.
  94 */
  95#define FW_BUG          "[Firmware Bug]: "
  96#define FW_WARN         "[Firmware Warn]: "
  97#define FW_INFO         "[Firmware Info]: "
  98
  99/*
 100 * HW_ERR
 101 * Add this to a message for hardware errors, so that user can report
 102 * it to hardware vendor instead of LKML or software vendor.
 103 */
 104#define HW_ERR          "[Hardware Error]: "
 105
 106/*
 107 * DEPRECATED
 108 * Add this to a message whenever you want to warn user space about the use
 109 * of a deprecated aspect of an API so they can stop using it
 110 */
 111#define DEPRECATED      "[Deprecated]: "
 112
 113/*
 114 * Dummy printk for disabled debugging statements to use whilst maintaining
 115 * gcc's format checking.
 116 */
 117#define no_printk(fmt, ...)                             \
 118({                                                      \
 119        do {                                            \
 120                if (0)                                  \
 121                        printk(fmt, ##__VA_ARGS__);     \
 122        } while (0);                                    \
 123        0;                                              \
 124})
 125
 126#ifdef CONFIG_EARLY_PRINTK
 127extern asmlinkage __printf(1, 2)
 128void early_printk(const char *fmt, ...);
 129#else
 130static inline __printf(1, 2) __cold
 131void early_printk(const char *s, ...) { }
 132#endif
 133
 134#ifdef CONFIG_PRINTK_NMI
 135extern void printk_nmi_init(void);
 136extern void printk_nmi_enter(void);
 137extern void printk_nmi_exit(void);
 138extern void printk_nmi_flush(void);
 139extern void printk_nmi_flush_on_panic(void);
 140#else
 141static inline void printk_nmi_init(void) { }
 142static inline void printk_nmi_enter(void) { }
 143static inline void printk_nmi_exit(void) { }
 144static inline void printk_nmi_flush(void) { }
 145static inline void printk_nmi_flush_on_panic(void) { }
 146#endif /* PRINTK_NMI */
 147
 148#ifdef CONFIG_PRINTK
 149asmlinkage __printf(5, 0)
 150int vprintk_emit(int facility, int level,
 151                 const char *dict, size_t dictlen,
 152                 const char *fmt, va_list args);
 153
 154asmlinkage __printf(1, 0)
 155int vprintk(const char *fmt, va_list args);
 156
 157asmlinkage __printf(5, 6) __cold
 158int printk_emit(int facility, int level,
 159                const char *dict, size_t dictlen,
 160                const char *fmt, ...);
 161
 162asmlinkage __printf(1, 2) __cold
 163int printk(const char *fmt, ...);
 164
 165/*
 166 * Special printk facility for scheduler/timekeeping use only, _DO_NOT_USE_ !
 167 */
 168__printf(1, 2) __cold int printk_deferred(const char *fmt, ...);
 169
 170/*
 171 * Please don't use printk_ratelimit(), because it shares ratelimiting state
 172 * with all other unrelated printk_ratelimit() callsites.  Instead use
 173 * printk_ratelimited() or plain old __ratelimit().
 174 */
 175extern int __printk_ratelimit(const char *func);
 176#define printk_ratelimit() __printk_ratelimit(__func__)
 177extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,
 178                                   unsigned int interval_msec);
 179
 180extern int printk_delay_msec;
 181extern int dmesg_restrict;
 182extern int kptr_restrict;
 183
 184extern int
 185devkmsg_sysctl_set_loglvl(struct ctl_table *table, int write, void __user *buf,
 186                          size_t *lenp, loff_t *ppos);
 187
 188extern void wake_up_klogd(void);
 189
 190char *log_buf_addr_get(void);
 191u32 log_buf_len_get(void);
 192void log_buf_kexec_setup(void);
 193void __init setup_log_buf(int early);
 194__printf(1, 2) void dump_stack_set_arch_desc(const char *fmt, ...);
 195void dump_stack_print_info(const char *log_lvl);
 196void show_regs_print_info(const char *log_lvl);
 197#else
 198static inline __printf(1, 0)
 199int vprintk(const char *s, va_list args)
 200{
 201        return 0;
 202}
 203static inline __printf(1, 2) __cold
 204int printk(const char *s, ...)
 205{
 206        return 0;
 207}
 208static inline __printf(1, 2) __cold
 209int printk_deferred(const char *s, ...)
 210{
 211        return 0;
 212}
 213static inline int printk_ratelimit(void)
 214{
 215        return 0;
 216}
 217static inline bool printk_timed_ratelimit(unsigned long *caller_jiffies,
 218                                          unsigned int interval_msec)
 219{
 220        return false;
 221}
 222
 223static inline void wake_up_klogd(void)
 224{
 225}
 226
 227static inline char *log_buf_addr_get(void)
 228{
 229        return NULL;
 230}
 231
 232static inline u32 log_buf_len_get(void)
 233{
 234        return 0;
 235}
 236
 237static inline void log_buf_kexec_setup(void)
 238{
 239}
 240
 241static inline void setup_log_buf(int early)
 242{
 243}
 244
 245static inline __printf(1, 2) void dump_stack_set_arch_desc(const char *fmt, ...)
 246{
 247}
 248
 249static inline void dump_stack_print_info(const char *log_lvl)
 250{
 251}
 252
 253static inline void show_regs_print_info(const char *log_lvl)
 254{
 255}
 256#endif
 257
 258extern asmlinkage void dump_stack(void) __cold;
 259
 260#ifndef pr_fmt
 261#define pr_fmt(fmt) fmt
 262#endif
 263
 264/*
 265 * These can be used to print at the various log levels.
 266 * All of these will print unconditionally, although note that pr_debug()
 267 * and other debug macros are compiled out unless either DEBUG is defined
 268 * or CONFIG_DYNAMIC_DEBUG is set.
 269 */
 270#define pr_emerg(fmt, ...) \
 271        printk(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__)
 272#define pr_alert(fmt, ...) \
 273        printk(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__)
 274#define pr_crit(fmt, ...) \
 275        printk(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__)
 276#define pr_err(fmt, ...) \
 277        printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
 278#define pr_warning(fmt, ...) \
 279        printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
 280#define pr_warn pr_warning
 281#define pr_notice(fmt, ...) \
 282        printk(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__)
 283#define pr_info(fmt, ...) \
 284        printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
 285/*
 286 * Like KERN_CONT, pr_cont() should only be used when continuing
 287 * a line with no newline ('\n') enclosed. Otherwise it defaults
 288 * back to KERN_DEFAULT.
 289 */
 290#define pr_cont(fmt, ...) \
 291        printk(KERN_CONT fmt, ##__VA_ARGS__)
 292
 293/* pr_devel() should produce zero code unless DEBUG is defined */
 294#ifdef DEBUG
 295#define pr_devel(fmt, ...) \
 296        printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
 297#else
 298#define pr_devel(fmt, ...) \
 299        no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
 300#endif
 301
 302
 303/* If you are writing a driver, please use dev_dbg instead */
 304#if defined(CONFIG_DYNAMIC_DEBUG)
 305#include <linux/dynamic_debug.h>
 306
 307/* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */
 308#define pr_debug(fmt, ...) \
 309        dynamic_pr_debug(fmt, ##__VA_ARGS__)
 310#elif defined(DEBUG)
 311#define pr_debug(fmt, ...) \
 312        printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
 313#else
 314#define pr_debug(fmt, ...) \
 315        no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
 316#endif
 317
 318/*
 319 * Print a one-time message (analogous to WARN_ONCE() et al):
 320 */
 321
 322#ifdef CONFIG_PRINTK
 323#define printk_once(fmt, ...)                                   \
 324({                                                              \
 325        static bool __print_once __read_mostly;                 \
 326        bool __ret_print_once = !__print_once;                  \
 327                                                                \
 328        if (!__print_once) {                                    \
 329                __print_once = true;                            \
 330                printk(fmt, ##__VA_ARGS__);                     \
 331        }                                                       \
 332        unlikely(__ret_print_once);                             \
 333})
 334#define printk_deferred_once(fmt, ...)                          \
 335({                                                              \
 336        static bool __print_once __read_mostly;                 \
 337        bool __ret_print_once = !__print_once;                  \
 338                                                                \
 339        if (!__print_once) {                                    \
 340                __print_once = true;                            \
 341                printk_deferred(fmt, ##__VA_ARGS__);            \
 342        }                                                       \
 343        unlikely(__ret_print_once);                             \
 344})
 345#else
 346#define printk_once(fmt, ...)                                   \
 347        no_printk(fmt, ##__VA_ARGS__)
 348#define printk_deferred_once(fmt, ...)                          \
 349        no_printk(fmt, ##__VA_ARGS__)
 350#endif
 351
 352#define pr_emerg_once(fmt, ...)                                 \
 353        printk_once(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__)
 354#define pr_alert_once(fmt, ...)                                 \
 355        printk_once(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__)
 356#define pr_crit_once(fmt, ...)                                  \
 357        printk_once(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__)
 358#define pr_err_once(fmt, ...)                                   \
 359        printk_once(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
 360#define pr_warn_once(fmt, ...)                                  \
 361        printk_once(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
 362#define pr_notice_once(fmt, ...)                                \
 363        printk_once(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__)
 364#define pr_info_once(fmt, ...)                                  \
 365        printk_once(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
 366#define pr_cont_once(fmt, ...)                                  \
 367        printk_once(KERN_CONT pr_fmt(fmt), ##__VA_ARGS__)
 368
 369#if defined(DEBUG)
 370#define pr_devel_once(fmt, ...)                                 \
 371        printk_once(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
 372#else
 373#define pr_devel_once(fmt, ...)                                 \
 374        no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
 375#endif
 376
 377/* If you are writing a driver, please use dev_dbg instead */
 378#if defined(DEBUG)
 379#define pr_debug_once(fmt, ...)                                 \
 380        printk_once(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
 381#else
 382#define pr_debug_once(fmt, ...)                                 \
 383        no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
 384#endif
 385
 386/*
 387 * ratelimited messages with local ratelimit_state,
 388 * no local ratelimit_state used in the !PRINTK case
 389 */
 390#ifdef CONFIG_PRINTK
 391#define printk_ratelimited(fmt, ...)                                    \
 392({                                                                      \
 393        static DEFINE_RATELIMIT_STATE(_rs,                              \
 394                                      DEFAULT_RATELIMIT_INTERVAL,       \
 395                                      DEFAULT_RATELIMIT_BURST);         \
 396                                                                        \
 397        if (__ratelimit(&_rs))                                          \
 398                printk(fmt, ##__VA_ARGS__);                             \
 399})
 400#else
 401#define printk_ratelimited(fmt, ...)                                    \
 402        no_printk(fmt, ##__VA_ARGS__)
 403#endif
 404
 405#define pr_emerg_ratelimited(fmt, ...)                                  \
 406        printk_ratelimited(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__)
 407#define pr_alert_ratelimited(fmt, ...)                                  \
 408        printk_ratelimited(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__)
 409#define pr_crit_ratelimited(fmt, ...)                                   \
 410        printk_ratelimited(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__)
 411#define pr_err_ratelimited(fmt, ...)                                    \
 412        printk_ratelimited(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
 413#define pr_warn_ratelimited(fmt, ...)                                   \
 414        printk_ratelimited(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
 415#define pr_notice_ratelimited(fmt, ...)                                 \
 416        printk_ratelimited(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__)
 417#define pr_info_ratelimited(fmt, ...)                                   \
 418        printk_ratelimited(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
 419/* no pr_cont_ratelimited, don't do that... */
 420
 421#if defined(DEBUG)
 422#define pr_devel_ratelimited(fmt, ...)                                  \
 423        printk_ratelimited(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
 424#else
 425#define pr_devel_ratelimited(fmt, ...)                                  \
 426        no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
 427#endif
 428
 429/* If you are writing a driver, please use dev_dbg instead */
 430#if defined(CONFIG_DYNAMIC_DEBUG)
 431/* descriptor check is first to prevent flooding with "callbacks suppressed" */
 432#define pr_debug_ratelimited(fmt, ...)                                  \
 433do {                                                                    \
 434        static DEFINE_RATELIMIT_STATE(_rs,                              \
 435                                      DEFAULT_RATELIMIT_INTERVAL,       \
 436                                      DEFAULT_RATELIMIT_BURST);         \
 437        DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, pr_fmt(fmt));         \
 438        if (unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT) &&        \
 439            __ratelimit(&_rs))                                          \
 440                __dynamic_pr_debug(&descriptor, pr_fmt(fmt), ##__VA_ARGS__);    \
 441} while (0)
 442#elif defined(DEBUG)
 443#define pr_debug_ratelimited(fmt, ...)                                  \
 444        printk_ratelimited(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
 445#else
 446#define pr_debug_ratelimited(fmt, ...) \
 447        no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
 448#endif
 449
 450extern const struct file_operations kmsg_fops;
 451
 452enum {
 453        DUMP_PREFIX_NONE,
 454        DUMP_PREFIX_ADDRESS,
 455        DUMP_PREFIX_OFFSET
 456};
 457extern int hex_dump_to_buffer(const void *buf, size_t len, int rowsize,
 458                              int groupsize, char *linebuf, size_t linebuflen,
 459                              bool ascii);
 460#ifdef CONFIG_PRINTK
 461extern void print_hex_dump(const char *level, const char *prefix_str,
 462                           int prefix_type, int rowsize, int groupsize,
 463                           const void *buf, size_t len, bool ascii);
 464#if defined(CONFIG_DYNAMIC_DEBUG)
 465#define print_hex_dump_bytes(prefix_str, prefix_type, buf, len) \
 466        dynamic_hex_dump(prefix_str, prefix_type, 16, 1, buf, len, true)
 467#else
 468extern void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
 469                                 const void *buf, size_t len);
 470#endif /* defined(CONFIG_DYNAMIC_DEBUG) */
 471#else
 472static inline void print_hex_dump(const char *level, const char *prefix_str,
 473                                  int prefix_type, int rowsize, int groupsize,
 474                                  const void *buf, size_t len, bool ascii)
 475{
 476}
 477static inline void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
 478                                        const void *buf, size_t len)
 479{
 480}
 481
 482#endif
 483
 484#if defined(CONFIG_DYNAMIC_DEBUG)
 485#define print_hex_dump_debug(prefix_str, prefix_type, rowsize,  \
 486                             groupsize, buf, len, ascii)        \
 487        dynamic_hex_dump(prefix_str, prefix_type, rowsize,      \
 488                         groupsize, buf, len, ascii)
 489#elif defined(DEBUG)
 490#define print_hex_dump_debug(prefix_str, prefix_type, rowsize,          \
 491                             groupsize, buf, len, ascii)                \
 492        print_hex_dump(KERN_DEBUG, prefix_str, prefix_type, rowsize,    \
 493                       groupsize, buf, len, ascii)
 494#else
 495static inline void print_hex_dump_debug(const char *prefix_str, int prefix_type,
 496                                        int rowsize, int groupsize,
 497                                        const void *buf, size_t len, bool ascii)
 498{
 499}
 500#endif
 501
 502#endif
 503