@sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget*/translations/zh_CN/core-api/printk-basicsmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/zh_TW/core-api/printk-basicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/it_IT/core-api/printk-basicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/ja_JP/core-api/printk-basicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/ko_KR/core-api/printk-basicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/sp_SP/core-api/printk-basicsmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhD/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics.rsthKubhsection)}(hhh](htitle)}(hMessage logging with printkh]hMessage logging with printk}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hX*printk() is one of the most widely known functions in the Linux kernel. It's the standard tool we have for printing messages and usually the most basic way of tracing and debugging. If you're familiar with printf(3) you can tell printk() is based on it, although it has some functional differences:h]hX.printk() is one of the most widely known functions in the Linux kernel. It’s the standard tool we have for printing messages and usually the most basic way of tracing and debugging. If you’re familiar with printf(3) you can tell printk() is based on it, although it has some functional differences:}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh block_quote)}(hXE- printk() messages can specify a log level. - the format string, while largely compatible with C99, doesn't follow the exact same specification. It has some extensions and a few limitations (no ``%n`` or floating point conversion specifiers). See :ref:`How to get printk format specifiers right `. h]h bullet_list)}(hhh](h list_item)}(h+printk() messages can specify a log level. h]h)}(h*printk() messages can specify a log level.h]h*printk() messages can specify a log level.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hXthe format string, while largely compatible with C99, doesn't follow the exact same specification. It has some extensions and a few limitations (no ``%n`` or floating point conversion specifiers). See :ref:`How to get printk format specifiers right `. h]h)}(hXthe format string, while largely compatible with C99, doesn't follow the exact same specification. It has some extensions and a few limitations (no ``%n`` or floating point conversion specifiers). See :ref:`How to get printk format specifiers right `.h](hthe format string, while largely compatible with C99, doesn’t follow the exact same specification. It has some extensions and a few limitations (no }(hjhhhNhNubhliteral)}(h``%n``h]h%n}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh/ or floating point conversion specifiers). See }(hjhhhNhNubh)}(hD:ref:`How to get printk format specifiers right `h]hinline)}(hj h]h)How to get printk format specifiers right}(hj$hhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&]refdoccore-api/printk-basics refdomainj/reftyperef refexplicitrefwarn reftargetprintk-specifiersuh1hhhhKhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]bullet-uh1hhhhK hhubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hAll printk() messages are printed to the kernel log buffer, which is a ring buffer exported to userspace through /dev/kmsg. The usual way to read it is using ``dmesg``.h](hAll printk() messages are printed to the kernel log buffer, which is a ring buffer exported to userspace through /dev/kmsg. The usual way to read it is using }(hjahhhNhNubj )}(h ``dmesg``h]hdmesg}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j hjaubh.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(h&printk() is typically used like this::h]h%printk() is typically used like this:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh literal_block)}(h'printk(KERN_INFO "Message: %s\n", arg);h]h'printk(KERN_INFO "Message: %s\n", arg);}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhhhhubh)}(hwhere ``KERN_INFO`` is the log level (note that it's concatenated to the format string, the log level is not a separate argument). The available log levels are:h](hwhere }(hjhhhNhNubj )}(h ``KERN_INFO``h]h KERN_INFO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh is the log level (note that it’s concatenated to the format string, the log level is not a separate argument). The available log levels are:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthK/uh1jhjubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]h)}(hNameh]hName}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hStringh]hString}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hAlias functionh]hAlias function}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubhtbody)}(hhh](j)}(hhh](j)}(hhh]h)}(h KERN_EMERGh]h KERN_EMERG}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hjNubah}(h]h ]h"]h$]h&]uh1jhjKubj)}(hhh]h)}(h"0"h]h“0”}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hjeubah}(h]h ]h"]h$]h&]uh1jhjKubj)}(hhh]h)}(h pr_emerg()h]h pr_emerg()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hj|ubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjHubj)}(hhh](j)}(hhh]h)}(h KERN_ALERTh]h KERN_ALERT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h"1"h]h“1”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h pr_alert()h]h pr_alert()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjHubj)}(hhh](j)}(hhh]h)}(h KERN_CRITh]h KERN_CRIT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h"2"h]h“2”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h pr_crit()h]h pr_crit()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjHubj)}(hhh](j)}(hhh]h)}(hKERN_ERRh]hKERN_ERR}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hj8ubah}(h]h ]h"]h$]h&]uh1jhj5ubj)}(hhh]h)}(h"3"h]h“3”}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hjOubah}(h]h ]h"]h$]h&]uh1jhj5ubj)}(hhh]h)}(hpr_err()h]hpr_err()}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hjfubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjHubj)}(hhh](j)}(hhh]h)}(h KERN_WARNINGh]h KERN_WARNING}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h"4"h]h“4”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h pr_warn()h]h pr_warn()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjHubj)}(hhh](j)}(hhh]h)}(h KERN_NOTICEh]h KERN_NOTICE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h"5"h]h“5”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h pr_notice()h]h pr_notice()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjHubj)}(hhh](j)}(hhh]h)}(h KERN_INFOh]h KERN_INFO}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hj"ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h"6"h]h“6”}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hj9ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h pr_info()h]h pr_info()}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hjPubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjHubj)}(hhh](j)}(hhh]h)}(h KERN_DEBUGh]h KERN_DEBUG}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hjpubah}(h]h ]h"]h$]h&]uh1jhjmubj)}(hhh]h)}(h"7"h]h“7”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hjubah}(h]h ]h"]h$]h&]uh1jhjmubj)}(hhh]h)}(h-pr_debug() and pr_devel() if DEBUG is definedh]h-pr_debug() and pr_devel() if DEBUG is defined}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjHubj)}(hhh](j)}(hhh]h)}(h KERN_DEFAULTh]h KERN_DEFAULT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h""h]h“”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjHubj)}(hhh](j)}(hhh]h)}(h KERN_CONTh]h KERN_CONT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h"c"h]h“c”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h pr_cont()h]h pr_cont()}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jFhjubeh}(h]h ]h"]h$]h&]colsKuh1jhjubah}(h]h ]h"]h$]h&]uh1jhhhhhhhNubh)}(hXiThe log level specifies the importance of a message. The kernel decides whether to show the message immediately (printing it to the current console) depending on its log level and the current *console_loglevel* (a kernel variable). If the message priority is higher (lower log level value) than the *console_loglevel* the message will be printed to the console.h](hThe log level specifies the importance of a message. The kernel decides whether to show the message immediately (printing it to the current console) depending on its log level and the current }(hj\hhhNhNubhemphasis)}(h*console_loglevel*h]hconsole_loglevel}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jdhj\ubhY (a kernel variable). If the message priority is higher (lower log level value) than the }(hj\hhhNhNubje)}(h*console_loglevel*h]hconsole_loglevel}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jdhj\ubh, the message will be printed to the console.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK7hhhhubh)}(hPIf the log level is omitted, the message is printed with ``KERN_DEFAULT`` level.h](h9If the log level is omitted, the message is printed with }(hjhhhNhNubj )}(h``KERN_DEFAULT``h]h KERN_DEFAULT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh level.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK=hhhhubh)}(h3You can check the current *console_loglevel* with::h](hYou can check the current }(hjhhhNhNubje)}(h*console_loglevel*h]hconsole_loglevel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jdhjubh with:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK@hhhhubj)}(h:$ cat /proc/sys/kernel/printk 4 4 1 7h]h:$ cat /proc/sys/kernel/printk 4 4 1 7}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKBhhhhubh)}(hXThe result shows the *current*, *default*, *minimum* and *boot-time-default* log levels.h](hThe result shows the }(hjhhhNhNubje)}(h *current*h]hcurrent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jdhjubh, }(hjhhhNhNubje)}(h *default*h]hdefault}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jdhjubh, }hjsbje)}(h *minimum*h]hminimum}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jdhjubh and }(hjhhhNhNubje)}(h*boot-time-default*h]hboot-time-default}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jdhjubh log levels.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKEhhhhubh)}(hTo change the current console_loglevel simply write the desired level to ``/proc/sys/kernel/printk``. For example, to print all messages to the console::h](hITo change the current console_loglevel simply write the desired level to }(hj4hhhNhNubj )}(h``/proc/sys/kernel/printk``h]h/proc/sys/kernel/printk}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj4ubh4. For example, to print all messages to the console:}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKHhhhhubj)}(h"# echo 8 > /proc/sys/kernel/printkh]h"# echo 8 > /proc/sys/kernel/printk}hjTsbah}(h]h ]h"]h$]h&]hhuh1jhhhKKhhhhubh)}(hAnother way, using ``dmesg``::h](hAnother way, using }(hjbhhhNhNubj )}(h ``dmesg``h]hdmesg}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjbubh:}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKMhhhhubj)}(h # dmesg -n 5h]h # dmesg -n 5}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKOhhhhubh)}(h~sets the console_loglevel to print KERN_WARNING (4) or more severe messages to console. See ``dmesg(1)`` for more information.h](h\sets the console_loglevel to print KERN_WARNING (4) or more severe messages to console. See }(hjhhhNhNubj )}(h ``dmesg(1)``h]hdmesg(1)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh for more information.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKQhhhhubh)}(hAs an alternative to printk() you can use the ``pr_*()`` aliases for logging. This family of macros embed the log level in the macro names. For example::h](h.As an alternative to printk() you can use the }(hjhhhNhNubj )}(h ``pr_*()``h]hpr_*()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh` aliases for logging. This family of macros embed the log level in the macro names. For example:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKThhhhubj)}(h*pr_info("Info message no. %d\n", msg_num);h]h*pr_info("Info message no. %d\n", msg_num);}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKXhhhhubh)}(hprints a ``KERN_INFO`` message.h](h prints a }(hjhhhNhNubj )}(h ``KERN_INFO``h]h KERN_INFO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh message.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKZhhhhubh)}(hBesides being more concise than the equivalent printk() calls, they can use a common definition for the format string through the pr_fmt() macro. For instance, defining this at the top of a source file (before any ``#include`` directive)::h](hBesides being more concise than the equivalent printk() calls, they can use a common definition for the format string through the pr_fmt() macro. For instance, defining this at the top of a source file (before any }(hjhhhNhNubj )}(h ``#include``h]h#include}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh directive):}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK\hhhhubj)}(h;#define pr_fmt(fmt) "%s:%s: " fmt, KBUILD_MODNAME, __func__h]h;#define pr_fmt(fmt) "%s:%s: " fmt, KBUILD_MODNAME, __func__}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKahhhhubh)}(hmwould prefix every pr_*() message in that file with the module and function name that originated the message.h]hmwould prefix every pr_*() message in that file with the module and function name that originated the message.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKchhhhubh)}(hFor debugging purposes there are also two conditionally-compiled macros: pr_debug() and pr_devel(), which are compiled-out unless ``DEBUG`` (or also ``CONFIG_DYNAMIC_DEBUG`` in the case of pr_debug()) is defined.h](hFor debugging purposes there are also two conditionally-compiled macros: pr_debug() and pr_devel(), which are compiled-out unless }(hj:hhhNhNubj )}(h ``DEBUG``h]hDEBUG}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj:ubh (or also }(hj:hhhNhNubj )}(h``CONFIG_DYNAMIC_DEBUG``h]hCONFIG_DYNAMIC_DEBUG}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j hj:ubh' in the case of pr_debug()) is defined.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKfhhhhubh)}(hhh](h)}(hFunction referenceh]hFunction reference}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhhhhhKlubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlepr_fmt (C macro)c.pr_fmthNtauh1j}hjlhhhNhNubhdesc)}(hhh](hdesc_signature)}(hpr_fmth]hdesc_signature_line)}(hpr_fmth]h desc_name)}(hpr_fmth]h desc_sig_name)}(hjh]hpr_fmt}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMubah}(h]h ]h"]h$]h&]hh add_permalinkuh1jsphinx_line_type declaratorhjhhhjhMubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhMhjhhubh desc_content)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](cmacroeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhjlhNhNubh)}(h``pr_fmt (fmt)``h]j )}(hjh]h pr_fmt (fmt)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjlhhubh)}(h?used by the pr_*() macros to generate the printk format string h]h)}(h>used by the pr_*() macros to generate the printk format stringh]h>used by the pr_*() macros to generate the printk format string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjhMhjlhhubh container)}(hX**Parameters** ``fmt`` format string passed from a pr_*() macro **Description** This macro can be used to generate a unified format string for pr_*() macros. A common use is to prefix all pr_*() messages in a file with a common string. For example, defining this at the top of a source file: #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt would prefix all pr_info, pr_emerg... messages in the file with the module name.h](h)}(h**Parameters**h]hstrong)}(hj$h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj"ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjubhdefinition_list)}(hhh]hdefinition_list_item)}(h1``fmt`` format string passed from a pr_*() macro h](hterm)}(h``fmt``h]j )}(hjKh]hfmt}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjIubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjCubh definition)}(hhh]h)}(h(format string passed from a pr_*() macroh]h(format string passed from a pr_*() macro}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMhjcubah}(h]h ]h"]h$]h&]uh1jahjCubeh}(h]h ]h"]h$]h&]uh1jAhj`hMhj>ubah}(h]h ]h"]h$]h&]uh1j<hjubh)}(h**Description**h]j')}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjubh)}(hThis macro can be used to generate a unified format string for pr_*() macros. A common use is to prefix all pr_*() messages in a file with a common string. For example, defining this at the top of a source file:h]hThis macro can be used to generate a unified format string for pr_*() macros. A common use is to prefix all pr_*() messages in a file with a common string. For example, defining this at the top of a source file:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjubh)}(h,#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt h]h)}(h+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmth]h/#define pr_fmt(fmt) KBUILD_MODNAME “: “ fmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(hPwould prefix all pr_info, pr_emerg... messages in the file with the module name.h]hPwould prefix all pr_info, pr_emerg... messages in the file with the module name.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj~)}(hhh]h}(h]h ]h"]h$]h&]entries](jprintk (C macro)c.printkhNtauh1j}hjlhhhNhNubj)}(hhh](j)}(hprintkh]j)}(hprintkh]j)}(hprintkh]j)}(hjh]hprintk}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](jmacroeh"]h$]h&]jjjj% jj% jjjuh1jhhhjlhNhNubh)}(h``printk (fmt, ...)``h]j )}(hj+ h]hprintk (fmt, ...)}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj) ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjlhhubh)}(hprint a kernel message h]h)}(hprint a kernel messageh]hprint a kernel message}(hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjA ubah}(h]h ]h"]h$]h&]uh1hhjS hMhjlhhubj)}(hX**Parameters** ``fmt`` format string ``...`` variable arguments **Description** This is printk(). It can be called from any context. We want it to work. If printk indexing is enabled, _printk() is called from printk_index_wrap. Otherwise, printk is simply #defined to _printk. We try to grab the console_lock. If we succeed, it's easy - we log the output and call the console drivers. If we fail to get the semaphore, we place the output into the log buffer and return. The current holder of the console_sem will notice the new output in console_unlock(); and will send it to the consoles before releasing the lock. One effect of this deferred printing is that code which calls printk() and then changes console_loglevel may break. This is because console_loglevel is inspected when the actual printing occurs. See also: printf(3) See the vsnprintf() documentation for format string extensions over C99.h](h)}(h**Parameters**h]j')}(hj` h]h Parameters}(hjb hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj^ ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjZ ubj=)}(hhh](jB)}(h``fmt`` format string h](jH)}(h``fmt``h]j )}(hj h]hfmt}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj} ubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjy ubjb)}(hhh]h)}(h format stringh]h format string}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jahjy ubeh}(h]h ]h"]h$]h&]uh1jAhj hMhjv ubjB)}(h``...`` variable arguments h](jH)}(h``...``h]j )}(hj h]h...}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj ubjb)}(hhh]h)}(hvariable argumentsh]hvariable arguments}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jahj ubeh}(h]h ]h"]h$]h&]uh1jAhj hMhjv ubeh}(h]h ]h"]h$]h&]uh1j<hjZ ubh)}(h**Description**h]j')}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjZ ubh)}(hHThis is printk(). It can be called from any context. We want it to work.h]hHThis is printk(). It can be called from any context. We want it to work.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjZ ubh)}(h{If printk indexing is enabled, _printk() is called from printk_index_wrap. Otherwise, printk is simply #defined to _printk.h]h{If printk indexing is enabled, _printk() is called from printk_index_wrap. Otherwise, printk is simply #defined to _printk.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjZ ubh)}(hXSWe try to grab the console_lock. If we succeed, it's easy - we log the output and call the console drivers. If we fail to get the semaphore, we place the output into the log buffer and return. The current holder of the console_sem will notice the new output in console_unlock(); and will send it to the consoles before releasing the lock.h]hXUWe try to grab the console_lock. If we succeed, it’s easy - we log the output and call the console drivers. If we fail to get the semaphore, we place the output into the log buffer and return. The current holder of the console_sem will notice the new output in console_unlock(); and will send it to the consoles before releasing the lock.}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjZ ubh)}(hOne effect of this deferred printing is that code which calls printk() and then changes console_loglevel may break. This is because console_loglevel is inspected when the actual printing occurs.h]hOne effect of this deferred printing is that code which calls printk() and then changes console_loglevel may break. This is because console_loglevel is inspected when the actual printing occurs.}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjZ ubh)}(hSee also: printf(3)h]hSee also: printf(3)}(hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjZ ubh)}(hHSee the vsnprintf() documentation for format string extensions over C99.h]hHSee the vsnprintf() documentation for format string extensions over C99.}(hjT hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjZ ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj~)}(hhh]h}(h]h ]h"]h$]h&]entries](jpr_emerg (C macro) c.pr_emerghNtauh1j}hjlhhhNhNubj)}(hhh](j)}(hpr_emergh]j)}(hpr_emergh]j)}(hpr_emergh]j)}(hj} h]hpr_emerg}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhj{ hhhj hMubah}(h]jv ah ](jjeh"]h$]h&]jj)jhuh1jhj hMhjx hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjx hhhj hMubeh}(h]h ](jmacroeh"]h$]h&]jjjj jj jjjuh1jhhhjlhNhNubh)}(h``pr_emerg (fmt, ...)``h]j )}(hj h]hpr_emerg (fmt, ...)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM hjlhhubh)}(h!Print an emergency-level message h]h)}(h Print an emergency-level messageh]h Print an emergency-level message}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj ubah}(h]h ]h"]h$]h&]uh1hhj hMhjlhhubj)}(h**Parameters** ``fmt`` format string ``...`` arguments for the format string **Description** This macro expands to a printk with KERN_EMERG loglevel. It uses pr_fmt() to generate the format string.h](h)}(h**Parameters**h]j')}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj ubj=)}(hhh](jB)}(h``fmt`` format string h](jH)}(h``fmt``h]j )}(hj h]hfmt}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj ubjb)}(hhh]h)}(h format stringh]h format string}(hj& hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj" hMhj# ubah}(h]h ]h"]h$]h&]uh1jahj ubeh}(h]h ]h"]h$]h&]uh1jAhj" hMhj ubjB)}(h(``...`` arguments for the format string h](jH)}(h``...``h]j )}(hjF h]h...}(hjH hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjD ubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj@ ubjb)}(hhh]h)}(harguments for the format stringh]harguments for the format string}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[ hMhj\ ubah}(h]h ]h"]h$]h&]uh1jahj@ ubeh}(h]h ]h"]h$]h&]uh1jAhj[ hMhj ubeh}(h]h ]h"]h$]h&]uh1j<hj ubh)}(h**Description**h]j')}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj ubh)}(hhThis macro expands to a printk with KERN_EMERG loglevel. It uses pr_fmt() to generate the format string.h]hhThis macro expands to a printk with KERN_EMERG loglevel. It uses pr_fmt() to generate the format string.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj~)}(hhh]h}(h]h ]h"]h$]h&]entries](jpr_alert (C macro) c.pr_alerthNtauh1j}hjlhhhNhNubj)}(hhh](j)}(hpr_alerth]j)}(hpr_alerth]j)}(hpr_alerth]j)}(hj h]hpr_alert}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hMhj hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](jmacroeh"]h$]h&]jjjj jj jjjuh1jhhhjlhNhNubh)}(h``pr_alert (fmt, ...)``h]j )}(hj h]hpr_alert (fmt, ...)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjlhhubh)}(hPrint an alert-level message h]h)}(hPrint an alert-level messageh]hPrint an alert-level message}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM hj ubah}(h]h ]h"]h$]h&]uh1hhj$ hM hjlhhubj)}(h**Parameters** ``fmt`` format string ``...`` arguments for the format string **Description** This macro expands to a printk with KERN_ALERT loglevel. It uses pr_fmt() to generate the format string.h](h)}(h**Parameters**h]j')}(hj1 h]h Parameters}(hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj/ ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj+ ubj=)}(hhh](jB)}(h``fmt`` format string h](jH)}(h``fmt``h]j )}(hjP h]hfmt}(hjR hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjN ubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM hjJ ubjb)}(hhh]h)}(h format stringh]h format string}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1hhje hM hjf ubah}(h]h ]h"]h$]h&]uh1jahjJ ubeh}(h]h ]h"]h$]h&]uh1jAhje hM hjG ubjB)}(h(``...`` arguments for the format string h](jH)}(h``...``h]j )}(hj h]h...}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM hj ubjb)}(hhh]h)}(harguments for the format stringh]harguments for the format string}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj ubah}(h]h ]h"]h$]h&]uh1jahj ubeh}(h]h ]h"]h$]h&]uh1jAhj hM hjG ubeh}(h]h ]h"]h$]h&]uh1j<hj+ ubh)}(h**Description**h]j')}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj+ ubh)}(hhThis macro expands to a printk with KERN_ALERT loglevel. It uses pr_fmt() to generate the format string.h]hhThis macro expands to a printk with KERN_ALERT loglevel. It uses pr_fmt() to generate the format string.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj+ ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj~)}(hhh]h}(h]h ]h"]h$]h&]entries](jpr_crit (C macro) c.pr_crithNtauh1j}hjlhhhNhNubj)}(hhh](j)}(hpr_crith]j)}(hpr_crith]j)}(hpr_crith]j)}(hj h]hpr_crit}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hMhj hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](jmacroeh"]h$]h&]jjjj9 jj9 jjjuh1jhhhjlhNhNubh)}(h``pr_crit (fmt, ...)``h]j )}(hj? h]hpr_crit (fmt, ...)}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj= ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjlhhubh)}(hPrint a critical-level message h]h)}(hPrint a critical-level messageh]hPrint a critical-level message}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjU ubah}(h]h ]h"]h$]h&]uh1hhjg hMhjlhhubj)}(h**Parameters** ``fmt`` format string ``...`` arguments for the format string **Description** This macro expands to a printk with KERN_CRIT loglevel. It uses pr_fmt() to generate the format string.h](h)}(h**Parameters**h]j')}(hjt h]h Parameters}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjr ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjn ubj=)}(hhh](jB)}(h``fmt`` format string h](jH)}(h``fmt``h]j )}(hj h]hfmt}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj ubjb)}(hhh]h)}(h format stringh]h format string}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jahj ubeh}(h]h ]h"]h$]h&]uh1jAhj hMhj ubjB)}(h(``...`` arguments for the format string h](jH)}(h``...``h]j )}(hj h]h...}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj ubjb)}(hhh]h)}(harguments for the format stringh]harguments for the format string}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jahj ubeh}(h]h ]h"]h$]h&]uh1jAhj hMhj ubeh}(h]h ]h"]h$]h&]uh1j<hjn ubh)}(h**Description**h]j')}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjn ubh)}(hgThis macro expands to a printk with KERN_CRIT loglevel. It uses pr_fmt() to generate the format string.h]hgThis macro expands to a printk with KERN_CRIT loglevel. It uses pr_fmt() to generate the format string.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjn ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj~)}(hhh]h}(h]h ]h"]h$]h&]entries](jpr_err (C macro)c.pr_errhNtauh1j}hjlhhhNhNubj)}(hhh](j)}(hpr_errh]j)}(hpr_errh]j)}(hpr_errh]j)}(hjFh]hpr_err}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](jjeh"]h$]h&]hhuh1jhjHhhh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM%ubah}(h]h ]h"]h$]h&]hhjuh1jjjhjDhhhjchM%ubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1jhjchM%hjAhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjAhhhjchM%ubeh}(h]h ](jmacroeh"]h$]h&]jjjj|jj|jjjuh1jhhhjlhNhNubh)}(h``pr_err (fmt, ...)``h]j )}(hjh]hpr_err (fmt, ...)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM'hjlhhubh)}(hPrint an error-level message h]h)}(hPrint an error-level messageh]hPrint an error-level message}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjhMhjlhhubj)}(h**Parameters** ``fmt`` format string ``...`` arguments for the format string **Description** This macro expands to a printk with KERN_ERR loglevel. It uses pr_fmt() to generate the format string.h](h)}(h**Parameters**h]j')}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM"hjubj=)}(hhh](jB)}(h``fmt`` format string h](jH)}(h``fmt``h]j )}(hjh]hfmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjubjb)}(hhh]h)}(h format stringh]h format string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jahjubeh}(h]h ]h"]h$]h&]uh1jAhjhMhjubjB)}(h(``...`` arguments for the format string h](jH)}(h``...``h]j )}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM hj ubjb)}(hhh]h)}(harguments for the format stringh]harguments for the format string}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hM hj%ubah}(h]h ]h"]h$]h&]uh1jahj ubeh}(h]h ]h"]h$]h&]uh1jAhj$hM hjubeh}(h]h ]h"]h$]h&]uh1j<hjubh)}(h**Description**h]j')}(hjJh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjHubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM"hjubh)}(hfThis macro expands to a printk with KERN_ERR loglevel. It uses pr_fmt() to generate the format string.h]hfThis macro expands to a printk with KERN_ERR loglevel. It uses pr_fmt() to generate the format string.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj~)}(hhh]h}(h]h ]h"]h$]h&]entries](jpr_warn (C macro) c.pr_warnhNtauh1j}hjlhhhNhNubj)}(hhh](j)}(hpr_warnh]j)}(hpr_warnh]j)}(hpr_warnh]j)}(hjh]hpr_warn}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM/ubah}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhM/ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM/hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhM/ubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jhhhjlhNhNubh)}(h``pr_warn (fmt, ...)``h]j )}(hjh]hpr_warn (fmt, ...)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM1hjlhhubh)}(hPrint a warning-level message h]h)}(hPrint a warning-level messageh]hPrint a warning-level message}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM(hjubah}(h]h ]h"]h$]h&]uh1hhjhM(hjlhhubj)}(h**Parameters** ``fmt`` format string ``...`` arguments for the format string **Description** This macro expands to a printk with KERN_WARNING loglevel. It uses pr_fmt() to generate the format string.h](h)}(h**Parameters**h]j')}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM,hjubj=)}(hhh](jB)}(h``fmt`` format string h](jH)}(h``fmt``h]j )}(hjh]hfmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM)hjubjb)}(hhh]h)}(h format stringh]h format string}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hM)hj/ubah}(h]h ]h"]h$]h&]uh1jahjubeh}(h]h ]h"]h$]h&]uh1jAhj.hM)hjubjB)}(h(``...`` arguments for the format string h](jH)}(h``...``h]j )}(hjRh]h...}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j hjPubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM*hjLubjb)}(hhh]h)}(harguments for the format stringh]harguments for the format string}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghM*hjhubah}(h]h ]h"]h$]h&]uh1jahjLubeh}(h]h ]h"]h$]h&]uh1jAhjghM*hjubeh}(h]h ]h"]h$]h&]uh1j<hjubh)}(h**Description**h]j')}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM,hjubh)}(hjThis macro expands to a printk with KERN_WARNING loglevel. It uses pr_fmt() to generate the format string.h]hjThis macro expands to a printk with KERN_WARNING loglevel. It uses pr_fmt() to generate the format string.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM,hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj~)}(hhh]h}(h]h ]h"]h$]h&]entries](jpr_notice (C macro) c.pr_noticehNtauh1j}hjlhhhNhNubj)}(hhh](j)}(h pr_noticeh]j)}(h pr_noticeh]j)}(h pr_noticeh]j)}(hjh]h pr_notice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM9ubah}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhM9ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM9hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhM9ubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jhhhjlhNhNubh)}(h``pr_notice (fmt, ...)``h]j )}(hjh]hpr_notice (fmt, ...)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM;hjlhhubh)}(hPrint a notice-level message h]h)}(hPrint a notice-level messageh]hPrint a notice-level message}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM2hjubah}(h]h ]h"]h$]h&]uh1hhj0hM2hjlhhubj)}(h**Parameters** ``fmt`` format string ``...`` arguments for the format string **Description** This macro expands to a printk with KERN_NOTICE loglevel. It uses pr_fmt() to generate the format string.h](h)}(h**Parameters**h]j')}(hj=h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj;ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM6hj7ubj=)}(hhh](jB)}(h``fmt`` format string h](jH)}(h``fmt``h]j )}(hj\h]hfmt}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjZubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM3hjVubjb)}(hhh]h)}(h format stringh]h format string}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhM3hjrubah}(h]h ]h"]h$]h&]uh1jahjVubeh}(h]h ]h"]h$]h&]uh1jAhjqhM3hjSubjB)}(h(``...`` arguments for the format string h](jH)}(h``...``h]j )}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM4hjubjb)}(hhh]h)}(harguments for the format stringh]harguments for the format string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM4hjubah}(h]h ]h"]h$]h&]uh1jahjubeh}(h]h ]h"]h$]h&]uh1jAhjhM4hjSubeh}(h]h ]h"]h$]h&]uh1j<hj7ubh)}(h**Description**h]j')}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM6hj7ubh)}(hiThis macro expands to a printk with KERN_NOTICE loglevel. It uses pr_fmt() to generate the format string.h]hiThis macro expands to a printk with KERN_NOTICE loglevel. It uses pr_fmt() to generate the format string.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM6hj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj~)}(hhh]h}(h]h ]h"]h$]h&]entries](jpr_info (C macro) c.pr_infohNtauh1j}hjlhhhNhNubj)}(hhh](j)}(hpr_infoh]j)}(hpr_infoh]j)}(hpr_infoh]j)}(hjh]hpr_info}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMCubah}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj,hMCubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj,hMChj hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj hhhj,hMCubeh}(h]h ](jmacroeh"]h$]h&]jjjjEjjEjjjuh1jhhhjlhNhNubh)}(h``pr_info (fmt, ...)``h]j )}(hjKh]hpr_info (fmt, ...)}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjIubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMEhjlhhubh)}(hPrint an info-level message h]h)}(hPrint an info-level messageh]hPrint an info-level message}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM<hjaubah}(h]h ]h"]h$]h&]uh1hhjshM<hjlhhubj)}(h**Parameters** ``fmt`` format string ``...`` arguments for the format string **Description** This macro expands to a printk with KERN_INFO loglevel. It uses pr_fmt() to generate the format string.h](h)}(h**Parameters**h]j')}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj~ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM@hjzubj=)}(hhh](jB)}(h``fmt`` format string h](jH)}(h``fmt``h]j )}(hjh]hfmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM=hjubjb)}(hhh]h)}(h format stringh]h format string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM=hjubah}(h]h ]h"]h$]h&]uh1jahjubeh}(h]h ]h"]h$]h&]uh1jAhjhM=hjubjB)}(h(``...`` arguments for the format string h](jH)}(h``...``h]j )}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM>hjubjb)}(hhh]h)}(harguments for the format stringh]harguments for the format string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM>hjubah}(h]h ]h"]h$]h&]uh1jahjubeh}(h]h ]h"]h$]h&]uh1jAhjhM>hjubeh}(h]h ]h"]h$]h&]uh1j<hjzubh)}(h**Description**h]j')}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM@hjzubh)}(hgThis macro expands to a printk with KERN_INFO loglevel. It uses pr_fmt() to generate the format string.h]hgThis macro expands to a printk with KERN_INFO loglevel. It uses pr_fmt() to generate the format string.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM@hjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj~)}(hhh]h}(h]h ]h"]h$]h&]entries](jpr_cont (C macro) c.pr_conthNtauh1j}hjlhhhNhNubj)}(hhh](j)}(hpr_conth]j)}(hpr_conth]j)}(hpr_conth]j)}(hjRh]hpr_cont}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ](jjeh"]h$]h&]hhuh1jhjThhh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMOubah}(h]h ]h"]h$]h&]hhjuh1jjjhjPhhhjohMOubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1jhjohMOhjMhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjMhhhjohMOubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jhhhjlhNhNubh)}(h``pr_cont (fmt, ...)``h]j )}(hjh]hpr_cont (fmt, ...)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMQhjlhhubh)}(h3Continues a previous log message in the same line. h]h)}(h2Continues a previous log message in the same line.h]h2Continues a previous log message in the same line.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMGhjubah}(h]h ]h"]h$]h&]uh1hhjhMGhjlhhubj)}(hX'**Parameters** ``fmt`` format string ``...`` arguments for the format string **Description** This macro expands to a printk with KERN_CONT loglevel. It should only be used when continuing a log message with no newline ('\n') enclosed. Otherwise it defaults back to KERN_DEFAULT loglevel.h](h)}(h**Parameters**h]j')}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMKhjubj=)}(hhh](jB)}(h``fmt`` format string h](jH)}(h``fmt``h]j )}(hjh]hfmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMHhjubjb)}(hhh]h)}(h format stringh]h format string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMHhjubah}(h]h ]h"]h$]h&]uh1jahjubeh}(h]h ]h"]h$]h&]uh1jAhjhMHhjubjB)}(h(``...`` arguments for the format string h](jH)}(h``...``h]j )}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMIhjubjb)}(hhh]h)}(harguments for the format stringh]harguments for the format string}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMIhj1ubah}(h]h ]h"]h$]h&]uh1jahjubeh}(h]h ]h"]h$]h&]uh1jAhj0hMIhjubeh}(h]h ]h"]h$]h&]uh1j<hjubh)}(h**Description**h]j')}(hjVh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjTubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMKhjubh)}(hThis macro expands to a printk with KERN_CONT loglevel. It should only be used when continuing a log message with no newline ('\n') enclosed. Otherwise it defaults back to KERN_DEFAULT loglevel.h]hThis macro expands to a printk with KERN_CONT loglevel. It should only be used when continuing a log message with no newline (’n’) enclosed. Otherwise it defaults back to KERN_DEFAULT loglevel.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.h /hMKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj~)}(hhh]h}(h]h ]h"]h$]h&]entries](jpr_devel (C macro) c.pr_develhNtauh1j}hjlhhhNhNubj)}(hhh](j)}(hpr_develh]j)}(hpr_develh]j)}(hpr_develh]j)}(hjh]hpr_devel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM\ubah}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhM\ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM\hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhM\ubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jhhhjlhNhNubh)}(h``pr_devel (fmt, ...)``h]j )}(hjh]hpr_devel (fmt, ...)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM^hjlhhubh)}(h*Print a debug-level message conditionally h]h)}(h)Print a debug-level message conditionallyh]h)Print a debug-level message conditionally}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMShjubah}(h]h ]h"]h$]h&]uh1hhjhMShjlhhubj)}(h**Parameters** ``fmt`` format string ``...`` arguments for the format string **Description** This macro expands to a printk with KERN_DEBUG loglevel if DEBUG is defined. Otherwise it does nothing. It uses pr_fmt() to generate the format string.h](h)}(h**Parameters**h]j')}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMWhjubj=)}(hhh](jB)}(h``fmt`` format string h](jH)}(h``fmt``h]j )}(hj%h]hfmt}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj#ubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMThjubjb)}(hhh]h)}(h format stringh]h format string}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMThj;ubah}(h]h ]h"]h$]h&]uh1jahjubeh}(h]h ]h"]h$]h&]uh1jAhj:hMThjubjB)}(h(``...`` arguments for the format string h](jH)}(h``...``h]j )}(hj^h]h...}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj\ubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMUhjXubjb)}(hhh]h)}(harguments for the format stringh]harguments for the format string}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshMUhjtubah}(h]h ]h"]h$]h&]uh1jahjXubeh}(h]h ]h"]h$]h&]uh1jAhjshMUhjubeh}(h]h ]h"]h$]h&]uh1j<hjubh)}(h**Description**h]j')}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMWhjubh)}(hgThis macro expands to a printk with KERN_DEBUG loglevel if DEBUG is defined. Otherwise it does nothing.h]hgThis macro expands to a printk with KERN_DEBUG loglevel if DEBUG is defined. Otherwise it does nothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMWhjubh)}(h/It uses pr_fmt() to generate the format string.h]h/It uses pr_fmt() to generate the format string.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMZhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj~)}(hhh]h}(h]h ]h"]h$]h&]entries](jpr_debug (C macro) c.pr_debughNtauh1j}hjlhhhNhNubj)}(hhh](j)}(hpr_debugh]j)}(hpr_debugh]j)}(hpr_debugh]j)}(hjh]hpr_debug}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMvubah}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMvubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMvhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhMvubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jhhhjlhNhNubh)}(h``pr_debug (fmt, ...)``h]j )}(hj#h]hpr_debug (fmt, ...)}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj!ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMxhjlhhubh)}(h*Print a debug-level message conditionally h]h)}(h)Print a debug-level message conditionallyh]h)Print a debug-level message conditionally}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMkhj9ubah}(h]h ]h"]h$]h&]uh1hhjKhMkhjlhhubj)}(hX**Parameters** ``fmt`` format string ``...`` arguments for the format string **Description** This macro expands to dynamic_pr_debug() if CONFIG_DYNAMIC_DEBUG is set. Otherwise, if DEBUG is defined, it's equivalent to a printk with KERN_DEBUG loglevel. If DEBUG is not defined it does nothing. It uses pr_fmt() to generate the format string (dynamic_pr_debug() uses pr_fmt() internally).h](h)}(h**Parameters**h]j')}(hjXh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjVubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMohjRubj=)}(hhh](jB)}(h``fmt`` format string h](jH)}(h``fmt``h]j )}(hjwh]hfmt}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjuubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMlhjqubjb)}(hhh]h)}(h format stringh]h format string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMlhjubah}(h]h ]h"]h$]h&]uh1jahjqubeh}(h]h ]h"]h$]h&]uh1jAhjhMlhjnubjB)}(h(``...`` arguments for the format string h](jH)}(h``...``h]j )}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMmhjubjb)}(hhh]h)}(harguments for the format stringh]harguments for the format string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMmhjubah}(h]h ]h"]h$]h&]uh1jahjubeh}(h]h ]h"]h$]h&]uh1jAhjhMmhjnubeh}(h]h ]h"]h$]h&]uh1j<hjRubh)}(h**Description**h]j')}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMohjRubh)}(hThis macro expands to dynamic_pr_debug() if CONFIG_DYNAMIC_DEBUG is set. Otherwise, if DEBUG is defined, it's equivalent to a printk with KERN_DEBUG loglevel. If DEBUG is not defined it does nothing.h]hThis macro expands to dynamic_pr_debug() if CONFIG_DYNAMIC_DEBUG is set. Otherwise, if DEBUG is defined, it’s equivalent to a printk with KERN_DEBUG loglevel. If DEBUG is not defined it does nothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMohjRubh)}(h]It uses pr_fmt() to generate the format string (dynamic_pr_debug() uses pr_fmt() internally).h]h]It uses pr_fmt() to generate the format string (dynamic_pr_debug() uses pr_fmt() internally).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMshjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubeh}(h]function-referenceah ]h"]function referenceah$]h&]uh1hhhhhhhhKlubeh}(h]message-logging-with-printkah ]h"]message logging with printkah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksjfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjXerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j3j0j+j(u nametypes}(j3j+uh}(j0hj(jljjjjjv j{ j j j j j?jDjjjjjj jKjPjjjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]hsystem_message)}(hhh]h)}(heUnexpected possible title overline or transition. Treating it as ordinary text because it's so short.h]hgUnexpected possible title overline or transition. Treating it as ordinary text because it’s so short.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypeINFOlineK2sourcehuh1jhjubatransform_messages] transformerN include_log] decorationNhhub.