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