Line data Source code
1 : /* SPDX-License-Identifier: GPL-2.0 */
2 : #ifndef __KERNEL_PRINTK__
3 : #define __KERNEL_PRINTK__
4 :
5 : #include <stdarg.h>
6 : #include <linux/init.h>
7 : #include <linux/kern_levels.h>
8 : #include <linux/linkage.h>
9 : #include <linux/cache.h>
10 : #include <linux/ratelimit_types.h>
11 :
12 : extern const char linux_banner[];
13 : extern const char linux_proc_banner[];
14 :
15 : extern int oops_in_progress; /* If set, an oops, panic(), BUG() or die() is in progress */
16 :
17 : #define PRINTK_MAX_SINGLE_HEADER_LEN 2
18 :
19 1026 : static inline int printk_get_level(const char *buffer)
20 : {
21 1026 : if (buffer[0] == KERN_SOH_ASCII && buffer[1]) {
22 438 : switch (buffer[1]) {
23 438 : case '0' ... '7':
24 : case 'c': /* KERN_CONT */
25 438 : return buffer[1];
26 : }
27 : }
28 : return 0;
29 : }
30 :
31 0 : static inline const char *printk_skip_level(const char *buffer)
32 : {
33 0 : if (printk_get_level(buffer))
34 0 : return buffer + 2;
35 :
36 : return buffer;
37 : }
38 :
39 : static inline const char *printk_skip_headers(const char *buffer)
40 : {
41 : while (printk_get_level(buffer))
42 : buffer = printk_skip_level(buffer);
43 :
44 : return buffer;
45 : }
46 :
47 : #define CONSOLE_EXT_LOG_MAX 8192
48 :
49 : /* printk's without a loglevel use this.. */
50 : #define MESSAGE_LOGLEVEL_DEFAULT CONFIG_MESSAGE_LOGLEVEL_DEFAULT
51 :
52 : /* We show everything that is MORE important than this.. */
53 : #define CONSOLE_LOGLEVEL_SILENT 0 /* Mum's the word */
54 : #define CONSOLE_LOGLEVEL_MIN 1 /* Minimum loglevel we let people use */
55 : #define CONSOLE_LOGLEVEL_DEBUG 10 /* issue debug messages */
56 : #define CONSOLE_LOGLEVEL_MOTORMOUTH 15 /* You can't shut this one up */
57 :
58 : /*
59 : * Default used to be hard-coded at 7, quiet used to be hardcoded at 4,
60 : * we're now allowing both to be set from kernel config.
61 : */
62 : #define CONSOLE_LOGLEVEL_DEFAULT CONFIG_CONSOLE_LOGLEVEL_DEFAULT
63 : #define CONSOLE_LOGLEVEL_QUIET CONFIG_CONSOLE_LOGLEVEL_QUIET
64 :
65 : extern int console_printk[];
66 :
67 : #define console_loglevel (console_printk[0])
68 : #define default_message_loglevel (console_printk[1])
69 : #define minimum_console_loglevel (console_printk[2])
70 : #define default_console_loglevel (console_printk[3])
71 :
72 : static inline void console_silent(void)
73 : {
74 : console_loglevel = CONSOLE_LOGLEVEL_SILENT;
75 : }
76 :
77 0 : static inline void console_verbose(void)
78 : {
79 0 : if (console_loglevel)
80 0 : console_loglevel = CONSOLE_LOGLEVEL_MOTORMOUTH;
81 0 : }
82 :
83 : /* strlen("ratelimit") + 1 */
84 : #define DEVKMSG_STR_MAX_SIZE 10
85 : extern char devkmsg_log_str[];
86 : struct ctl_table;
87 :
88 : extern int suppress_printk;
89 :
90 : struct va_format {
91 : const char *fmt;
92 : va_list *va;
93 : };
94 :
95 : /*
96 : * FW_BUG
97 : * Add this to a message where you are sure the firmware is buggy or behaves
98 : * really stupid or out of spec. Be aware that the responsible BIOS developer
99 : * should be able to fix this issue or at least get a concrete idea of the
100 : * problem by reading your message without the need of looking at the kernel
101 : * code.
102 : *
103 : * Use it for definite and high priority BIOS bugs.
104 : *
105 : * FW_WARN
106 : * Use it for not that clear (e.g. could the kernel messed up things already?)
107 : * and medium priority BIOS bugs.
108 : *
109 : * FW_INFO
110 : * Use this one if you want to tell the user or vendor about something
111 : * suspicious, but generally harmless related to the firmware.
112 : *
113 : * Use it for information or very low priority BIOS bugs.
114 : */
115 : #define FW_BUG "[Firmware Bug]: "
116 : #define FW_WARN "[Firmware Warn]: "
117 : #define FW_INFO "[Firmware Info]: "
118 :
119 : /*
120 : * HW_ERR
121 : * Add this to a message for hardware errors, so that user can report
122 : * it to hardware vendor instead of LKML or software vendor.
123 : */
124 : #define HW_ERR "[Hardware Error]: "
125 :
126 : /*
127 : * DEPRECATED
128 : * Add this to a message whenever you want to warn user space about the use
129 : * of a deprecated aspect of an API so they can stop using it
130 : */
131 : #define DEPRECATED "[Deprecated]: "
132 :
133 : /*
134 : * Dummy printk for disabled debugging statements to use whilst maintaining
135 : * gcc's format checking.
136 : */
137 : #define no_printk(fmt, ...) \
138 : ({ \
139 : if (0) \
140 : printk(fmt, ##__VA_ARGS__); \
141 : 0; \
142 : })
143 :
144 : #ifdef CONFIG_EARLY_PRINTK
145 : extern asmlinkage __printf(1, 2)
146 : void early_printk(const char *fmt, ...);
147 : #else
148 : static inline __printf(1, 2) __cold
149 : void early_printk(const char *s, ...) { }
150 : #endif
151 :
152 : #ifdef CONFIG_PRINTK_NMI
153 : extern void printk_nmi_enter(void);
154 : extern void printk_nmi_exit(void);
155 : extern void printk_nmi_direct_enter(void);
156 : extern void printk_nmi_direct_exit(void);
157 : #else
158 : static inline void printk_nmi_enter(void) { }
159 : static inline void printk_nmi_exit(void) { }
160 : static inline void printk_nmi_direct_enter(void) { }
161 : static inline void printk_nmi_direct_exit(void) { }
162 : #endif /* PRINTK_NMI */
163 :
164 : struct dev_printk_info;
165 :
166 : #ifdef CONFIG_PRINTK
167 : asmlinkage __printf(4, 0)
168 : int vprintk_emit(int facility, int level,
169 : const struct dev_printk_info *dev_info,
170 : const char *fmt, va_list args);
171 :
172 : asmlinkage __printf(1, 0)
173 : int vprintk(const char *fmt, va_list args);
174 :
175 : asmlinkage __printf(1, 2) __cold
176 : int printk(const char *fmt, ...);
177 :
178 : /*
179 : * Special printk facility for scheduler/timekeeping use only, _DO_NOT_USE_ !
180 : */
181 : __printf(1, 2) __cold int printk_deferred(const char *fmt, ...);
182 :
183 : /*
184 : * Please don't use printk_ratelimit(), because it shares ratelimiting state
185 : * with all other unrelated printk_ratelimit() callsites. Instead use
186 : * printk_ratelimited() or plain old __ratelimit().
187 : */
188 : extern int __printk_ratelimit(const char *func);
189 : #define printk_ratelimit() __printk_ratelimit(__func__)
190 : extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,
191 : unsigned int interval_msec);
192 :
193 : extern int printk_delay_msec;
194 : extern int dmesg_restrict;
195 :
196 : extern int
197 : devkmsg_sysctl_set_loglvl(struct ctl_table *table, int write, void *buf,
198 : size_t *lenp, loff_t *ppos);
199 :
200 : extern void wake_up_klogd(void);
201 :
202 : char *log_buf_addr_get(void);
203 : u32 log_buf_len_get(void);
204 : void log_buf_vmcoreinfo_setup(void);
205 : void __init setup_log_buf(int early);
206 : __printf(1, 2) void dump_stack_set_arch_desc(const char *fmt, ...);
207 : void dump_stack_print_info(const char *log_lvl);
208 : void show_regs_print_info(const char *log_lvl);
209 : extern asmlinkage void dump_stack(void) __cold;
210 : extern void printk_safe_flush(void);
211 : extern void printk_safe_flush_on_panic(void);
212 : #else
213 : static inline __printf(1, 0)
214 : int vprintk(const char *s, va_list args)
215 : {
216 : return 0;
217 : }
218 : static inline __printf(1, 2) __cold
219 : int printk(const char *s, ...)
220 : {
221 : return 0;
222 : }
223 : static inline __printf(1, 2) __cold
224 : int printk_deferred(const char *s, ...)
225 : {
226 : return 0;
227 : }
228 : static inline int printk_ratelimit(void)
229 : {
230 : return 0;
231 : }
232 : static inline bool printk_timed_ratelimit(unsigned long *caller_jiffies,
233 : unsigned int interval_msec)
234 : {
235 : return false;
236 : }
237 :
238 : static inline void wake_up_klogd(void)
239 : {
240 : }
241 :
242 : static inline char *log_buf_addr_get(void)
243 : {
244 : return NULL;
245 : }
246 :
247 : static inline u32 log_buf_len_get(void)
248 : {
249 : return 0;
250 : }
251 :
252 : static inline void log_buf_vmcoreinfo_setup(void)
253 : {
254 : }
255 :
256 : static inline void setup_log_buf(int early)
257 : {
258 : }
259 :
260 : static inline __printf(1, 2) void dump_stack_set_arch_desc(const char *fmt, ...)
261 : {
262 : }
263 :
264 : static inline void dump_stack_print_info(const char *log_lvl)
265 : {
266 : }
267 :
268 : static inline void show_regs_print_info(const char *log_lvl)
269 : {
270 : }
271 :
272 : static inline void dump_stack(void)
273 : {
274 : }
275 :
276 : static inline void printk_safe_flush(void)
277 : {
278 : }
279 :
280 : static inline void printk_safe_flush_on_panic(void)
281 : {
282 : }
283 : #endif
284 :
285 : extern int kptr_restrict;
286 :
287 : /**
288 : * pr_fmt - used by the pr_*() macros to generate the printk format string
289 : * @fmt: format string passed from a pr_*() macro
290 : *
291 : * This macro can be used to generate a unified format string for pr_*()
292 : * macros. A common use is to prefix all pr_*() messages in a file with a common
293 : * string. For example, defining this at the top of a source file:
294 : *
295 : * #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
296 : *
297 : * would prefix all pr_info, pr_emerg... messages in the file with the module
298 : * name.
299 : */
300 : #ifndef pr_fmt
301 : #define pr_fmt(fmt) fmt
302 : #endif
303 :
304 : /**
305 : * pr_emerg - Print an emergency-level message
306 : * @fmt: format string
307 : * @...: arguments for the format string
308 : *
309 : * This macro expands to a printk with KERN_EMERG loglevel. It uses pr_fmt() to
310 : * generate the format string.
311 : */
312 : #define pr_emerg(fmt, ...) \
313 : printk(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__)
314 : /**
315 : * pr_alert - Print an alert-level message
316 : * @fmt: format string
317 : * @...: arguments for the format string
318 : *
319 : * This macro expands to a printk with KERN_ALERT loglevel. It uses pr_fmt() to
320 : * generate the format string.
321 : */
322 : #define pr_alert(fmt, ...) \
323 : printk(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__)
324 : /**
325 : * pr_crit - Print a critical-level message
326 : * @fmt: format string
327 : * @...: arguments for the format string
328 : *
329 : * This macro expands to a printk with KERN_CRIT loglevel. It uses pr_fmt() to
330 : * generate the format string.
331 : */
332 : #define pr_crit(fmt, ...) \
333 : printk(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__)
334 : /**
335 : * pr_err - Print an error-level message
336 : * @fmt: format string
337 : * @...: arguments for the format string
338 : *
339 : * This macro expands to a printk with KERN_ERR loglevel. It uses pr_fmt() to
340 : * generate the format string.
341 : */
342 : #define pr_err(fmt, ...) \
343 : printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
344 : /**
345 : * pr_warn - Print a warning-level message
346 : * @fmt: format string
347 : * @...: arguments for the format string
348 : *
349 : * This macro expands to a printk with KERN_WARNING loglevel. It uses pr_fmt()
350 : * to generate the format string.
351 : */
352 : #define pr_warn(fmt, ...) \
353 : printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
354 : /**
355 : * pr_notice - Print a notice-level message
356 : * @fmt: format string
357 : * @...: arguments for the format string
358 : *
359 : * This macro expands to a printk with KERN_NOTICE loglevel. It uses pr_fmt() to
360 : * generate the format string.
361 : */
362 : #define pr_notice(fmt, ...) \
363 : printk(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__)
364 : /**
365 : * pr_info - Print an info-level message
366 : * @fmt: format string
367 : * @...: arguments for the format string
368 : *
369 : * This macro expands to a printk with KERN_INFO loglevel. It uses pr_fmt() to
370 : * generate the format string.
371 : */
372 : #define pr_info(fmt, ...) \
373 : printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
374 :
375 : /**
376 : * pr_cont - Continues a previous log message in the same line.
377 : * @fmt: format string
378 : * @...: arguments for the format string
379 : *
380 : * This macro expands to a printk with KERN_CONT loglevel. It should only be
381 : * used when continuing a log message with no newline ('\n') enclosed. Otherwise
382 : * it defaults back to KERN_DEFAULT loglevel.
383 : */
384 : #define pr_cont(fmt, ...) \
385 : printk(KERN_CONT fmt, ##__VA_ARGS__)
386 :
387 : /**
388 : * pr_devel - Print a debug-level message conditionally
389 : * @fmt: format string
390 : * @...: arguments for the format string
391 : *
392 : * This macro expands to a printk with KERN_DEBUG loglevel if DEBUG is
393 : * defined. Otherwise it does nothing.
394 : *
395 : * It uses pr_fmt() to generate the format string.
396 : */
397 : #ifdef DEBUG
398 : #define pr_devel(fmt, ...) \
399 : printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
400 : #else
401 : #define pr_devel(fmt, ...) \
402 : no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
403 : #endif
404 :
405 :
406 : /* If you are writing a driver, please use dev_dbg instead */
407 : #if defined(CONFIG_DYNAMIC_DEBUG) || \
408 : (defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
409 : #include <linux/dynamic_debug.h>
410 :
411 : /**
412 : * pr_debug - Print a debug-level message conditionally
413 : * @fmt: format string
414 : * @...: arguments for the format string
415 : *
416 : * This macro expands to dynamic_pr_debug() if CONFIG_DYNAMIC_DEBUG is
417 : * set. Otherwise, if DEBUG is defined, it's equivalent to a printk with
418 : * KERN_DEBUG loglevel. If DEBUG is not defined it does nothing.
419 : *
420 : * It uses pr_fmt() to generate the format string (dynamic_pr_debug() uses
421 : * pr_fmt() internally).
422 : */
423 : #define pr_debug(fmt, ...) \
424 : dynamic_pr_debug(fmt, ##__VA_ARGS__)
425 : #elif defined(DEBUG)
426 : #define pr_debug(fmt, ...) \
427 : printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
428 : #else
429 : #define pr_debug(fmt, ...) \
430 : no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
431 : #endif
432 :
433 : /*
434 : * Print a one-time message (analogous to WARN_ONCE() et al):
435 : */
436 :
437 : #ifdef CONFIG_PRINTK
438 : #define printk_once(fmt, ...) \
439 : ({ \
440 : static bool __section(".data.once") __print_once; \
441 : bool __ret_print_once = !__print_once; \
442 : \
443 : if (!__print_once) { \
444 : __print_once = true; \
445 : printk(fmt, ##__VA_ARGS__); \
446 : } \
447 : unlikely(__ret_print_once); \
448 : })
449 : #define printk_deferred_once(fmt, ...) \
450 : ({ \
451 : static bool __section(".data.once") __print_once; \
452 : bool __ret_print_once = !__print_once; \
453 : \
454 : if (!__print_once) { \
455 : __print_once = true; \
456 : printk_deferred(fmt, ##__VA_ARGS__); \
457 : } \
458 : unlikely(__ret_print_once); \
459 : })
460 : #else
461 : #define printk_once(fmt, ...) \
462 : no_printk(fmt, ##__VA_ARGS__)
463 : #define printk_deferred_once(fmt, ...) \
464 : no_printk(fmt, ##__VA_ARGS__)
465 : #endif
466 :
467 : #define pr_emerg_once(fmt, ...) \
468 : printk_once(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__)
469 : #define pr_alert_once(fmt, ...) \
470 : printk_once(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__)
471 : #define pr_crit_once(fmt, ...) \
472 : printk_once(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__)
473 : #define pr_err_once(fmt, ...) \
474 : printk_once(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
475 : #define pr_warn_once(fmt, ...) \
476 : printk_once(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
477 : #define pr_notice_once(fmt, ...) \
478 : printk_once(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__)
479 : #define pr_info_once(fmt, ...) \
480 : printk_once(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
481 : /* no pr_cont_once, don't do that... */
482 :
483 : #if defined(DEBUG)
484 : #define pr_devel_once(fmt, ...) \
485 : printk_once(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
486 : #else
487 : #define pr_devel_once(fmt, ...) \
488 : no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
489 : #endif
490 :
491 : /* If you are writing a driver, please use dev_dbg instead */
492 : #if defined(DEBUG)
493 : #define pr_debug_once(fmt, ...) \
494 : printk_once(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
495 : #else
496 : #define pr_debug_once(fmt, ...) \
497 : no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
498 : #endif
499 :
500 : /*
501 : * ratelimited messages with local ratelimit_state,
502 : * no local ratelimit_state used in the !PRINTK case
503 : */
504 : #ifdef CONFIG_PRINTK
505 : #define printk_ratelimited(fmt, ...) \
506 : ({ \
507 : static DEFINE_RATELIMIT_STATE(_rs, \
508 : DEFAULT_RATELIMIT_INTERVAL, \
509 : DEFAULT_RATELIMIT_BURST); \
510 : \
511 : if (__ratelimit(&_rs)) \
512 : printk(fmt, ##__VA_ARGS__); \
513 : })
514 : #else
515 : #define printk_ratelimited(fmt, ...) \
516 : no_printk(fmt, ##__VA_ARGS__)
517 : #endif
518 :
519 : #define pr_emerg_ratelimited(fmt, ...) \
520 : printk_ratelimited(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__)
521 : #define pr_alert_ratelimited(fmt, ...) \
522 : printk_ratelimited(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__)
523 : #define pr_crit_ratelimited(fmt, ...) \
524 : printk_ratelimited(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__)
525 : #define pr_err_ratelimited(fmt, ...) \
526 : printk_ratelimited(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
527 : #define pr_warn_ratelimited(fmt, ...) \
528 : printk_ratelimited(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
529 : #define pr_notice_ratelimited(fmt, ...) \
530 : printk_ratelimited(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__)
531 : #define pr_info_ratelimited(fmt, ...) \
532 : printk_ratelimited(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
533 : /* no pr_cont_ratelimited, don't do that... */
534 :
535 : #if defined(DEBUG)
536 : #define pr_devel_ratelimited(fmt, ...) \
537 : printk_ratelimited(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
538 : #else
539 : #define pr_devel_ratelimited(fmt, ...) \
540 : no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
541 : #endif
542 :
543 : /* If you are writing a driver, please use dev_dbg instead */
544 : #if defined(CONFIG_DYNAMIC_DEBUG) || \
545 : (defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
546 : /* descriptor check is first to prevent flooding with "callbacks suppressed" */
547 : #define pr_debug_ratelimited(fmt, ...) \
548 : do { \
549 : static DEFINE_RATELIMIT_STATE(_rs, \
550 : DEFAULT_RATELIMIT_INTERVAL, \
551 : DEFAULT_RATELIMIT_BURST); \
552 : DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, pr_fmt(fmt)); \
553 : if (DYNAMIC_DEBUG_BRANCH(descriptor) && \
554 : __ratelimit(&_rs)) \
555 : __dynamic_pr_debug(&descriptor, pr_fmt(fmt), ##__VA_ARGS__); \
556 : } while (0)
557 : #elif defined(DEBUG)
558 : #define pr_debug_ratelimited(fmt, ...) \
559 : printk_ratelimited(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
560 : #else
561 : #define pr_debug_ratelimited(fmt, ...) \
562 : no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
563 : #endif
564 :
565 : extern const struct file_operations kmsg_fops;
566 :
567 : enum {
568 : DUMP_PREFIX_NONE,
569 : DUMP_PREFIX_ADDRESS,
570 : DUMP_PREFIX_OFFSET
571 : };
572 : extern int hex_dump_to_buffer(const void *buf, size_t len, int rowsize,
573 : int groupsize, char *linebuf, size_t linebuflen,
574 : bool ascii);
575 : #ifdef CONFIG_PRINTK
576 : extern void print_hex_dump(const char *level, const char *prefix_str,
577 : int prefix_type, int rowsize, int groupsize,
578 : const void *buf, size_t len, bool ascii);
579 : #else
580 : static inline void print_hex_dump(const char *level, const char *prefix_str,
581 : int prefix_type, int rowsize, int groupsize,
582 : const void *buf, size_t len, bool ascii)
583 : {
584 : }
585 : static inline void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
586 : const void *buf, size_t len)
587 : {
588 : }
589 :
590 : #endif
591 :
592 : #if defined(CONFIG_DYNAMIC_DEBUG) || \
593 : (defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
594 : #define print_hex_dump_debug(prefix_str, prefix_type, rowsize, \
595 : groupsize, buf, len, ascii) \
596 : dynamic_hex_dump(prefix_str, prefix_type, rowsize, \
597 : groupsize, buf, len, ascii)
598 : #elif defined(DEBUG)
599 : #define print_hex_dump_debug(prefix_str, prefix_type, rowsize, \
600 : groupsize, buf, len, ascii) \
601 : print_hex_dump(KERN_DEBUG, prefix_str, prefix_type, rowsize, \
602 : groupsize, buf, len, ascii)
603 : #else
604 : static inline void print_hex_dump_debug(const char *prefix_str, int prefix_type,
605 : int rowsize, int groupsize,
606 : const void *buf, size_t len, bool ascii)
607 : {
608 : }
609 : #endif
610 :
611 : /**
612 : * print_hex_dump_bytes - shorthand form of print_hex_dump() with default params
613 : * @prefix_str: string to prefix each line with;
614 : * caller supplies trailing spaces for alignment if desired
615 : * @prefix_type: controls whether prefix of an offset, address, or none
616 : * is printed (%DUMP_PREFIX_OFFSET, %DUMP_PREFIX_ADDRESS, %DUMP_PREFIX_NONE)
617 : * @buf: data blob to dump
618 : * @len: number of bytes in the @buf
619 : *
620 : * Calls print_hex_dump(), with log level of KERN_DEBUG,
621 : * rowsize of 16, groupsize of 1, and ASCII output included.
622 : */
623 : #define print_hex_dump_bytes(prefix_str, prefix_type, buf, len) \
624 : print_hex_dump_debug(prefix_str, prefix_type, 16, 1, buf, len, true)
625 :
626 : #endif
|