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