€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ*/translations/zh_CN/core-api/printk-basics”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/zh_TW/core-api/printk-basics”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/it_IT/core-api/printk-basics”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/ja_JP/core-api/printk-basics”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/ko_KR/core-api/printk-basics”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/pt_BR/core-api/printk-basics”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/sp_SP/core-api/printk-basics”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒD/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒMessage logging with printk”h]”hŒMessage logging with printk”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ 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:”…”�”}”(hhßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhŒ 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.”…”�”}”(hhþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hhúubah}”(h]”h ]”h"]”h$]”h&]”uh1høhhõubhù)�”}”(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]”(hŒ–the format string, while largely compatible with C99, doesn’t follow the exact same specification. It has some extensions and a few limitations (no ”…”�”}”(hjh²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``%n``”h]”hŒ%n”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ/ or floating point conversion specifiers). See ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒD:ref:`How to get printk format specifiers right `”h]”hŒinline”“”)�”}”(hj4h]”hŒ)How to get printk format specifiers right”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-ref”eh"]”h$]”h&]”uh1j6hj2ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œcore-api/printk-basics”Œ refdomain”jCŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆŒ reftarget”Œprintk-specifiers”uh1hh³hÇh´KhjubhŒ.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1høhhõubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1hóh³hÇh´K hhïubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÇh´K hhÊh²hubhÞ)�”}”(hŒ¨All 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]”(hŒžAll 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 ”…”�”}”(hjuh²hh³Nh´Nubj)�”}”(hŒ ``dmesg``”h]”hŒdmesg”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjuubhŒ.”…”�”}”(hjuh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÞ)�”}”(hŒ&printk() is typically used like this::”h]”hŒ%printk() is typically used like this:”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhŒ literal_block”“”)�”}”(hŒ'printk(KERN_INFO "Message: %s\n", arg);”h]”hŒ'printk(KERN_INFO "Message: %s\n", arg);”…”�”}”hj¥sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j£h³hÇh´KhhÊh²hubhÞ)�”}”(hŒ where ``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]”(hŒwhere ”…”�”}”(hj³h²hh³Nh´Nubj)�”}”(hŒ ``KERN_INFO``”h]”hŒ KERN_INFO”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj³ubhŒ� 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:”…”�”}”(hj³h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÝhjÚubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÝhjÚubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K/uh1jÝhjÚubhŒthead”“”)�”}”(hhh]”hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hÞ)�”}”(hŒName”h]”hŒName”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hhh]”hÞ)�”}”(hŒString”h]”hŒString”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hhh]”hÞ)�”}”(hŒAlias function”h]”hŒAlias function”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jýhjÚubhŒtbody”“”)�”}”(hhh]”(j)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒ KERN_EMERG”h]”hŒ KERN_EMERG”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K!hjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj_ubj)�”}”(hhh]”hÞ)�”}”(hŒ"0"”h]”hŒ“0â€�”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K!hjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj_ubj)�”}”(hhh]”hÞ)�”}”(hŒ pr_emerg()”h]”hŒ pr_emerg()”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K!hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒ KERN_ALERT”h]”hŒ KERN_ALERT”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K#hj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­ubj)�”}”(hhh]”hÞ)�”}”(hŒ"1"”h]”hŒ“1â€�”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K#hjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­ubj)�”}”(hhh]”hÞ)�”}”(hŒ pr_alert()”h]”hŒ pr_alert()”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K#hjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒ KERN_CRIT”h]”hŒ KERN_CRIT”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K%hjþubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjûubj)�”}”(hhh]”hÞ)�”}”(hŒ"2"”h]”hŒ“2â€�”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K%hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjûubj)�”}”(hhh]”hÞ)�”}”(hŒ pr_crit()”h]”hŒ pr_crit()”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K%hj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒKERN_ERR”h]”hŒKERN_ERR”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K'hjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIubj)�”}”(hhh]”hÞ)�”}”(hŒ"3"”h]”hŒ“3â€�”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K'hjcubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIubj)�”}”(hhh]”hÞ)�”}”(hŒpr_err()”h]”hŒpr_err()”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K'hjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒ KERN_WARNING”h]”hŒ KERN_WARNING”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K)hjšubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj—ubj)�”}”(hhh]”hÞ)�”}”(hŒ"4"”h]”hŒ“4â€�”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K)hj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj—ubj)�”}”(hhh]”hÞ)�”}”(hŒ pr_warn()”h]”hŒ pr_warn()”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K)hjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒ KERN_NOTICE”h]”hŒ KERN_NOTICE”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K+hjèubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjåubj)�”}”(hhh]”hÞ)�”}”(hŒ"5"”h]”hŒ“5â€�”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K+hjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjåubj)�”}”(hhh]”hÞ)�”}”(hŒ pr_notice()”h]”hŒ pr_notice()”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K+hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjåubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒ KERN_INFO”h]”hŒ KERN_INFO”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K-hj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3ubj)�”}”(hhh]”hÞ)�”}”(hŒ"6"”h]”hŒ“6â€�”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K-hjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3ubj)�”}”(hhh]”hÞ)�”}”(hŒ pr_info()”h]”hŒ pr_info()”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K-hjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒ KERN_DEBUG”h]”hŒ KERN_DEBUG”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K/hj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubj)�”}”(hhh]”hÞ)�”}”(hŒ"7"”h]”hŒ“7â€�”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K/hj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubj)�”}”(hhh]”hÞ)�”}”(hŒ-pr_debug() and pr_devel() if DEBUG is defined”h]”hŒ-pr_debug() and pr_devel() if DEBUG is defined”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K/hj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒ KERN_DEFAULT”h]”hŒ KERN_DEFAULT”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K1hjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÏubj)�”}”(hhh]”hÞ)�”}”(hŒ""”h]”hŒ“â€�”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K1hjéubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÏubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhjÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒ KERN_CONT”h]”hŒ KERN_CONT”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K3hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hhh]”hÞ)�”}”(hŒ"c"”h]”hŒ“câ€�”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K3hj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hhh]”hÞ)�”}”(hŒ pr_cont()”h]”hŒ pr_cont()”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K3hj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZhjÚubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jØhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhhÊh²hh³hÇh´NubhÞ)�”}”(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]”(hŒÀThe 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 ”…”�”}”(hjph²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*console_loglevel*”h]”hŒconsole_loglevel”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjpubhŒY (a kernel variable). If the message priority is higher (lower log level value) than the ”…”�”}”(hjph²hh³Nh´Nubjy)�”}”(hŒ*console_loglevel*”h]”hŒconsole_loglevel”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjpubhŒ, the message will be printed to the console.”…”�”}”(hjph²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K7hhÊh²hubhÞ)�”}”(hŒPIf the log level is omitted, the message is printed with ``KERN_DEFAULT`` level.”h]”(hŒ9If the log level is omitted, the message is printed with ”…”�”}”(hj¤h²hh³Nh´Nubj)�”}”(hŒ``KERN_DEFAULT``”h]”hŒ KERN_DEFAULT”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¤ubhŒ level.”…”�”}”(hj¤h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K=hhÊh²hubhÞ)�”}”(hŒ3You can check the current *console_loglevel* with::”h]”(hŒYou can check the current ”…”�”}”(hjÄh²hh³Nh´Nubjy)�”}”(hŒ*console_loglevel*”h]”hŒconsole_loglevel”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjÄubhŒ with:”…”�”}”(hjÄh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K@hhÊh²hubj¤)�”}”(hŒ:$ cat /proc/sys/kernel/printk 4 4 1 7”h]”hŒ:$ cat /proc/sys/kernel/printk 4 4 1 7”…”�”}”hjäsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j£h³hÇh´KBhhÊh²hubhÞ)�”}”(hŒXThe result shows the *current*, *default*, *minimum* and *boot-time-default* log levels.”h]”(hŒThe result shows the ”…”�”}”(hjòh²hh³Nh´Nubjy)�”}”(hŒ *current*”h]”hŒcurrent”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjòubhŒ, ”…”�”}”(hjòh²hh³Nh´Nubjy)�”}”(hŒ *default*”h]”hŒdefault”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjòubhŒ, ”…”�”}”hjòsbjy)�”}”(hŒ *minimum*”h]”hŒminimum”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjòubhŒ and ”…”�”}”(hjòh²hh³Nh´Nubjy)�”}”(hŒ*boot-time-default*”h]”hŒboot-time-default”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjòubhŒ log levels.”…”�”}”(hjòh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KEhhÊh²hubhÞ)�”}”(hŒ™To 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]”(hŒITo change the current console_loglevel simply write the desired level to ”…”�”}”(hjHh²hh³Nh´Nubj)�”}”(hŒ``/proc/sys/kernel/printk``”h]”hŒ/proc/sys/kernel/printk”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjHubhŒ4. For example, to print all messages to the console:”…”�”}”(hjHh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KHhhÊh²hubj¤)�”}”(hŒ"# echo 8 > /proc/sys/kernel/printk”h]”hŒ"# echo 8 > /proc/sys/kernel/printk”…”�”}”hjhsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j£h³hÇh´KKhhÊh²hubhÞ)�”}”(hŒAnother way, using ``dmesg``::”h]”(hŒAnother way, using ”…”�”}”(hjvh²hh³Nh´Nubj)�”}”(hŒ ``dmesg``”h]”hŒdmesg”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjvubhŒ:”…”�”}”(hjvh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KMhhÊh²hubj¤)�”}”(hŒ # dmesg -n 5”h]”hŒ # dmesg -n 5”…”�”}”hj–sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j£h³hÇh´KOhhÊh²hubhÞ)�”}”(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 ”…”�”}”(hj¤h²hh³Nh´Nubj)�”}”(hŒ ``dmesg(1)``”h]”hŒdmesg(1)”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¤ubhŒ for more information.”…”�”}”(hj¤h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KQhhÊh²hubhÞ)�”}”(hŒ™As 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 ”…”�”}”(hjÄh²hh³Nh´Nubj)�”}”(hŒ ``pr_*()``”h]”hŒpr_*()”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÄubhŒ` aliases for logging. This family of macros embed the log level in the macro names. For example:”…”�”}”(hjÄh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KThhÊh²hubj¤)�”}”(hŒ*pr_info("Info message no. %d\n", msg_num);”h]”hŒ*pr_info("Info message no. %d\n", msg_num);”…”�”}”hjäsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j£h³hÇh´KXhhÊh²hubhÞ)�”}”(hŒprints a ``KERN_INFO`` message.”h]”(hŒ prints a ”…”�”}”(hjòh²hh³Nh´Nubj)�”}”(hŒ ``KERN_INFO``”h]”hŒ KERN_INFO”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjòubhŒ message.”…”�”}”(hjòh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KZhhÊh²hubhÞ)�”}”(hŒïBesides 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]”(hŒÖBesides 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 ”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒ ``#include``”h]”hŒ#include”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ directive):”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K\hhÊh²hubj¤)�”}”(hŒ;#define pr_fmt(fmt) "%s:%s: " fmt, KBUILD_MODNAME, __func__”h]”hŒ;#define pr_fmt(fmt) "%s:%s: " fmt, KBUILD_MODNAME, __func__”…”�”}”hj2sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j£h³hÇh´KahhÊh²hubhÞ)�”}”(hŒmwould prefix every pr_*() message in that file with the module and function name that originated the message.”h]”hŒmwould prefix every pr_*() message in that file with the module and function name that originated the message.”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KchhÊh²hubhÞ)�”}”(hŒÔFor 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]”(hŒ‚For debugging purposes there are also two conditionally-compiled macros: pr_debug() and pr_devel(), which are compiled-out unless ”…”�”}”(hjNh²hh³Nh´Nubj)�”}”(hŒ ``DEBUG``”h]”hŒDEBUG”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNubhŒ (or also ”…”�”}”(hjNh²hh³Nh´Nubj)�”}”(hŒ``CONFIG_DYNAMIC_DEBUG``”h]”hŒCONFIG_DYNAMIC_DEBUG”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNubhŒ' in the case of pr_debug()) is defined.”…”�”}”(hjNh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KfhhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ,Avoiding lockups from excessive printk() use”h]”hŒ,Avoiding lockups from excessive printk() use”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj€h²hh³hÇh´KkubhŒnote”“”)�”}”(hŒÃThis section is relevant only for legacy console drivers (those not using the nbcon API) and !PREEMPT_RT kernels. Once all console drivers are updated to nbcon, this documentation can be removed.”h]”hÞ)�”}”(hŒÃThis section is relevant only for legacy console drivers (those not using the nbcon API) and !PREEMPT_RT kernels. Once all console drivers are updated to nbcon, this documentation can be removed.”h]”hŒÃThis section is relevant only for legacy console drivers (those not using the nbcon API) and !PREEMPT_RT kernels. Once all console drivers are updated to nbcon, this documentation can be removed.”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kohj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hj€h²hh³hÇh´NubhÞ)�”}”(hXkUsing ``printk()`` in hot paths (such as interrupt handlers, timer callbacks, or high-frequency network receive routines) with legacy consoles (e.g., ``console=ttyS0``) may cause lockups. Legacy consoles synchronously acquire ``console_sem`` and block while flushing messages, potentially disabling interrupts long enough to trigger hard or soft lockup detectors.”h]”(hŒUsing ”…”�”}”(hj«h²hh³Nh´Nubj)�”}”(hŒ ``printk()``”h]”hŒprintk()”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj«ubhŒ„ in hot paths (such as interrupt handlers, timer callbacks, or high-frequency network receive routines) with legacy consoles (e.g., ”…”�”}”(hj«h²hh³Nh´Nubj)�”}”(hŒ``console=ttyS0``”h]”hŒ console=ttyS0”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj«ubhŒ;) may cause lockups. Legacy consoles synchronously acquire ”…”�”}”(hj«h²hh³Nh´Nubj)�”}”(hŒ``console_sem``”h]”hŒ console_sem”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj«ubhŒz and block while flushing messages, potentially disabling interrupts long enough to trigger hard or soft lockup detectors.”…”�”}”(hj«h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kshj€h²hubhÞ)�”}”(hŒTo avoid this:”h]”hŒTo avoid this:”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kzhj€h²hubhô)�”}”(hhh]”(hù)�”}”(hŒ€Use rate-limited variants (e.g., ``pr_*_ratelimited()``) or one-time macros (e.g., ``pr_*_once()``) to reduce message frequency.”h]”hÞ)�”}”(hŒ€Use rate-limited variants (e.g., ``pr_*_ratelimited()``) or one-time macros (e.g., ``pr_*_once()``) to reduce message frequency.”h]”(hŒ!Use rate-limited variants (e.g., ”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒ``pr_*_ratelimited()``”h]”hŒpr_*_ratelimited()”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ) or one-time macros (e.g., ”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒ``pr_*_once()``”h]”hŒ pr_*_once()”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ) to reduce message frequency.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K|hjubah}”(h]”h ]”h"]”h$]”h&]”uh1høhjýh²hh³hÇh´Nubhù)�”}”(hŒ|Assign lower log levels (e.g., ``KERN_DEBUG``) to non-essential messages and filter console output via ``console_loglevel``.”h]”hÞ)�”}”(hŒ|Assign lower log levels (e.g., ``KERN_DEBUG``) to non-essential messages and filter console output via ``console_loglevel``.”h]”(hŒAssign lower log levels (e.g., ”…”�”}”(hj@h²hh³Nh´Nubj)�”}”(hŒ``KERN_DEBUG``”h]”hŒ KERN_DEBUG”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj@ubhŒ:) to non-essential messages and filter console output via ”…”�”}”(hj@h²hh³Nh´Nubj)�”}”(hŒ``console_loglevel``”h]”hŒconsole_loglevel”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj@ubhŒ.”…”�”}”(hj@h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K~hj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1høhjýh²hh³hÇh´Nubhù)�”}”(hŒ�Use ``printk_deferred()`` to log messages immediately to the ringbuffer and defer console printing. This is a workaround for legacy consoles.”h]”hÞ)�”}”(hŒ�Use ``printk_deferred()`` to log messages immediately to the ringbuffer and defer console printing. This is a workaround for legacy consoles.”h]”(hŒUse ”…”�”}”(hj|h²hh³Nh´Nubj)�”}”(hŒ``printk_deferred()``”h]”hŒprintk_deferred()”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj|ubhŒt to log messages immediately to the ringbuffer and defer console printing. This is a workaround for legacy consoles.”…”�”}”(hj|h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K€hjxubah}”(h]”h ]”h"]”h$]”h&]”uh1høhjýh²hh³hÇh´Nubhù)�”}”(hŒÅPort legacy console drivers to the non-blocking ``nbcon`` API (indicated by ``CON_NBCON``). This is the preferred solution, as nbcon consoles offload message printing to a dedicated kernel thread. ”h]”hÞ)�”}”(hŒÄPort legacy console drivers to the non-blocking ``nbcon`` API (indicated by ``CON_NBCON``). This is the preferred solution, as nbcon consoles offload message printing to a dedicated kernel thread.”h]”(hŒ0Port legacy console drivers to the non-blocking ”…”�”}”(hj¦h²hh³Nh´Nubj)�”}”(hŒ ``nbcon``”h]”hŒnbcon”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦ubhŒ API (indicated by ”…”�”}”(hj¦h²hh³Nh´Nubj)�”}”(hŒ ``CON_NBCON``”h]”hŒ CON_NBCON”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦ubhŒk). This is the preferred solution, as nbcon consoles offload message printing to a dedicated kernel thread.”…”�”}”(hj¦h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K‚hj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1høhjýh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jmjnuh1hóh³hÇh´K|hj€h²hubhÞ)�”}”(hŒ¡For temporary debugging, ``trace_printk()`` can be used, but it must not appear in mainline code. See ``Documentation/trace/debugging.rst`` for more information.”h]”(hŒFor temporary debugging, ”…”�”}”(hjäh²hh³Nh´Nubj)�”}”(hŒ``trace_printk()``”h]”hŒtrace_printk()”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjäubhŒ; can be used, but it must not appear in mainline code. See ”…”�”}”(hjäh²hh³Nh´Nubj)�”}”(hŒ%``Documentation/trace/debugging.rst``”h]”hŒ!Documentation/trace/debugging.rst”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjäubhŒ for more information.”…”�”}”(hjäh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K†hj€h²hubhÞ)�”}”(hŒ©If more permanent output is needed in a hot path, trace events can be used. See ``Documentation/trace/events.rst`` and ``samples/trace_events/trace-events-sample.[ch]``.”h]”(hŒPIf more permanent output is needed in a hot path, trace events can be used. See ”…”�”}”(hj h²hh³Nh´Nubj)�”}”(hŒ"``Documentation/trace/events.rst``”h]”hŒDocumentation/trace/events.rst”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhŒ and ”…”�”}”(hj h²hh³Nh´Nubj)�”}”(hŒ1``samples/trace_events/trace-events-sample.[ch]``”h]”hŒ-samples/trace_events/trace-events-sample.[ch]”…”�”}”(hj0 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhŒ.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KŠhj€h²hubeh}”(h]”Œ*avoiding-lockups-from-excessive-printk-use”ah ]”h"]”Œ,avoiding lockups from excessive printk() use”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KkubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒFunction reference”h]”hŒFunction reference”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjP h²hh³hÇh´K�ubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œpr_fmt (C macro)”Œc.pr_fmt”hNt”auh1ja hjP h²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒpr_fmt”h]”hŒdesc_signature_line”“”)�”}”(hŒpr_fmt”h]”hŒ desc_name”“”)�”}”(hŒpr_fmt”h]”hŒ desc_sig_name”“”)�”}”(hj{ h]”hŒpr_fmt”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1j‰ hj… ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”hÅhÆuh1jƒ hj h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M„ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒ add_permalink”ˆuh1j} Œsphinx_line_type”Œ declarator”hjy h²hh³j¡ h´M„ubah}”(h]”jp ah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jw h³j¡ h´M„hjt h²hubhŒ desc_content”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¶ hjt h²hh³j¡ h´M„ubeh}”(h]”h ]”(Œc”Œmacro”eh"]”h$]”h&]”Œdomain”jÄ Œobjtype”jÅ Œdesctype”jÅ Œnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jr h²hhjP h³Nh´NubhÞ)�”}”(hŒ``pr_fmt (fmt)``”h]”j)�”}”(hjÑ h]”hŒ pr_fmt (fmt)”…”�”}”(hjÓ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÏ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M†hjP h²hubhî)�”}”(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 string”h]”hŒ>used by the pr_*() macros to generate the printk format string”…”�”}”(hjë h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M„hjç ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jù h´M„hjP h²hubhŒ 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]”hŒstrong”“”)�”}”(hj h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mˆhj ubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒ1``fmt`` format string passed from a pr_*() macro ”h]”(hŒterm”“”)�”}”(hŒ``fmt``”h]”j)�”}”(hj/ h]”hŒfmt”…”�”}”(hj1 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj- ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M…hj' ubhŒ definition”“”)�”}”(hhh]”hÞ)�”}”(hŒ(format string passed from a pr_*() macro”h]”hŒ(format string passed from a pr_*() macro”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jD h´M…hjG ubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hj' ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³jD h´M…hj" ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubhÞ)�”}”(hŒ**Description**”h]”j )�”}”(hjl h]”hŒ Description”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M‡hj ubhÞ)�”}”(hŒÓ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:”h]”hŒÓ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:”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M†hj ubhî)�”}”(hŒ,#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt ”h]”hÞ)�”}”(hŒ+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt”h]”hŒ/#define pr_fmt(fmt) KBUILD_MODNAME “: “ fmt”…”�”}”(hj• h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MŠhj‘ ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j£ h´MŠhj ubhÞ)�”}”(hŒPwould prefix all pr_info, pr_emerg... messages in the file with the module name.”h]”hŒPwould prefix all pr_info, pr_emerg... messages in the file with the module name.”…”�”}”(hjª h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MŒhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j hjP h²hh³Nh´Nubjb )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jn Œprintk (C macro)”Œc.printk”hNt”auh1ja hjP h²hh³Nh´Nubjs )�”}”(hhh]”(jx )�”}”(hŒprintk”h]”j~ )�”}”(hŒprintk”h]”j„ )�”}”(hŒprintk”h]”jŠ )�”}”(hjÓ h]”hŒprintk”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1j‰ hjÙ ubah}”(h]”h ]”(jœ j� eh"]”h$]”h&]”hÅhÆuh1jƒ hjÕ h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mèubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¨ ˆuh1j} j© jª hjÑ h²hh³jð h´Mèubah}”(h]”jÌ ah ]”(j® j¯ eh"]”h$]”h&]”j³ ˆj´ )jµ huh1jw h³jð h´MèhjÎ h²hubj· )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¶ hjÎ h²hh³jð h´Mèubeh}”(h]”h ]”(jÄ Œmacro”eh"]”h$]”h&]”jÉ jÄ jÊ j jË j jÌ ‰jÍ ‰jÎ ‰uh1jr h²hhjP h³Nh´NubhÞ)�”}”(hŒ``printk (fmt, ...)``”h]”j)�”}”(hj h]”hŒprintk (fmt, ...)”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MêhjP h²hubhî)�”}”(hŒprint a kernel message ”h]”hÞ)�”}”(hŒprint a kernel message”h]”hŒprint a kernel message”…”�”}”(hj) h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mèhj% ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j7 h´MèhjP h²hubj )�”}”(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 )�”}”(hjD h]”hŒ Parameters”…”�”}”(hjF h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjB ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mìhj> ubj! )�”}”(hhh]”(j& )�”}”(hŒ``fmt`` format string ”h]”(j, )�”}”(hŒ``fmt``”h]”j)�”}”(hjc h]”hŒfmt”…”�”}”(hje h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhja ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Méhj] ubjF )�”}”(hhh]”hÞ)�”}”(hŒ format string”h]”hŒ format string”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jx h´Méhjy ubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hj] ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³jx h´MéhjZ ubj& )�”}”(hŒ``...`` variable arguments ”h]”(j, )�”}”(hŒ``...``”h]”j)�”}”(hjœ h]”hŒ...”…”�”}”(hjž h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjš ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Khj– ubjF )�”}”(hhh]”hÞ)�”}”(hŒvariable arguments”h]”hŒvariable arguments”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j± h´Khj² ubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hj– ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³j± h´KhjZ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj> ubhÞ)�”}”(hŒ**Description**”h]”j )�”}”(hj× h]”hŒ Description”…”�”}”(hjÙ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÕ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Khj> ubhÞ)�”}”(hŒHThis is printk(). It can be called from any context. We want it to work.”h]”hŒHThis is printk(). It can be called from any context. We want it to work.”…”�”}”(hjí h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mêhj> 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ü h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mìhj> 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 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mïhj> ubhÞ)�”}”(hŒÂ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.”h]”hŒÂ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.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mõhj> ubhÞ)�”}”(hŒSee also: printf(3)”h]”hŒSee also: printf(3)”…”�”}”(hj) h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mùhj> ubhÞ)�”}”(hŒHSee the vsnprintf() documentation for format string extensions over C99.”h]”hŒHSee the vsnprintf() documentation for format string extensions over C99.”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mühj> ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j hjP h²hh³Nh´Nubjb )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jn Œpr_emerg (C macro)”Œ c.pr_emerg”hNt”auh1ja hjP h²hh³Nh´Nubjs )�”}”(hhh]”(jx )�”}”(hŒpr_emerg”h]”j~ )�”}”(hŒpr_emerg”h]”j„ )�”}”(hŒpr_emerg”h]”jŠ )�”}”(hja h]”hŒpr_emerg”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1j‰ hjg ubah}”(h]”h ]”(jœ j� eh"]”h$]”h&]”hÅhÆuh1jƒ hjc h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¨ ˆuh1j} j© jª hj_ h²hh³j~ h´Mubah}”(h]”jZ ah ]”(j® j¯ eh"]”h$]”h&]”j³ ˆj´ )jµ huh1jw h³j~ h´Mhj\ h²hubj· )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¶ hj\ h²hh³j~ h´Mubeh}”(h]”h ]”(jÄ Œmacro”eh"]”h$]”h&]”jÉ jÄ jÊ j— jË j— jÌ ‰jÍ ‰jÎ ‰uh1jr h²hhjP h³Nh´NubhÞ)�”}”(hŒ``pr_emerg (fmt, ...)``”h]”j)�”}”(hj� h]”hŒpr_emerg (fmt, ...)”…”�”}”(hjŸ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj› ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MhjP h²hubhî)�”}”(hŒ!Print an emergency-level message ”h]”hÞ)�”}”(hŒ Print an emergency-level message”h]”hŒ Print an emergency-level message”…”�”}”(hj· h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mhj³ ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jÅ h´MhjP h²hubj )�”}”(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Ô h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÐ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MhjÌ ubj! )�”}”(hhh]”(j& )�”}”(hŒ``fmt`` format string ”h]”(j, )�”}”(hŒ``fmt``”h]”j)�”}”(hjñ h]”hŒfmt”…”�”}”(hjó h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjï ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mhjë ubjF )�”}”(hhh]”hÞ)�”}”(hŒ format string”h]”hŒ format string”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j h´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hjë ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³j h´Mhjè ubj& )�”}”(hŒ(``...`` arguments for the format string ”h]”(j, )�”}”(hŒ``...``”h]”j)�”}”(hj* h]”hŒ...”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj( ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mhj$ ubjF )�”}”(hhh]”hÞ)�”}”(hŒarguments for the format string”h]”hŒarguments for the format string”…”�”}”(hjC h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j? h´Mhj@ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hj$ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³j? h´Mhjè ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÌ ubhÞ)�”}”(hŒ**Description**”h]”j )�”}”(hje h]”hŒ Description”…”�”}”(hjg h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjc ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MhjÌ ubhÞ)�”}”(hŒhThis macro expands to a printk with KERN_EMERG loglevel. It uses pr_fmt() to generate the format string.”h]”hŒhThis macro expands to a printk with KERN_EMERG loglevel. It uses pr_fmt() to generate the format string.”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MhjÌ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j hjP h²hh³Nh´Nubjb )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jn Œpr_alert (C macro)”Œ c.pr_alert”hNt”auh1ja hjP h²hh³Nh´Nubjs )�”}”(hhh]”(jx )�”}”(hŒpr_alert”h]”j~ )�”}”(hŒpr_alert”h]”j„ )�”}”(hŒpr_alert”h]”jŠ )�”}”(hj¤ h]”hŒpr_alert”…”�”}”(hj® h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1j‰ hjª ubah}”(h]”h ]”(jœ j� eh"]”h$]”h&]”hÅhÆuh1jƒ hj¦ h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¨ ˆuh1j} j© jª hj¢ h²hh³jÁ h´Mubah}”(h]”j� ah ]”(j® j¯ eh"]”h$]”h&]”j³ ˆj´ )jµ huh1jw h³jÁ h´MhjŸ h²hubj· )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¶ hjŸ h²hh³jÁ h´Mubeh}”(h]”h ]”(jÄ Œmacro”eh"]”h$]”h&]”jÉ jÄ jÊ jÚ jË jÚ jÌ ‰jÍ ‰jÎ ‰uh1jr h²hhjP h³Nh´NubhÞ)�”}”(hŒ``pr_alert (fmt, ...)``”h]”j)�”}”(hjà h]”hŒpr_alert (fmt, ...)”…”�”}”(hjâ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MhjP h²hubhî)�”}”(hŒPrint an alert-level message ”h]”hÞ)�”}”(hŒPrint an alert-level message”h]”hŒPrint an alert-level message”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mhjö ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jh´MhjP h²hubj )�”}”(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 )�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mhjubj! )�”}”(hhh]”(j& )�”}”(hŒ``fmt`` format string ”h]”(j, )�”}”(hŒ``fmt``”h]”j)�”}”(hj4h]”hŒfmt”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mhj.ubjF )�”}”(hhh]”hÞ)�”}”(hŒ format string”h]”hŒ format string”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jIh´MhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hj.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³jIh´Mhj+ubj& )�”}”(hŒ(``...`` arguments for the format string ”h]”(j, )�”}”(hŒ``...``”h]”j)�”}”(hjmh]”hŒ...”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MhjgubjF )�”}”(hhh]”hÞ)�”}”(hŒarguments for the format string”h]”hŒarguments for the format string”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j‚h´Mhjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³j‚h´Mhj+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjubhÞ)�”}”(hŒ**Description**”h]”j )�”}”(hj¨h]”hŒ Description”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MhjubhÞ)�”}”(hŒhThis macro expands to a printk with KERN_ALERT loglevel. It uses pr_fmt() to generate the format string.”h]”hŒhThis macro expands to a printk with KERN_ALERT loglevel. It uses pr_fmt() to generate the format string.”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j hjP h²hh³Nh´Nubjb )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jn Œpr_crit (C macro)”Œ c.pr_crit”hNt”auh1ja hjP h²hh³Nh´Nubjs )�”}”(hhh]”(jx )�”}”(hŒpr_crit”h]”j~ )�”}”(hŒpr_crit”h]”j„ )�”}”(hŒpr_crit”h]”jŠ )�”}”(hjçh]”hŒpr_crit”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1j‰ hjíubah}”(h]”h ]”(jœ j� eh"]”h$]”h&]”hÅhÆuh1jƒ hjéh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¨ ˆuh1j} j© jª hjåh²hh³jh´Mubah}”(h]”jàah ]”(j® j¯ eh"]”h$]”h&]”j³ ˆj´ )jµ huh1jw h³jh´Mhjâh²hubj· )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¶ hjâh²hh³jh´Mubeh}”(h]”h ]”(jÄ Œmacro”eh"]”h$]”h&]”jÉ jÄ jÊ jjË jjÌ ‰jÍ ‰jÎ ‰uh1jr h²hhjP h³Nh´NubhÞ)�”}”(hŒ``pr_crit (fmt, ...)``”h]”j)�”}”(hj#h]”hŒpr_crit (fmt, ...)”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MhjP h²hubhî)�”}”(hŒPrint a critical-level message ”h]”hÞ)�”}”(hŒPrint a critical-level message”h]”hŒPrint a critical-level message”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mhj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jKh´MhjP h²hubj )�”}”(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 )�”}”(hjXh]”hŒ Parameters”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MhjRubj! )�”}”(hhh]”(j& )�”}”(hŒ``fmt`` format string ”h]”(j, )�”}”(hŒ``fmt``”h]”j)�”}”(hjwh]”hŒfmt”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MhjqubjF )�”}”(hhh]”hÞ)�”}”(hŒ format string”h]”hŒ format string”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jŒh´Mhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hjqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³jŒh´Mhjnubj& )�”}”(hŒ(``...`` arguments for the format string ”h]”(j, )�”}”(hŒ``...``”h]”j)�”}”(hj°h]”hŒ...”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MhjªubjF )�”}”(hhh]”hÞ)�”}”(hŒarguments for the format string”h]”hŒarguments for the format string”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÅh´MhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hjªubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³jÅh´Mhjnubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjRubhÞ)�”}”(hŒ**Description**”h]”j )�”}”(hjëh]”hŒ Description”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjéubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MhjRubhÞ)�”}”(hŒgThis macro expands to a printk with KERN_CRIT loglevel. It uses pr_fmt() to generate the format string.”h]”hŒgThis macro expands to a printk with KERN_CRIT loglevel. It uses pr_fmt() to generate the format string.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MhjRubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j hjP h²hh³Nh´Nubjb )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jn Œpr_err (C macro)”Œc.pr_err”hNt”auh1ja hjP h²hh³Nh´Nubjs )�”}”(hhh]”(jx )�”}”(hŒpr_err”h]”j~ )�”}”(hŒpr_err”h]”j„ )�”}”(hŒpr_err”h]”jŠ )�”}”(hj*h]”hŒpr_err”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1j‰ hj0ubah}”(h]”h ]”(jœ j� eh"]”h$]”h&]”hÅhÆuh1jƒ hj,h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M"ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¨ ˆuh1j} j© jª hj(h²hh³jGh´M"ubah}”(h]”j#ah ]”(j® j¯ eh"]”h$]”h&]”j³ ˆj´ )jµ huh1jw h³jGh´M"hj%h²hubj· )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¶ hj%h²hh³jGh´M"ubeh}”(h]”h ]”(jÄ Œmacro”eh"]”h$]”h&]”jÉ jÄ jÊ j`jË j`jÌ ‰jÍ ‰jÎ ‰uh1jr h²hhjP h³Nh´NubhÞ)�”}”(hŒ``pr_err (fmt, ...)``”h]”j)�”}”(hjfh]”hŒpr_err (fmt, ...)”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M$hjP h²hubhî)�”}”(hŒPrint an error-level message ”h]”hÞ)�”}”(hŒPrint an error-level message”h]”hŒPrint an error-level message”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M"hj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jŽh´M"hjP h²hubj )�”}”(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 )�”}”(hj›h]”hŒ Parameters”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M&hj•ubj! )�”}”(hhh]”(j& )�”}”(hŒ``fmt`` format string ”h]”(j, )�”}”(hŒ``fmt``”h]”j)�”}”(hjºh]”hŒfmt”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M#hj´ubjF )�”}”(hhh]”hÞ)�”}”(hŒ format string”h]”hŒ format string”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÏh´M#hjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hj´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³jÏh´M#hj±ubj& )�”}”(hŒ(``...`` arguments for the format string ”h]”(j, )�”}”(hŒ``...``”h]”j)�”}”(hjóh]”hŒ...”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M$hjíubjF )�”}”(hhh]”hÞ)�”}”(hŒarguments for the format string”h]”hŒarguments for the format string”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jh´M$hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hjíubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³jh´M$hj±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj•ubhÞ)�”}”(hŒ**Description**”h]”j )�”}”(hj.h]”hŒ Description”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M&hj•ubhÞ)�”}”(hŒfThis macro expands to a printk with KERN_ERR loglevel. It uses pr_fmt() to generate the format string.”h]”hŒfThis macro expands to a printk with KERN_ERR loglevel. It uses pr_fmt() to generate the format string.”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M%hj•ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j hjP h²hh³Nh´Nubjb )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jn Œpr_warn (C macro)”Œ c.pr_warn”hNt”auh1ja hjP h²hh³Nh´Nubjs )�”}”(hhh]”(jx )�”}”(hŒpr_warn”h]”j~ )�”}”(hŒpr_warn”h]”j„ )�”}”(hŒpr_warn”h]”jŠ )�”}”(hjmh]”hŒpr_warn”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1j‰ hjsubah}”(h]”h ]”(jœ j� eh"]”h$]”h&]”hÅhÆuh1jƒ hjoh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M,ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¨ ˆuh1j} j© jª hjkh²hh³jŠh´M,ubah}”(h]”jfah ]”(j® j¯ eh"]”h$]”h&]”j³ ˆj´ )jµ huh1jw h³jŠh´M,hjhh²hubj· )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¶ hjhh²hh³jŠh´M,ubeh}”(h]”h ]”(jÄ Œmacro”eh"]”h$]”h&]”jÉ jÄ jÊ j£jË j£jÌ ‰jÍ ‰jÎ ‰uh1jr h²hhjP h³Nh´NubhÞ)�”}”(hŒ``pr_warn (fmt, ...)``”h]”j)�”}”(hj©h]”hŒpr_warn (fmt, ...)”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M.hjP h²hubhî)�”}”(hŒPrint a warning-level message ”h]”hÞ)�”}”(hŒPrint a warning-level message”h]”hŒPrint a warning-level message”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M,hj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jÑh´M,hjP h²hubj )�”}”(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 )�”}”(hjÞh]”hŒ Parameters”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M0hjØubj! )�”}”(hhh]”(j& )�”}”(hŒ``fmt`` format string ”h]”(j, )�”}”(hŒ``fmt``”h]”j)�”}”(hjýh]”hŒfmt”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjûubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M-hj÷ubjF )�”}”(hhh]”hÞ)�”}”(hŒ format string”h]”hŒ format string”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jh´M-hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hj÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³jh´M-hjôubj& )�”}”(hŒ(``...`` arguments for the format string ”h]”(j, )�”}”(hŒ``...``”h]”j)�”}”(hj6h]”hŒ...”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M.hj0ubjF )�”}”(hhh]”hÞ)�”}”(hŒarguments for the format string”h]”hŒarguments for the format string”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jKh´M.hjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³jKh´M.hjôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjØubhÞ)�”}”(hŒ**Description**”h]”j )�”}”(hjqh]”hŒ Description”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjoubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M0hjØubhÞ)�”}”(hŒjThis macro expands to a printk with KERN_WARNING loglevel. It uses pr_fmt() to generate the format string.”h]”hŒjThis macro expands to a printk with KERN_WARNING loglevel. It uses pr_fmt() to generate the format string.”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M/hjØubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j hjP h²hh³Nh´Nubjb )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jn Œpr_notice (C macro)”Œ c.pr_notice”hNt”auh1ja hjP h²hh³Nh´Nubjs )�”}”(hhh]”(jx )�”}”(hŒ pr_notice”h]”j~ )�”}”(hŒ pr_notice”h]”j„ )�”}”(hŒ pr_notice”h]”jŠ )�”}”(hj°h]”hŒ pr_notice”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1j‰ hj¶ubah}”(h]”h ]”(jœ j� eh"]”h$]”h&]”hÅhÆuh1jƒ hj²h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M6ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¨ ˆuh1j} j© jª hj®h²hh³jÍh´M6ubah}”(h]”j©ah ]”(j® j¯ eh"]”h$]”h&]”j³ ˆj´ )jµ huh1jw h³jÍh´M6hj«h²hubj· )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¶ hj«h²hh³jÍh´M6ubeh}”(h]”h ]”(jÄ Œmacro”eh"]”h$]”h&]”jÉ jÄ jÊ jæjË jæjÌ ‰jÍ ‰jÎ ‰uh1jr h²hhjP h³Nh´NubhÞ)�”}”(hŒ``pr_notice (fmt, ...)``”h]”j)�”}”(hjìh]”hŒpr_notice (fmt, ...)”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M8hjP h²hubhî)�”}”(hŒPrint a notice-level message ”h]”hÞ)�”}”(hŒPrint a notice-level message”h]”hŒPrint a notice-level message”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M6hjubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jh´M6hjP h²hubj )�”}”(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#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M:hjubj! )�”}”(hhh]”(j& )�”}”(hŒ``fmt`` format string ”h]”(j, )�”}”(hŒ``fmt``”h]”j)�”}”(hj@h]”hŒfmt”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M7hj:ubjF )�”}”(hhh]”hÞ)�”}”(hŒ format string”h]”hŒ format string”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jUh´M7hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³jUh´M7hj7ubj& )�”}”(hŒ(``...`` arguments for the format string ”h]”(j, )�”}”(hŒ``...``”h]”j)�”}”(hjyh]”hŒ...”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M8hjsubjF )�”}”(hhh]”hÞ)�”}”(hŒarguments for the format string”h]”hŒarguments for the format string”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jŽh´M8hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hjsubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³jŽh´M8hj7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjubhÞ)�”}”(hŒ**Description**”h]”j )�”}”(hj´h]”hŒ Description”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M:hjubhÞ)�”}”(hŒiThis macro expands to a printk with KERN_NOTICE loglevel. It uses pr_fmt() to generate the format string.”h]”hŒiThis macro expands to a printk with KERN_NOTICE loglevel. It uses pr_fmt() to generate the format string.”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M9hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j hjP h²hh³Nh´Nubjb )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jn Œpr_info (C macro)”Œ c.pr_info”hNt”auh1ja hjP h²hh³Nh´Nubjs )�”}”(hhh]”(jx )�”}”(hŒpr_info”h]”j~ )�”}”(hŒpr_info”h]”j„ )�”}”(hŒpr_info”h]”jŠ )�”}”(hjóh]”hŒpr_info”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1j‰ hjùubah}”(h]”h ]”(jœ j� eh"]”h$]”h&]”hÅhÆuh1jƒ hjõh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M@ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¨ ˆuh1j} j© jª hjñh²hh³jh´M@ubah•:M}”(h]”jìah ]”(j® j¯ eh"]”h$]”h&]”j³ ˆj´ )jµ huh1jw h³jh´M@hjîh²hubj· )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¶ hjîh²hh³jh´M@ubeh}”(h]”h ]”(jÄ Œmacro”eh"]”h$]”h&]”jÉ jÄ jÊ j)jË j)jÌ ‰jÍ ‰jÎ ‰uh1jr h²hhjP h³Nh´NubhÞ)�”}”(hŒ``pr_info (fmt, ...)``”h]”j)�”}”(hj/h]”hŒpr_info (fmt, ...)”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MBhjP h²hubhî)�”}”(hŒPrint an info-level message ”h]”hÞ)�”}”(hŒPrint an info-level message”h]”hŒPrint an info-level message”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M@hjEubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jWh´M@hjP h²hubj )�”}”(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 )�”}”(hjdh]”hŒ Parameters”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjbubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MDhj^ubj! )�”}”(hhh]”(j& )�”}”(hŒ``fmt`` format string ”h]”(j, )�”}”(hŒ``fmt``”h]”j)�”}”(hjƒh]”hŒfmt”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MAhj}ubjF )�”}”(hhh]”hÞ)�”}”(hŒ format string”h]”hŒ format string”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j˜h´MAhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hj}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³j˜h´MAhjzubj& )�”}”(hŒ(``...`` arguments for the format string ”h]”(j, )�”}”(hŒ``...``”h]”j)�”}”(hj¼h]”hŒ...”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjºubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MBhj¶ubjF )�”}”(hhh]”hÞ)�”}”(hŒarguments for the format string”h]”hŒarguments for the format string”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÑh´MBhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hj¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³jÑh´MBhjzubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj^ubhÞ)�”}”(hŒ**Description**”h]”j )�”}”(hj÷h]”hŒ Description”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjõubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MDhj^ubhÞ)�”}”(hŒgThis macro expands to a printk with KERN_INFO loglevel. It uses pr_fmt() to generate the format string.”h]”hŒgThis macro expands to a printk with KERN_INFO loglevel. It uses pr_fmt() to generate the format string.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MChj^ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j hjP h²hh³Nh´Nubjb )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jn Œpr_cont (C macro)”Œ c.pr_cont”hNt”auh1ja hjP h²hh³Nh´Nubjs )�”}”(hhh]”(jx )�”}”(hŒpr_cont”h]”j~ )�”}”(hŒpr_cont”h]”j„ )�”}”(hŒpr_cont”h]”jŠ )�”}”(hj6h]”hŒpr_cont”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1j‰ hj<ubah}”(h]”h ]”(jœ j� eh"]”h$]”h&]”hÅhÆuh1jƒ hj8h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MKubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¨ ˆuh1j} j© jª hj4h²hh³jSh´MKubah}”(h]”j/ah ]”(j® j¯ eh"]”h$]”h&]”j³ ˆj´ )jµ huh1jw h³jSh´MKhj1h²hubj· )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¶ hj1h²hh³jSh´MKubeh}”(h]”h ]”(jÄ Œmacro”eh"]”h$]”h&]”jÉ jÄ jÊ jljË jljÌ ‰jÍ ‰jÎ ‰uh1jr h²hhjP h³Nh´NubhÞ)�”}”(hŒ``pr_cont (fmt, ...)``”h]”j)�”}”(hjrh]”hŒpr_cont (fmt, ...)”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjpubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MMhjP h²hubhî)�”}”(hŒ3Continues a previous log message in the same line. ”h]”hÞ)�”}”(hŒ2Continues a previous log message in the same line.”h]”hŒ2Continues a previous log message in the same line.”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MKhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jšh´MKhjP h²hubj )�”}”(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 )�”}”(hj§h]”hŒ Parameters”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MOhj¡ubj! )�”}”(hhh]”(j& )�”}”(hŒ``fmt`` format string ”h]”(j, )�”}”(hŒ``fmt``”h]”j)�”}”(hjÆh]”hŒfmt”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MLhjÀubjF )�”}”(hhh]”hÞ)�”}”(hŒ format string”h]”hŒ format string”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÛh´MLhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hjÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³jÛh´MLhj½ubj& )�”}”(hŒ(``...`` arguments for the format string ”h]”(j, )�”}”(hŒ``...``”h]”j)�”}”(hjÿh]”hŒ...”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MMhjùubjF )�”}”(hhh]”hÞ)�”}”(hŒarguments for the format string”h]”hŒarguments for the format string”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jh´MMhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hjùubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³jh´MMhj½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¡ubhÞ)�”}”(hŒ**Description**”h]”j )�”}”(hj:h]”hŒ Description”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MOhj¡ubhÞ)�”}”(hŒÂ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ŒÆ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.”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MNhj¡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j hjP h²hh³Nh´Nubjb )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jn Œpr_devel (C macro)”Œ c.pr_devel”hNt”auh1ja hjP h²hh³Nh´Nubjs )�”}”(hhh]”(jx )�”}”(hŒpr_devel”h]”j~ )�”}”(hŒpr_devel”h]”j„ )�”}”(hŒpr_devel”h]”jŠ )�”}”(hjyh]”hŒpr_devel”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1j‰ hjubah}”(h]”h ]”(jœ j� eh"]”h$]”h&]”hÅhÆuh1jƒ hj{h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MWubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¨ ˆuh1j} j© jª hjwh²hh³j–h´MWubah}”(h]”jrah ]”(j® j¯ eh"]”h$]”h&]”j³ ˆj´ )jµ huh1jw h³j–h´MWhjth²hubj· )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¶ hjth²hh³j–h´MWubeh}”(h]”h ]”(jÄ Œmacro”eh"]”h$]”h&]”jÉ jÄ jÊ j¯jË j¯jÌ ‰jÍ ‰jÎ ‰uh1jr h²hhjP h³Nh´NubhÞ)�”}”(hŒ``pr_devel (fmt, ...)``”h]”j)�”}”(hjµh]”hŒpr_devel (fmt, ...)”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MYhjP h²hubhî)�”}”(hŒ*Print a debug-level message conditionally ”h]”hÞ)�”}”(hŒ)Print a debug-level message conditionally”h]”hŒ)Print a debug-level message conditionally”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MWhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jÝh´MWhjP h²hubj )�”}”(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 )�”}”(hjêh]”hŒ Parameters”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjèubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M[hjäubj! )�”}”(hhh]”(j& )�”}”(hŒ``fmt`` format string ”h]”(j, )�”}”(hŒ``fmt``”h]”j)�”}”(hj h]”hŒfmt”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MXhjubjF )�”}”(hhh]”hÞ)�”}”(hŒ format string”h]”hŒ format string”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jh´MXhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³jh´MXhjubj& )�”}”(hŒ(``...`` arguments for the format string ”h]”(j, )�”}”(hŒ``...``”h]”j)�”}”(hjBh]”hŒ...”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MYhj<ubjF )�”}”(hhh]”hÞ)�”}”(hŒarguments for the format string”h]”hŒarguments for the format string”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jWh´MYhjXubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hj<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³jWh´MYhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjäubhÞ)�”}”(hŒ**Description**”h]”j )�”}”(hj}h]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M[hjäubhÞ)�”}”(hŒgThis macro expands to a printk with KERN_DEBUG loglevel if DEBUG is defined. Otherwise it does nothing.”h]”hŒgThis macro expands to a printk with KERN_DEBUG loglevel if DEBUG is defined. Otherwise it does nothing.”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MZhjäubhÞ)�”}”(hŒ/It uses pr_fmt() to generate the format string.”h]”hŒ/It uses pr_fmt() to generate the format string.”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´M]hjäubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j hjP h²hh³Nh´Nubjb )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jn Œpr_debug (C macro)”Œ c.pr_debug”hNt”auh1ja hjP h²hh³Nh´Nubjs )�”}”(hhh]”(jx )�”}”(hŒpr_debug”h]”j~ )�”}”(hŒpr_debug”h]”j„ )�”}”(hŒpr_debug”h]”jŠ )�”}”(hjËh]”hŒpr_debug”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1j‰ hjÑubah}”(h]”h ]”(jœ j� eh"]”h$]”h&]”hÅhÆuh1jƒ hjÍh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Moubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¨ ˆuh1j} j© jª hjÉh²hh³jèh´Moubah}”(h]”jÄah ]”(j® j¯ eh"]”h$]”h&]”j³ ˆj´ )jµ huh1jw h³jèh´MohjÆh²hubj· )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¶ hjÆh²hh³jèh´Moubeh}”(h]”h ]”(jÄ Œmacro”eh"]”h$]”h&]”jÉ jÄ jÊ jjË jjÌ ‰jÍ ‰jÎ ‰uh1jr h²hhjP h³Nh´NubhÞ)�”}”(hŒ``pr_debug (fmt, ...)``”h]”j)�”}”(hjh]”hŒpr_debug (fmt, ...)”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MqhjP h²hubhî)�”}”(hŒ*Print a debug-level message conditionally ”h]”hÞ)�”}”(hŒ)Print a debug-level message conditionally”h]”hŒ)Print a debug-level message conditionally”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mohjubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j/h´MohjP h²hubj )�”}”(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 )�”}”(hj<h]”hŒ Parameters”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mshj6ubj! )�”}”(hhh]”(j& )�”}”(hŒ``fmt`` format string ”h]”(j, )�”}”(hŒ``fmt``”h]”j)�”}”(hj[h]”hŒfmt”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MphjUubjF )�”}”(hhh]”hÞ)�”}”(hŒ format string”h]”hŒ format string”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jph´Mphjqubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hjUubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³jph´MphjRubj& )�”}”(hŒ(``...`` arguments for the format string ”h]”(j, )�”}”(hŒ``...``”h]”j)�”}”(hj”h]”hŒ...”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+ h³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´MqhjŽubjF )�”}”(hhh]”hÞ)�”}”(hŒarguments for the format string”h]”hŒarguments for the format string”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j©h´Mqhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hjŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1j% h³j©h´MqhjRubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj6ubhÞ)�”}”(hŒ**Description**”h]”j )�”}”(hjÏh]”hŒ Description”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mshj6ubhÞ)�”}”(hŒÇ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.”h]”hŒÉ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.”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mrhj6ubhÞ)�”}”(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ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ^/var/lib/git/docbuild/linux/Documentation/core-api/printk-basics:146: ./include/linux/printk.h”h´Mvhj6ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j hjP h²hh³Nh´Nubeh}”(h]”Œfunction-reference”ah ]”h"]”Œfunction reference”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K�ubeh}”(h]”Œmessage-logging-with-printk”ah ]”h"]”Œmessage logging with printk”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hÍNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”jŒfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j<Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jjjM jJ jj uŒ nametypes”}”(j‰jM ‰j‰uh}”(jhÊjJ j€j jP jp jy jÌ jÑ jZ j_ j� j¢ jàjåj#j(jfjkj©j®jìjñj/j4jrjwjÄjÉuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”hŒsystem_message”“”)�”}”(hhh]”hÞ)�”}”(hŒeUnexpected possible title overline or transition. Treating it as ordinary text because it's so short.”h]”hŒgUnexpected possible title overline or transition. Treating it as ordinary text because it’s so short.”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhj ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œline”K2Œsource”hÇuh1jžhjéubaŒtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.