at v2.6.37 248 lines 7.9 kB view raw
1#ifndef __KERNEL_PRINTK__ 2#define __KERNEL_PRINTK__ 3 4extern const char linux_banner[]; 5extern const char linux_proc_banner[]; 6 7#define KERN_EMERG "<0>" /* system is unusable */ 8#define KERN_ALERT "<1>" /* action must be taken immediately */ 9#define KERN_CRIT "<2>" /* critical conditions */ 10#define KERN_ERR "<3>" /* error conditions */ 11#define KERN_WARNING "<4>" /* warning conditions */ 12#define KERN_NOTICE "<5>" /* normal but significant condition */ 13#define KERN_INFO "<6>" /* informational */ 14#define KERN_DEBUG "<7>" /* debug-level messages */ 15 16/* Use the default kernel loglevel */ 17#define KERN_DEFAULT "<d>" 18/* 19 * Annotation for a "continued" line of log printout (only done after a 20 * line that had no enclosing \n). Only to be used by core/arch code 21 * during early bootup (a continued line is not SMP-safe otherwise). 22 */ 23#define KERN_CONT "<c>" 24 25extern int console_printk[]; 26 27#define console_loglevel (console_printk[0]) 28#define default_message_loglevel (console_printk[1]) 29#define minimum_console_loglevel (console_printk[2]) 30#define default_console_loglevel (console_printk[3]) 31 32struct va_format { 33 const char *fmt; 34 va_list *va; 35}; 36 37/* 38 * FW_BUG 39 * Add this to a message where you are sure the firmware is buggy or behaves 40 * really stupid or out of spec. Be aware that the responsible BIOS developer 41 * should be able to fix this issue or at least get a concrete idea of the 42 * problem by reading your message without the need of looking at the kernel 43 * code. 44 * 45 * Use it for definite and high priority BIOS bugs. 46 * 47 * FW_WARN 48 * Use it for not that clear (e.g. could the kernel messed up things already?) 49 * and medium priority BIOS bugs. 50 * 51 * FW_INFO 52 * Use this one if you want to tell the user or vendor about something 53 * suspicious, but generally harmless related to the firmware. 54 * 55 * Use it for information or very low priority BIOS bugs. 56 */ 57#define FW_BUG "[Firmware Bug]: " 58#define FW_WARN "[Firmware Warn]: " 59#define FW_INFO "[Firmware Info]: " 60 61/* 62 * HW_ERR 63 * Add this to a message for hardware errors, so that user can report 64 * it to hardware vendor instead of LKML or software vendor. 65 */ 66#define HW_ERR "[Hardware Error]: " 67 68#ifdef CONFIG_PRINTK 69asmlinkage int vprintk(const char *fmt, va_list args) 70 __attribute__ ((format (printf, 1, 0))); 71asmlinkage int printk(const char * fmt, ...) 72 __attribute__ ((format (printf, 1, 2))) __cold; 73 74/* 75 * Please don't use printk_ratelimit(), because it shares ratelimiting state 76 * with all other unrelated printk_ratelimit() callsites. Instead use 77 * printk_ratelimited() or plain old __ratelimit(). 78 */ 79extern int __printk_ratelimit(const char *func); 80#define printk_ratelimit() __printk_ratelimit(__func__) 81extern bool printk_timed_ratelimit(unsigned long *caller_jiffies, 82 unsigned int interval_msec); 83 84extern int printk_delay_msec; 85extern int dmesg_restrict; 86 87/* 88 * Print a one-time message (analogous to WARN_ONCE() et al): 89 */ 90#define printk_once(x...) ({ \ 91 static bool __print_once; \ 92 \ 93 if (!__print_once) { \ 94 __print_once = true; \ 95 printk(x); \ 96 } \ 97}) 98 99void log_buf_kexec_setup(void); 100#else 101static inline int vprintk(const char *s, va_list args) 102 __attribute__ ((format (printf, 1, 0))); 103static inline int vprintk(const char *s, va_list args) { return 0; } 104static inline int printk(const char *s, ...) 105 __attribute__ ((format (printf, 1, 2))); 106static inline int __cold printk(const char *s, ...) { return 0; } 107static inline int printk_ratelimit(void) { return 0; } 108static inline bool printk_timed_ratelimit(unsigned long *caller_jiffies, \ 109 unsigned int interval_msec) \ 110 { return false; } 111 112/* No effect, but we still get type checking even in the !PRINTK case: */ 113#define printk_once(x...) printk(x) 114 115static inline void log_buf_kexec_setup(void) 116{ 117} 118#endif 119 120/* 121 * Dummy printk for disabled debugging statements to use whilst maintaining 122 * gcc's format and side-effect checking. 123 */ 124static inline __attribute__ ((format (printf, 1, 2))) 125int no_printk(const char *s, ...) { return 0; } 126 127extern int printk_needs_cpu(int cpu); 128extern void printk_tick(void); 129 130extern void asmlinkage __attribute__((format(printf, 1, 2))) 131 early_printk(const char *fmt, ...); 132 133static inline void console_silent(void) 134{ 135 console_loglevel = 0; 136} 137 138static inline void console_verbose(void) 139{ 140 if (console_loglevel) 141 console_loglevel = 15; 142} 143 144extern void dump_stack(void) __cold; 145 146enum { 147 DUMP_PREFIX_NONE, 148 DUMP_PREFIX_ADDRESS, 149 DUMP_PREFIX_OFFSET 150}; 151extern void hex_dump_to_buffer(const void *buf, size_t len, 152 int rowsize, int groupsize, 153 char *linebuf, size_t linebuflen, bool ascii); 154extern void print_hex_dump(const char *level, const char *prefix_str, 155 int prefix_type, int rowsize, int groupsize, 156 const void *buf, size_t len, bool ascii); 157extern void print_hex_dump_bytes(const char *prefix_str, int prefix_type, 158 const void *buf, size_t len); 159 160#ifndef pr_fmt 161#define pr_fmt(fmt) fmt 162#endif 163 164#define pr_emerg(fmt, ...) \ 165 printk(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__) 166#define pr_alert(fmt, ...) \ 167 printk(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__) 168#define pr_crit(fmt, ...) \ 169 printk(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__) 170#define pr_err(fmt, ...) \ 171 printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__) 172#define pr_warning(fmt, ...) \ 173 printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__) 174#define pr_warn pr_warning 175#define pr_notice(fmt, ...) \ 176 printk(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__) 177#define pr_info(fmt, ...) \ 178 printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__) 179#define pr_cont(fmt, ...) \ 180 printk(KERN_CONT fmt, ##__VA_ARGS__) 181 182/* pr_devel() should produce zero code unless DEBUG is defined */ 183#ifdef DEBUG 184#define pr_devel(fmt, ...) \ 185 printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) 186#else 187#define pr_devel(fmt, ...) \ 188 ({ if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); 0; }) 189#endif 190 191/* If you are writing a driver, please use dev_dbg instead */ 192#if defined(DEBUG) 193#define pr_debug(fmt, ...) \ 194 printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) 195#elif defined(CONFIG_DYNAMIC_DEBUG) 196/* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */ 197#define pr_debug(fmt, ...) \ 198 dynamic_pr_debug(fmt, ##__VA_ARGS__) 199#else 200#define pr_debug(fmt, ...) \ 201 ({ if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); 0; }) 202#endif 203 204/* 205 * ratelimited messages with local ratelimit_state, 206 * no local ratelimit_state used in the !PRINTK case 207 */ 208#ifdef CONFIG_PRINTK 209#define printk_ratelimited(fmt, ...) ({ \ 210 static DEFINE_RATELIMIT_STATE(_rs, \ 211 DEFAULT_RATELIMIT_INTERVAL, \ 212 DEFAULT_RATELIMIT_BURST); \ 213 \ 214 if (__ratelimit(&_rs)) \ 215 printk(fmt, ##__VA_ARGS__); \ 216}) 217#else 218/* No effect, but we still get type checking even in the !PRINTK case: */ 219#define printk_ratelimited printk 220#endif 221 222#define pr_emerg_ratelimited(fmt, ...) \ 223 printk_ratelimited(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__) 224#define pr_alert_ratelimited(fmt, ...) \ 225 printk_ratelimited(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__) 226#define pr_crit_ratelimited(fmt, ...) \ 227 printk_ratelimited(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__) 228#define pr_err_ratelimited(fmt, ...) \ 229 printk_ratelimited(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__) 230#define pr_warning_ratelimited(fmt, ...) \ 231 printk_ratelimited(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__) 232#define pr_warn_ratelimited pr_warning_ratelimited 233#define pr_notice_ratelimited(fmt, ...) \ 234 printk_ratelimited(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__) 235#define pr_info_ratelimited(fmt, ...) \ 236 printk_ratelimited(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__) 237/* no pr_cont_ratelimited, don't do that... */ 238/* If you are writing a driver, please use dev_dbg instead */ 239#if defined(DEBUG) 240#define pr_debug_ratelimited(fmt, ...) \ 241 printk_ratelimited(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) 242#else 243#define pr_debug_ratelimited(fmt, ...) \ 244 ({ if (0) printk_ratelimited(KERN_DEBUG pr_fmt(fmt), \ 245 ##__VA_ARGS__); 0; }) 246#endif 247 248#endif