1 #ifndef __KERNEL_PRINTK__ 2 #define __KERNEL_PRINTK__ 3 4 #include <linux/init.h> 5 6 extern const char linux_banner[]; 7 extern 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 27 extern 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 34 static inline void console_silent(void) 35 { 36 console_loglevel = 0; 37 } 38 39 static inline void console_verbose(void) 40 { 41 if (console_loglevel) 42 console_loglevel = 15; 43 } 44 45 struct 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 */ 85 static inline __printf(1, 2) 86 int no_printk(const char *fmt, ...) 87 { 88 return 0; 89 } 90 91 extern asmlinkage __printf(1, 2) 92 void early_printk(const char *fmt, ...); 93 94 extern int printk_needs_cpu(int cpu); 95 extern void printk_tick(void); 96 97 #ifdef CONFIG_PRINTK 98 asmlinkage __printf(1, 0) 99 int vprintk(const char *fmt, va_list args); 100 asmlinkage __printf(1, 2) __cold 101 int printk(const char *fmt, ...); 102 103 /* 104 * Please don't use printk_ratelimit(), because it shares ratelimiting state 105 * with all other unrelated printk_ratelimit() callsites. Instead use 106 * printk_ratelimited() or plain old __ratelimit(). 107 */ 108 extern int __printk_ratelimit(const char *func); 109 #define printk_ratelimit() __printk_ratelimit(__func__) 110 extern bool printk_timed_ratelimit(unsigned long *caller_jiffies, 111 unsigned int interval_msec); 112 113 extern int printk_delay_msec; 114 extern int dmesg_restrict; 115 extern int kptr_restrict; 116 117 void log_buf_kexec_setup(void); 118 void __init setup_log_buf(int early); 119 #else 120 static inline __printf(1, 0) 121 int vprintk(const char *s, va_list args) 122 { 123 return 0; 124 } 125 static inline __printf(1, 2) __cold 126 int printk(const char *s, ...) 127 { 128 return 0; 129 } 130 static inline int printk_ratelimit(void) 131 { 132 return 0; 133 } 134 static inline bool printk_timed_ratelimit(unsigned long *caller_jiffies, 135 unsigned int interval_msec) 136 { 137 return false; 138 } 139 140 static inline void log_buf_kexec_setup(void) 141 { 142 } 143 144 static inline void setup_log_buf(int early) 145 { 146 } 147 #endif 148 149 extern void dump_stack(void) __cold; 150 151 #ifndef pr_fmt 152 #define pr_fmt(fmt) fmt 153 #endif 154 155 #define pr_emerg(fmt, ...) \ 156 printk(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__) 157 #define pr_alert(fmt, ...) \ 158 printk(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__) 159 #define pr_crit(fmt, ...) \ 160 printk(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__) 161 #define pr_err(fmt, ...) \ 162 printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__) 163 #define pr_warning(fmt, ...) \ 164 printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__) 165 #define pr_warn pr_warning 166 #define pr_notice(fmt, ...) \ 167 printk(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__) 168 #define pr_info(fmt, ...) \ 169 printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__) 170 #define pr_cont(fmt, ...) \ 171 printk(KERN_CONT fmt, ##__VA_ARGS__) 172 173 /* pr_devel() should produce zero code unless DEBUG is defined */ 174 #ifdef DEBUG 175 #define pr_devel(fmt, ...) \ 176 printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) 177 #else 178 #define pr_devel(fmt, ...) \ 179 no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) 180 #endif 181 182 /* If you are writing a driver, please use dev_dbg instead */ 183 #if defined(DEBUG) 184 #define pr_debug(fmt, ...) \ 185 printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) 186 #elif defined(CONFIG_DYNAMIC_DEBUG) 187 /* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */ 188 #define pr_debug(fmt, ...) \ 189 dynamic_pr_debug(fmt, ##__VA_ARGS__) 190 #else 191 #define pr_debug(fmt, ...) \ 192 no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) 193 #endif 194 195 /* 196 * Print a one-time message (analogous to WARN_ONCE() et al): 197 */ 198 199 #ifdef CONFIG_PRINTK 200 #define printk_once(fmt, ...) \ 201 ({ \ 202 static bool __print_once; \ 203 \ 204 if (!__print_once) { \ 205 __print_once = true; \ 206 printk(fmt, ##__VA_ARGS__); \ 207 } \ 208 }) 209 #else 210 #define printk_once(fmt, ...) \ 211 no_printk(fmt, ##__VA_ARGS__) 212 #endif 213 214 #define pr_emerg_once(fmt, ...) \ 215 printk_once(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__) 216 #define pr_alert_once(fmt, ...) \ 217 printk_once(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__) 218 #define pr_crit_once(fmt, ...) \ 219 printk_once(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__) 220 #define pr_err_once(fmt, ...) \ 221 printk_once(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__) 222 #define pr_warn_once(fmt, ...) \ 223 printk_once(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__) 224 #define pr_notice_once(fmt, ...) \ 225 printk_once(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__) 226 #define pr_info_once(fmt, ...) \ 227 printk_once(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__) 228 #define pr_cont_once(fmt, ...) \ 229 printk_once(KERN_CONT pr_fmt(fmt), ##__VA_ARGS__) 230 /* If you are writing a driver, please use dev_dbg instead */ 231 #if defined(DEBUG) 232 #define pr_debug_once(fmt, ...) \ 233 printk_once(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) 234 #else 235 #define pr_debug_once(fmt, ...) \ 236 no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) 237 #endif 238 239 /* 240 * ratelimited messages with local ratelimit_state, 241 * no local ratelimit_state used in the !PRINTK case 242 */ 243 #ifdef CONFIG_PRINTK 244 #define printk_ratelimited(fmt, ...) \ 245 ({ \ 246 static DEFINE_RATELIMIT_STATE(_rs, \ 247 DEFAULT_RATELIMIT_INTERVAL, \ 248 DEFAULT_RATELIMIT_BURST); \ 249 \ 250 if (__ratelimit(&_rs)) \ 251 printk(fmt, ##__VA_ARGS__); \ 252 }) 253 #else 254 #define printk_ratelimited(fmt, ...) \ 255 no_printk(fmt, ##__VA_ARGS__) 256 #endif 257 258 #define pr_emerg_ratelimited(fmt, ...) \ 259 printk_ratelimited(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__) 260 #define pr_alert_ratelimited(fmt, ...) \ 261 printk_ratelimited(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__) 262 #define pr_crit_ratelimited(fmt, ...) \ 263 printk_ratelimited(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__) 264 #define pr_err_ratelimited(fmt, ...) \ 265 printk_ratelimited(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__) 266 #define pr_warn_ratelimited(fmt, ...) \ 267 printk_ratelimited(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__) 268 #define pr_notice_ratelimited(fmt, ...) \ 269 printk_ratelimited(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__) 270 #define pr_info_ratelimited(fmt, ...) \ 271 printk_ratelimited(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__) 272 /* no pr_cont_ratelimited, don't do that... */ 273 /* If you are writing a driver, please use dev_dbg instead */ 274 #if defined(DEBUG) 275 #define pr_debug_ratelimited(fmt, ...) \ 276 printk_ratelimited(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) 277 #else 278 #define pr_debug_ratelimited(fmt, ...) \ 279 no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) 280 #endif 281 282 enum { 283 DUMP_PREFIX_NONE, 284 DUMP_PREFIX_ADDRESS, 285 DUMP_PREFIX_OFFSET 286 }; 287 extern void hex_dump_to_buffer(const void *buf, size_t len, 288 int rowsize, int groupsize, 289 char *linebuf, size_t linebuflen, bool ascii); 290 #ifdef CONFIG_PRINTK 291 extern void print_hex_dump(const char *level, const char *prefix_str, 292 int prefix_type, int rowsize, int groupsize, 293 const void *buf, size_t len, bool ascii); 294 extern void print_hex_dump_bytes(const char *prefix_str, int prefix_type, 295 const void *buf, size_t len); 296 #else 297 static inline void print_hex_dump(const char *level, const char *prefix_str, 298 int prefix_type, int rowsize, int groupsize, 299 const void *buf, size_t len, bool ascii) 300 { 301 } 302 static inline void print_hex_dump_bytes(const char *prefix_str, int prefix_type, 303 const void *buf, size_t len) 304 { 305 } 306 307 #endif 308 309 #endif 310