;sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}(hhparenthuba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget*/translations/zh_CN/core-api/printk-basicsmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}(hhhh2ubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/zh_TW/core-api/printk-basicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}(hhhhFubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/it_IT/core-api/printk-basicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}(hhhhZubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/ja_JP/core-api/printk-basicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}(hhhhnubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/ko_KR/core-api/printk-basicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}(hhhhubah}(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}(hhhhubah}(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}(hhhhhhhNhNubah}(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:}(hhhhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh block_quote)}(hhh]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.}(hhhhhhhNhNubah}(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 }(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}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh/ or floating point conversion specifiers). See }(h/ 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}(hhhj%hhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]refdoccore-api/printk-basics refdomainj0reftyperef refexplicitrefwarn reftargetprintk-specifiersuh1hhhhKhjubh.}(h.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&]uh1hhhhhhNhNubh)}(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 }(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 hjchhhNhNubj )}(h ``dmesg``h]hdmesg}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjcubh.}(hjHhjchhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(h&printk() is typically used like this::h]h%printk() is typically used like this:}(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);}(hhhjubah}(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 }(hwhere hjhhhNhNubj )}(h ``KERN_INFO``h]h KERN_INFO}(hhhjhhhNhNubah}(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:}(h 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}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hStringh]hString}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hAlias functionh]hAlias function}(hj.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}(hjYhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hjTubah}(h]h ]h"]h$]h&]uh1jhjQubj)}(hhh]h)}(h"0"h]h“0”}(hjphjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hjkubah}(h]h ]h"]h$]h&]uh1jhjQubj)}(hhh]h)}(h pr_emerg()h]h pr_emerg()}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hjubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjNubj)}(hhh](j)}(hhh]h)}(h KERN_ALERTh]h KERN_ALERT}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h"1"h]h“1”}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h pr_alert()h]h pr_alert()}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjNubj)}(hhh](j)}(hhh]h)}(h KERN_CRITh]h KERN_CRIT}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h"2"h]h“2”}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h pr_crit()h]h pr_crit()}(hj#hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjNubj)}(hhh](j)}(hhh]h)}(hKERN_ERRh]hKERN_ERR}(hjChjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hj>ubah}(h]h ]h"]h$]h&]uh1jhj;ubj)}(hhh]h)}(h"3"h]h“3”}(hjZhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hjUubah}(h]h ]h"]h$]h&]uh1jhj;ubj)}(hhh]h)}(hpr_err()h]hpr_err()}(hjqhjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hjlubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjNubj)}(hhh](j)}(hhh]h)}(h KERN_WARNINGh]h KERN_WARNING}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h"4"h]h“4”}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h pr_warn()h]h pr_warn()}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjNubj)}(hhh](j)}(hhh]h)}(h KERN_NOTICEh]h KERN_NOTICE}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h"5"h]h“5”}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h pr_notice()h]h pr_notice()}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjNubj)}(hhh](j)}(hhh]h)}(h KERN_INFOh]h KERN_INFO}(hj-hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hj(ubah}(h]h ]h"]h$]h&]uh1jhj%ubj)}(hhh]h)}(h"6"h]h“6”}(hjDhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hj?ubah}(h]h ]h"]h$]h&]uh1jhj%ubj)}(hhh]h)}(h pr_info()h]h pr_info()}(hj[hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hjVubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhjNubj)}(hhh](j)}(hhh]h)}(h KERN_DEBUGh]h KERN_DEBUG}(hj{hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hjvubah}(h]h ]h"]h$]h&]uh1jhjsubj)}(hhh]h)}(h"7"h]h“7”}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hjubah}(h]h ]h"]h$]h&]uh1jhjsubj)}(hhh]h)}(h-pr_debug() and pr_devel() if DEBUG is definedh]h-pr_debug() and pr_devel() if DEBUG is defined}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjNubj)}(hhh](j)}(hhh]h)}(h KERN_DEFAULTh]h KERN_DEFAULT}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h""h]h“”}(hjhjhhhNhNubah}(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&]uh1jhjNubj)}(hhh](j)}(hhh]h)}(h KERN_CONTh]h KERN_CONT}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h"c"h]h“c”}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h pr_cont()h]h pr_cont()}(hj7hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jLhjubeh}(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 }(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 hjbhhhNhNubhemphasis)}(h*console_loglevel*h]hconsole_loglevel}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjbubhY (a kernel variable). If the message priority is higher (lower log level value) than the }(hY (a kernel variable). If the message priority is higher (lower log level value) than the hjbhhhNhNubjl)}(h*console_loglevel*h]hconsole_loglevel}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjbubh, the message will be printed to the console.}(h, the message will be printed to the console.hjbhhhNhNubeh}(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 }(h9If the log level is omitted, the message is printed with hjhhhNhNubj )}(h``KERN_DEFAULT``h]h KERN_DEFAULT}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh level.}(h level.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK=hhhhubh)}(h3You can check the current *console_loglevel* with::h](hYou can check the current }(hYou can check the current hjhhhNhNubjl)}(h*console_loglevel*h]hconsole_loglevel}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjubh with:}(h 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}(hhhjubah}(h]h ]h"]h$]h&]hhuh1jhhhKBhhhhubh)}(hXThe result shows the *current*, *default*, *minimum* and *boot-time-default* log levels.h](hThe result shows the }(hThe result shows the hjhhhNhNubjl)}(h *current*h]hcurrent}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjubh, }(h, hjhhhNhNubjl)}(h *default*h]hdefault}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjubh, }(hjhjubjl)}(h *minimum*h]hminimum}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjubh and }(h and hjhhhNhNubjl)}(h*boot-time-default*h]hboot-time-default}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jkhjubh log levels.}(h 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 }(hITo change the current console_loglevel simply write the desired level to hjEhhhNhNubj )}(h``/proc/sys/kernel/printk``h]h/proc/sys/kernel/printk}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjEubh4. For example, to print all messages to the console:}(h4. For example, to print all messages to the console:hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKHhhhhubj)}(h"# echo 8 > /proc/sys/kernel/printkh]h"# echo 8 > /proc/sys/kernel/printk}(hhhjgubah}(h]h ]h"]h$]h&]hhuh1jhhhKKhhhhubh)}(hAnother way, using ``dmesg``::h](hAnother way, using }(hAnother way, using hjuhhhNhNubj )}(h ``dmesg``h]hdmesg}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjuubh:}(h:hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKMhhhhubj)}(h # dmesg -n 5h]h # dmesg -n 5}(hhhjubah}(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 }(h\sets the console_loglevel to print KERN_WARNING (4) or more severe messages to console. See hjhhhNhNubj )}(h ``dmesg(1)``h]hdmesg(1)}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh for more information.}(h 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 }(h.As an alternative to printk() you can use the hjhhhNhNubj )}(h ``pr_*()``h]hpr_*()}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh` aliases for logging. This family of macros embed the log level in the macro names. For example:}(h` 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);}(hhhjubah}(h]h ]h"]h$]h&]hhuh1jhhhKXhhhhubh)}(hprints a ``KERN_INFO`` message.h](h prints a }(h prints a hjhhhNhNubj )}(h ``KERN_INFO``h]h KERN_INFO}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh message.}(h 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 }(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}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh directive):}(h 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__}(hhhj;ubah}(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.}(hjKhjIhhhNhNubah}(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 }(hFor debugging purposes there are also two conditionally-compiled macros: pr_debug() and pr_devel(), which are compiled-out unless hjWhhhNhNubj )}(h ``DEBUG``h]hDEBUG}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjWubh (or also }(h (or also hjWhhhNhNubj )}(h``CONFIG_DYNAMIC_DEBUG``h]hCONFIG_DYNAMIC_DEBUG}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1j hjWubh' in the case of pr_debug()) is defined.}(h' in the case of pr_debug()) is defined.hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKfhhhhubh)}(hhh](h)}(hFunction referenceh]hFunction reference}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKlubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlepr_fmt (C macro)c.pr_fmthNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(hpr_fmth]hdesc_signature_line)}(hpr_fmth]h desc_name)}(hpr_fmth]h desc_sig_name)}(hjh]hpr_fmt}(hhhjhhhNhNubah}(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.hhMbubah}(h]h ]h"]h$]h&]hh add_permalinkuh1jsphinx_line_type declaratorhjhhhjhMbubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multilineuh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMahjhhubh desc_content)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhMbubeh}(h]h ](cmacroeh"]h$]h&]domainjobjtypejdesctypejnoindexuh1jhhhjhNhNubh)}(h``pr_fmt (fmt)``h]j )}(hj h]h pr_fmt (fmt)}(hhhj 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.hhMchjhhubh)}(hhh]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}(hj%hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMUhj ubah}(h]h ]h"]h$]h&]uh1hhjhhhNhNubh 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}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jBhj>ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMYhj:ubhdefinition_list)}(hhh]hdefinition_list_item)}(h1``fmt`` format string passed from a pr_*() macro h](hterm)}(h``fmt``h]j )}(hjgh]hfmt}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1j hjeubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMVhj_ubh definition)}(hhh]h)}(h(format string passed from a pr_*() macroh]h(format string passed from a pr_*() macro}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMVhjubah}(h]h ]h"]h$]h&]uh1j}hj_ubeh}(h]h ]h"]h$]h&]uh1j]hj|hMVhjZubah}(h]h ]h"]h$]h&]uh1jXhj:ubh)}(h**Description**h]jC)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jBhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMXhj:ubh)}(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:}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMXhj:ubh)}(hhh]h)}(h+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmth]h/#define pr_fmt(fmt) KBUILD_MODNAME “: ” fmt}(hjhjhhhNhNubah}(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&]uh1hhj:ubh)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM^hj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1j8hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jprintk (C macro)c.printkhNtauh1jhjhhhNhNubj)}(hhh](j)}(hprintkh]j)}(hprintkh]j)}(hprintkh]j)}(hj h]hprintk}(hhhj 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&]juh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj hhhj' hMubeh}(h]h ](jmacroeh"]h$]h&]jjjjA jjA juh1jhhhjhNhNubh)}(h``printk (fmt, ...)``h]j )}(hjG h]hprintk (fmt, ...)}(hhhjI hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjE ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjhhubh)}(hhh]h)}(hprint a kernel messageh]hprint a kernel message}(hjb 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&]uh1hhjhhhNhNubj9)}(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]jC)}(hj{ h]h Parameters}(hhhj} hhhNhNubah}(h]h ]h"]h$]h&]uh1jBhjy ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhju ubjY)}(hhh](j^)}(h``fmt`` format string h](jd)}(h``fmt``h]j )}(hj h]hfmt}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj ubj~)}(hhh]h)}(h format stringh]h format string}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j}hj ubeh}(h]h ]h"]h$]h&]uh1j]hj hMhj ubj^)}(h``...`` variable arguments h](jd)}(h``...``h]j )}(hj h]h...}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj ubj~)}(hhh]h)}(hvariable argumentsh]hvariable arguments}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j}hj ubeh}(h]h ]h"]h$]h&]uh1j]hj hMhj ubeh}(h]h ]h"]h$]h&]uh1jXhju ubh)}(h**Description**h]jC)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1jBhj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhju 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& hj$ hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhju 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.}(hj5 hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhju 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.}(hjD hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhju 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.}(hjS hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhju ubh)}(hSee also: printf(3)h]hSee also: printf(3)}(hjb hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhju ubh)}(hHSee the vsnprintf() documentation for format string extensions over C99.h]hHSee the vsnprintf() documentation for format string extensions over C99.}(hjq hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhju ubeh}(h]h ] kernelindentah"]h$]h&]uh1j8hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpr_emerg (C macro) c.pr_emerghNtauh1jhjhhhNhNubj)}(hhh](j)}(hpr_emergh]j)}(hpr_emergh]j)}(hpr_emergh]j)}(hj h]hpr_emerg}(hhhj 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&]juh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](jmacroeh"]h$]h&]jjjj jj juh1jhhhjhNhNubh)}(h``pr_emerg (fmt, ...)``h]j )}(hj h]hpr_emerg (fmt, ...)}(hhhj 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.hhMhjhhubh)}(hhh]h)}(h Print an emergency-level messageh]h Print an emergency-level message}(hj 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&]uh1hhjhhhNhNubj9)}(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]jC)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1jBhj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj ubjY)}(hhh](j^)}(h``fmt`` format string h](jd)}(h``fmt``h]j )}(hj( h]hfmt}(hhhj* hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj& ubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj" ubj~)}(hhh]h)}(h format stringh]h format string}(hjC hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj= hMhj> ubah}(h]h ]h"]h$]h&]uh1j}hj" ubeh}(h]h ]h"]h$]h&]uh1j]hj= hMhj ubj^)}(h(``...`` arguments for the format string h](jd)}(h``...``h]j )}(hja h]h...}(hhhjc hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj_ ubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj[ ubj~)}(hhh]h)}(harguments for the format stringh]harguments for the format string}(hj| hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjv hMhjw ubah}(h]h ]h"]h$]h&]uh1j}hj[ ubeh}(h]h ]h"]h$]h&]uh1j]hjv hMhj ubeh}(h]h ]h"]h$]h&]uh1jXhj ubh)}(h**Description**h]jC)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1jBhj 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 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&]uh1j8hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpr_alert (C macro) c.pr_alerthNtauh1jhjhhhNhNubj)}(hhh](j)}(hpr_alerth]j)}(hpr_alerth]j)}(hpr_alerth]j)}(hj h]hpr_alert}(hhhj 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&]juh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](jmacroeh"]h$]h&]jjjj jj juh1jhhhjhNhNubh)}(h``pr_alert (fmt, ...)``h]j )}(hj h]hpr_alert (fmt, ...)}(hhhj 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.hhMhjhhubh)}(hhh]h)}(hPrint an alert-level messageh]hPrint an alert-level message}(hj3 hj1 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&]uh1hhjhhhNhNubj9)}(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]jC)}(hjL h]h Parameters}(hhhjN hhhNhNubah}(h]h ]h"]h$]h&]uh1jBhjJ ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjF ubjY)}(hhh](j^)}(h``fmt`` format string h](jd)}(h``fmt``h]j )}(hjk h]hfmt}(hhhjm hhhNhNubah}(h]h ]h"]h$]h&]uh1j hji ubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhje ubj~)}(hhh]h)}(h format stringh]h format string}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j}hje ubeh}(h]h ]h"]h$]h&]uh1j]hj hMhjb ubj^)}(h(``...`` arguments for the format string h](jd)}(h``...``h]j )}(hj h]h...}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj ubj~)}(hhh]h)}(harguments for the format stringh]harguments for the format string}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j}hj ubeh}(h]h ]h"]h$]h&]uh1j]hj hMhjb ubeh}(h]h ]h"]h$]h&]uh1jXhjF ubh)}(h**Description**h]jC)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1jBhj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjF 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 hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjF ubeh}(h]h ] kernelindentah"]h$]h&]uh1j8hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpr_crit (C macro) c.pr_crithNtauh1jhjhhhNhNubj)}(hhh](j)}(hpr_crith]j)}(hpr_crith]j)}(hpr_crith]j)}(hj h]hpr_crit}(hhhj( 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&]juh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj hhhj; hMubeh}(h]h ](jmacroeh"]h$]h&]jjjjU jjU juh1jhhhjhNhNubh)}(h``pr_crit (fmt, ...)``h]j )}(hj[ h]hpr_crit (fmt, ...)}(hhhj] hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjY ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjhhubh)}(hhh]h)}(hPrint a critical-level messageh]hPrint a critical-level message}(hjv hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjq ubah}(h]h ]h"]h$]h&]uh1hhjhhhNhNubj9)}(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]jC)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1jBhj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj ubjY)}(hhh](j^)}(h``fmt`` format string h](jd)}(h``fmt``h]j )}(hj h]hfmt}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj ubj~)}(hhh]h)}(h format stringh]h format string}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j}hj ubeh}(h]h ]h"]h$]h&]uh1j]hj hMhj ubj^)}(h(``...`` arguments for the format string h](jd)}(h``...``h]j )}(hj h]h...}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj ubj~)}(hhh]h)}(harguments for the format stringh]harguments for the format string}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j}hj ubeh}(h]h ]h"]h$]h&]uh1j]hj hMhj ubeh}(h]h ]h"]h$]h&]uh1jXhj ubh)}(h**Description**h]jC)}(hj"h]h Description}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jBhj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj 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.}(hj:hj8hhhNhNubah}(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&]uh1j8hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpr_err (C macro)c.pr_errhNtauh1jhjhhhNhNubj)}(hhh](j)}(hpr_errh]j)}(hpr_errh]j)}(hpr_errh]j)}(hjah]hpr_err}(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](jjeh"]h$]h&]hhuh1jhjchhh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhj_hhhj~hMubah}(h]jZah ](jjeh"]h$]h&]juh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj\hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj\hhhj~hMubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjuh1jhhhjhNhNubh)}(h``pr_err (fmt, ...)``h]j )}(hjh]hpr_err (fmt, ...)}(hhhjhhhNhNubah}(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.hhMhjhhubh)}(hhh]h)}(hPrint an error-level messageh]hPrint an error-level message}(hjhjhhhNhNubah}(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&]uh1hhjhhhNhNubj9)}(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]jC)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jBhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjubjY)}(hhh](j^)}(h``fmt`` format string h](jd)}(h``fmt``h]j )}(hjh]hfmt}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjubj~)}(hhh]h)}(h format stringh]h format string}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j}hjubeh}(h]h ]h"]h$]h&]uh1j]hjhMhjubj^)}(h(``...`` arguments for the format string h](jd)}(h``...``h]j )}(hj*h]h...}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj(ubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj$ubj~)}(hhh]h)}(harguments for the format stringh]harguments for the format string}(hjEhjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMhj@ubah}(h]h ]h"]h$]h&]uh1j}hj$ubeh}(h]h ]h"]h$]h&]uh1j]hj?hMhjubeh}(h]h ]h"]h$]h&]uh1jXhjubh)}(h**Description**h]jC)}(hjeh]h Description}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1jBhjcubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjubh)}(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}hj{hhhNhNubah}(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&]uh1j8hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpr_warn (C macro) c.pr_warnhNtauh1jhjhhhNhNubj)}(hhh](j)}(hpr_warnh]j)}(hpr_warnh]j)}(hpr_warnh]j)}(hjh]hpr_warn}(hhhjhhhNhNubah}(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&]hhjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjuh1jhhhjhNhNubh)}(h``pr_warn (fmt, ...)``h]j )}(hjh]hpr_warn (fmt, ...)}(hhhjhhhNhNubah}(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.hhMhjhhubh)}(hhh]h)}(hPrint a warning-level messageh]hPrint a warning-level message}(hjhjhhhNhNubah}(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&]uh1hhjhhhNhNubj9)}(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]jC)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jBhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjubjY)}(hhh](j^)}(h``fmt`` format string h](jd)}(h``fmt``h]j )}(hj4h]hfmt}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj2ubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj.ubj~)}(hhh]h)}(h format stringh]h format string}(hjOhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMhjJubah}(h]h ]h"]h$]h&]uh1j}hj.ubeh}(h]h ]h"]h$]h&]uh1j]hjIhMhj+ubj^)}(h(``...`` arguments for the format string h](jd)}(h``...``h]j )}(hjmh]h...}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j hjkubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjgubj~)}(hhh]h)}(harguments for the format stringh]harguments for the format string}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j}hjgubeh}(h]h ]h"]h$]h&]uh1j]hjhMhj+ubeh}(h]h ]h"]h$]h&]uh1jXhjubh)}(h**Description**h]jC)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jBhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjubh)}(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.}(hjhjhhhNhNubah}(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&]uh1j8hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpr_notice (C macro) c.pr_noticehNtauh1jhjhhhNhNubj)}(hhh](j)}(h pr_noticeh]j)}(h pr_noticeh]j)}(h pr_noticeh]j)}(hjh]h pr_notice}(hhhjhhhNhNubah}(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&]hhjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjuh1jhhhjhNhNubh)}(h``pr_notice (fmt, ...)``h]j )}(hj$h]hpr_notice (fmt, ...)}(hhhj&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.hhMhjhhubh)}(hhh]h)}(hPrint a notice-level messageh]hPrint a notice-level message}(hj?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&]uh1hhjhhhNhNubj9)}(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]jC)}(hjXh]h Parameters}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jBhjVubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM hjRubjY)}(hhh](j^)}(h``fmt`` format string h](jd)}(h``fmt``h]j )}(hjwh]hfmt}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjuubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjqubj~)}(hhh]h)}(h format stringh]h format string}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j}hjqubeh}(h]h ]h"]h$]h&]uh1j]hjhMhjnubj^)}(h(``...`` arguments for the format string h](jd)}(h``...``h]j )}(hjh]h...}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM hjubj~)}(hhh]h)}(harguments for the format stringh]harguments for the format string}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j}hjubeh}(h]h ]h"]h$]h&]uh1j]hjhM hjnubeh}(h]h ]h"]h$]h&]uh1jXhjRubh)}(h**Description**h]jC)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jBhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM hjRubh)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM hjRubeh}(h]h ] kernelindentah"]h$]h&]uh1j8hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpr_info (C macro) c.pr_infohNtauh1jhjhhhNhNubj)}(hhh](j)}(hpr_infoh]j)}(hpr_infoh]j)}(hpr_infoh]j)}(hj*h]hpr_info}(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(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(hhhjGhMubah}(h]j#ah ](jjeh"]h$]h&]juh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj%hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj%hhhjGhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjajjajuh1jhhhjhNhNubh)}(h``pr_info (fmt, ...)``h]j )}(hjgh]hpr_info (fmt, ...)}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1j hjeubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjhhubh)}(hhh]h)}(hPrint an info-level messageh]hPrint an info-level message}(hjhjhhhNhNubah}(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&]uh1hhjhhhNhNubj9)}(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]jC)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jBhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjubjY)}(hhh](j^)}(h``fmt`` format string h](jd)}(h``fmt``h]j )}(hjh]hfmt}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjubj~)}(hhh]h)}(h format stringh]h format string}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j}hjubeh}(h]h ]h"]h$]h&]uh1j]hjhMhjubj^)}(h(``...`` arguments for the format string h](jd)}(h``...``h]j )}(hjh]h...}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjubj~)}(hhh]h)}(harguments for the format stringh]harguments for the format string}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1j}hjubeh}(h]h ]h"]h$]h&]uh1j]hjhMhjubeh}(h]h ]h"]h$]h&]uh1jXhjubh)}(h**Description**h]jC)}(hj.h]h Description}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jBhj,ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjubh)}(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.}(hjFhjDhhhNhNubah}(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&]uh1j8hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpr_cont (C macro) c.pr_conthNtauh1jhjhhhNhNubj)}(hhh](j)}(hpr_conth]j)}(hpr_conth]j)}(hpr_conth]j)}(hjmh]hpr_cont}(hhhjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ](jjeh"]h$]h&]hhuh1jhjohhh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM%ubah}(h]h ]h"]h$]h&]hhjuh1jjjhjkhhhjhM%ubah}(h]jfah ](jjeh"]h$]h&]juh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM$hjhhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhhjhM%ubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjuh1jhhhjhNhNubh)}(h``pr_cont (fmt, ...)``h]j )}(hjh]hpr_cont (fmt, ...)}(hhhjhhhNhNubah}(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&hjhhubh)}(hhh]h)}(h2Continues a previous log message in the same line.h]h2Continues a previous log message in the same line.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.h];hMhjubah}(h]h ]h"]h$]h&]uh1hhjhhhNhNubj9)}(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]jC)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jBhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM hjubjY)}(hhh](j^)}(h``fmt`` format string h](jd)}(h``fmt``h]j )}(hjh]hfmt}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhjubj~)}(hhh]h)}(h format stringh]h format string}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j}hjubeh}(h]h ]h"]h$]h&]uh1j]hjhMhjubj^)}(h(``...`` arguments for the format string h](jd)}(h``...``h]j )}(hj6h]h...}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj4ubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMhj0ubj~)}(hhh]h)}(harguments for the format stringh]harguments for the format string}(hjQhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjLubah}(h]h ]h"]h$]h&]uh1j}hj0ubeh}(h]h ]h"]h$]h&]uh1j]hjKhMhjubeh}(h]h ]h"]h$]h&]uh1jXhjubh)}(h**Description**h]jC)}(hjqh]h Description}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1jBhjoubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM hjubh)}(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.}(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.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&]uh1j8hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpr_devel (C macro) c.pr_develhNtauh1jhjhhhNhNubj)}(hhh](j)}(hpr_develh]j)}(hpr_develh]j)}(hpr_develh]j)}(hjh]hpr_devel}(hhhjhhhNhNubah}(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.hhM2ubah}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhM2ubah}(h]jah ](jjeh"]h$]h&]juh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM1hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhM2ubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjuh1jhhhjhNhNubh)}(h``pr_devel (fmt, ...)``h]j )}(hjh]hpr_devel (fmt, ...)}(hhhjhhhNhNubah}(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.hhM3hjhhubh)}(hhh]h)}(h)Print a debug-level message conditionallyh]h)Print a debug-level message conditionally}(hj 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&]uh1hhjhhhNhNubj9)}(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]jC)}(hj"h]h Parameters}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jBhj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM,hjubjY)}(hhh](j^)}(h``fmt`` format string h](jd)}(h``fmt``h]j )}(hjAh]hfmt}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?ubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM)hj;ubj~)}(hhh]h)}(h format stringh]h format string}(hj\hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhM)hjWubah}(h]h ]h"]h$]h&]uh1j}hj;ubeh}(h]h ]h"]h$]h&]uh1j]hjVhM)hj8ubj^)}(h(``...`` arguments for the format string h](jd)}(h``...``h]j )}(hjzh]h...}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjxubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM*hjtubj~)}(hhh]h)}(harguments for the format stringh]harguments for the format string}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM*hjubah}(h]h ]h"]h$]h&]uh1j}hjtubeh}(h]h ]h"]h$]h&]uh1j]hjhM*hj8ubeh}(h]h ]h"]h$]h&]uh1jXhjubh)}(h**Description**h]jC)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jBhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM,hjubh)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM,hjubh)}(h/It uses pr_fmt() to generate the format string.h]h/It uses pr_fmt() to generate the format string.}(hjhjhhhNhNubah}(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&]uh1j8hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpr_debug (C macro) c.pr_debughNtauh1jhjhhhNhNubj)}(hhh](j)}(hpr_debugh]j)}(hpr_debugh]j)}(hpr_debugh]j)}(hjh]hpr_debug}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMLubah}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj hMLubah}(h]jah ](jjeh"]h$]h&]juh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj hMLubeh}(h]h ](jmacroeh"]h$]h&]jjjj:jj:juh1jhhhjhNhNubh)}(h``pr_debug (fmt, ...)``h]j )}(hj@h]hpr_debug (fmt, ...)}(hhhjBhhhNhNubah}(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.hhMMhjhhubh)}(hhh]h)}(h)Print a debug-level message conditionallyh]h)Print a debug-level message conditionally}(hj[hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhM@hjVubah}(h]h ]h"]h$]h&]uh1hhjhhhNhNubj9)}(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]jC)}(hjth]h Parameters}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jBhjrubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMDhjnubjY)}(hhh](j^)}(h``fmt`` format string h](jd)}(h``fmt``h]j )}(hjh]hfmt}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMAhjubj~)}(hhh]h)}(h format stringh]h format string}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMAhjubah}(h]h ]h"]h$]h&]uh1j}hjubeh}(h]h ]h"]h$]h&]uh1j]hjhMAhjubj^)}(h(``...`` arguments for the format string h](jd)}(h``...``h]j )}(hjh]h...}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1jch^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMBhjubj~)}(hhh]h)}(harguments for the format stringh]harguments for the format string}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMBhjubah}(h]h ]h"]h$]h&]uh1j}hjubeh}(h]h ]h"]h$]h&]uh1j]hjhMBhjubeh}(h]h ]h"]h$]h&]uh1jXhjnubh)}(h**Description**h]jC)}(hjh]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1jBhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMDhjnubh)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMDhjnubh)}(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).}(hj.hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:110: ./include/linux/printk.hhMHhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1j8hjhhhNhNubeh}(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_handlerjterror_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.confapep_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_spacefile_insertion_enabled raw_enabledKline_length_limitM'syntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_link embed_imagesenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jOjLjGjDu nametypes}(jONjGNuh}(jLhjDjjjj j j j j j j j jZj_jjjjj#j(jfjkjjjju 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.}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypeINFOlineK2sourcehuh1jhjubatransform_messages] transformerN include_log] decorationNhhub.