€•£ÞŒ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”Œ3/translations/zh_CN/admin-guide/dynamic-debug-howto”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ3/translations/zh_TW/admin-guide/dynamic-debug-howto”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ3/translations/it_IT/admin-guide/dynamic-debug-howto”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ3/translations/ja_JP/admin-guide/dynamic-debug-howto”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ3/translations/ko_KR/admin-guide/dynamic-debug-howto”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ3/translations/pt_BR/admin-guide/dynamic-debug-howto”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ3/translations/sp_SP/admin-guide/dynamic-debug-howto”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ Dynamic debug”h]”hŒ Dynamic debug”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/admin-guide/dynamic-debug-howto.rst”h´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ Introduction”h]”hŒ Introduction”…”�”}”(hhÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhËh²hh³hÊh´KubhŒ paragraph”“”)�”}”(hŒwDynamic debug allows you to dynamically enable/disable kernel debug-print code to obtain additional kernel information.”h]”hŒwDynamic debug allows you to dynamically enable/disable kernel debug-print code to obtain additional kernel information.”…”�”}”(hhÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubhÝ)�”}”(hŒyIf ``/proc/dynamic_debug/control`` exists, your kernel has dynamic debug. You'll need root access (sudo su) to use this.”h]”(hŒIf ”…”�”}”(hhìh²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``/proc/dynamic_debug/control``”h]”hŒ/proc/dynamic_debug/control”…”�”}”(hhöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhhìubhŒY exists, your kernel has dynamic debug. You’ll need root access (sudo su) to use this.”…”�”}”(hhìh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K hhËh²hubhÝ)�”}”(hŒDynamic debug provides:”h]”hŒDynamic debug provides:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubhŒ block_quote”“”)�”}”(hXr* a Catalog of all *prdbgs* in your kernel. ``cat /proc/dynamic_debug/control`` to see them. * a Simple query/command language to alter *prdbgs* by selecting on any combination of 0 or 1 of: - source filename - function name - line number (including ranges of line numbers) - module name - format string - class name (as known/declared by each module) ”h]”hŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ[a Catalog of all *prdbgs* in your kernel. ``cat /proc/dynamic_debug/control`` to see them. ”h]”hÝ)�”}”(hŒZa Catalog of all *prdbgs* in your kernel. ``cat /proc/dynamic_debug/control`` to see them.”h]”(hŒa Catalog of all ”…”�”}”(hj-h²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*prdbgs*”h]”hŒprdbgs”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j5hj-ubhŒ in your kernel. ”…”�”}”(hj-h²hh³Nh´Nubhõ)�”}”(hŒ#``cat /proc/dynamic_debug/control``”h]”hŒcat /proc/dynamic_debug/control”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhj-ubhŒ to see them.”…”�”}”(hj-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj$ubj()�”}”(hXa Simple query/command language to alter *prdbgs* by selecting on any combination of 0 or 1 of: - source filename - function name - line number (including ranges of line numbers) - module name - format string - class name (as known/declared by each module) ”h]”(hÝ)�”}”(hŒ_a Simple query/command language to alter *prdbgs* by selecting on any combination of 0 or 1 of:”h]”(hŒ)a Simple query/command language to alter ”…”�”}”(hjkh²hh³Nh´Nubj6)�”}”(hŒ*prdbgs*”h]”hŒprdbgs”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j5hjkubhŒ. by selecting on any combination of 0 or 1 of:”…”�”}”(hjkh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khjgubj#)�”}”(hhh]”(j()�”}”(hŒsource filename”h]”hÝ)�”}”(hj�h]”hŒsource filename”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj‹ubj()�”}”(hŒ function name”h]”hÝ)�”}”(hj§h]”hŒ function name”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj‹ubj()�”}”(hŒ.line number (including ranges of line numbers)”h]”hÝ)�”}”(hj¾h]”hŒ.line number (including ranges of line numbers)”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj‹ubj()�”}”(hŒ module name”h]”hÝ)�”}”(hjÕh]”hŒ module name”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj‹ubj()�”}”(hŒ format string”h]”hÝ)�”}”(hjìh]”hŒ format string”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khjêubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj‹ubj()�”}”(hŒ.class name (as known/declared by each module) ”h]”hÝ)�”}”(hŒ-class name (as known/declared by each module)”h]”hŒ-class name (as known/declared by each module)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj‹ubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j"h³hÊh´Khjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'hj$ubeh}”(h]”h ]”h"]”h$]”h&]”jŒ*”uh1j"h³hÊh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÊh´KhhËh²hubhÝ)�”}”(hŒàNOTE: To actually get the debug-print output on the console, you may need to adjust the kernel ``loglevel=``, or use ``ignore_loglevel``. Read about these kernel parameters in Documentation/admin-guide/kernel-parameters.rst.”h]”(hŒ_NOTE: To actually get the debug-print output on the console, you may need to adjust the kernel ”…”�”}”(hj4h²hh³Nh´Nubhõ)�”}”(hŒ ``loglevel=``”h]”hŒ loglevel=”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhj4ubhŒ , or use ”…”�”}”(hj4h²hh³Nh´Nubhõ)�”}”(hŒ``ignore_loglevel``”h]”hŒignore_loglevel”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhj4ubhŒX. Read about these kernel parameters in Documentation/admin-guide/kernel-parameters.rst.”…”�”}”(hj4h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubeh}”(h]”Œ introduction”ah ]”h"]”Œ introduction”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒViewing Dynamic Debug Behaviour”h]”hŒViewing Dynamic Debug Behaviour”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjnh²hh³hÊh´K#ubhÝ)�”}”(hŒHYou can view the currently configured behaviour in the *prdbg* catalog::”h]”(hŒ7You can view the currently configured behaviour in the ”…”�”}”(hjh²hh³Nh´Nubj6)�”}”(hŒ*prdbg*”h]”hŒprdbg”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j5hjubhŒ catalog:”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K%hjnh²hubhŒ literal_block”“”)�”}”(hXÝ:#> head -n7 /proc/dynamic_debug/control # filename:lineno [module]function flags format init/main.c:1179 [main]initcall_blacklist =_ "blacklisting initcall %s\n" init/main.c:1218 [main]initcall_blacklisted =_ "initcall %s blacklisted\n" init/main.c:1424 [main]run_init_process =_ " with arguments:\n" init/main.c:1426 [main]run_init_process =_ " %s\n" init/main.c:1427 [main]run_init_process =_ " with environment:\n" init/main.c:1429 [main]run_init_process =_ " %s\n"”h]”hXÝ:#> head -n7 /proc/dynamic_debug/control # filename:lineno [module]function flags format init/main.c:1179 [main]initcall_blacklist =_ "blacklisting initcall %s\n" init/main.c:1218 [main]initcall_blacklisted =_ "initcall %s blacklisted\n" init/main.c:1424 [main]run_init_process =_ " with arguments:\n" init/main.c:1426 [main]run_init_process =_ " %s\n" init/main.c:1427 [main]run_init_process =_ " with environment:\n" init/main.c:1429 [main]run_init_process =_ " %s\n"”…”�”}”hj¡sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jŸh³hÊh´K'hjnh²hubhÝ)�”}”(hŒ‡The 3rd space-delimited column shows the current flags, preceded by a ``=`` for easy use with grep/cut. ``=p`` shows enabled callsites.”h]”(hŒFThe 3rd space-delimited column shows the current flags, preceded by a ”…”�”}”(hj±h²hh³Nh´Nubhõ)�”}”(hŒ``=``”h]”hŒ=”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhj±ubhŒ for easy use with grep/cut. ”…”�”}”(hj±h²hh³Nh´Nubhõ)�”}”(hŒ``=p``”h]”hŒ=p”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhj±ubhŒ shows enabled callsites.”…”�”}”(hj±h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K0hjnh²hubeh}”(h]”Œviewing-dynamic-debug-behaviour”ah ]”h"]”Œviewing dynamic debug behaviour”ah$]”h&]”uh1hµhh·h²hh³hÊh´K#ubh¶)�”}”(hhh]”(h»)�”}”(hŒ#Controlling dynamic debug Behaviour”h]”hŒ#Controlling dynamic debug Behaviour”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjëh²hh³hÊh´K4ubhÝ)�”}”(hŒgThe behaviour of *prdbg* sites are controlled by writing query/commands to the control file. Example::”h]”(hŒThe behaviour of ”…”�”}”(hjüh²hh³Nh´Nubj6)�”}”(hŒ*prdbg*”h]”hŒprdbg”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j5hjüubhŒN sites are controlled by writing query/commands to the control file. Example:”…”�”}”(hjüh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K6hjëh²hubj )�”}”(hX�# grease the interface :#> alias ddcmd='echo $* > /proc/dynamic_debug/control' :#> ddcmd '-p; module main func run* +p' :#> grep =p /proc/dynamic_debug/control init/main.c:1424 [main]run_init_process =p " with arguments:\n" init/main.c:1426 [main]run_init_process =p " %s\n" init/main.c:1427 [main]run_init_process =p " with environment:\n" init/main.c:1429 [main]run_init_process =p " %s\n"”h]”hX�# grease the interface :#> alias ddcmd='echo $* > /proc/dynamic_debug/control' :#> ddcmd '-p; module main func run* +p' :#> grep =p /proc/dynamic_debug/control init/main.c:1424 [main]run_init_process =p " with arguments:\n" init/main.c:1426 [main]run_init_process =p " %s\n" init/main.c:1427 [main]run_init_process =p " with environment:\n" init/main.c:1429 [main]run_init_process =p " %s\n"”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´K9hjëh²hubhÝ)�”}”(hŒ%Error messages go to console/syslog::”h]”hŒ$Error messages go to console/syslog:”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KChjëh²hubj )�”}”(hŒy:#> ddcmd mode foo +p dyndbg: unknown keyword "mode" dyndbg: query parse failed bash: echo: write error: Invalid argument”h]”hŒy:#> ddcmd mode foo +p dyndbg: unknown keyword "mode" dyndbg: query parse failed bash: echo: write error: Invalid argument”…”�”}”hj8sbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´KEhjëh²hubhÝ)�”}”(hŒ€If debugfs is also enabled and mounted, ``dynamic_debug/control`` is also under the mount-dir, typically ``/sys/kernel/debug/``.”h]”(hŒ(If debugfs is also enabled and mounted, ”…”�”}”(hjFh²hh³Nh´Nubhõ)�”}”(hŒ``dynamic_debug/control``”h]”hŒdynamic_debug/control”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjFubhŒ( is also under the mount-dir, typically ”…”�”}”(hjFh²hh³Nh´Nubhõ)�”}”(hŒ``/sys/kernel/debug/``”h]”hŒ/sys/kernel/debug/”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjFubhŒ.”…”�”}”(hjFh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KJhjëh²hubeh}”(h]”Œ#controlling-dynamic-debug-behaviour”ah ]”h"]”Œ#controlling dynamic debug behaviour”ah$]”h&]”uh1hµhh·h²hh³hÊh´K4ubh¶)�”}”(hhh]”(h»)�”}”(hŒCommand Language Reference”h]”hŒCommand Language Reference”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj€h²hh³hÊh´KNubhÝ)�”}”(hŒxAt the basic lexical level, a command is a sequence of words separated by spaces or tabs. So these are all equivalent::”h]”hŒwAt the basic lexical level, a command is a sequence of words separated by spaces or tabs. So these are all equivalent:”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KPhj€h²hubj )�”}”(hŒ€:#> ddcmd file svcsock.c line 1603 +p :#> ddcmd "file svcsock.c line 1603 +p" :#> ddcmd ' file svcsock.c line 1603 +p '”h]”hŒ€:#> ddcmd file svcsock.c line 1603 +p :#> ddcmd "file svcsock.c line 1603 +p" :#> ddcmd ' file svcsock.c line 1603 +p '”…”�”}”hjŸsbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´KShj€h²hubhÝ)�”}”(hŒƒCommand submissions are bounded by a write() system call. Multiple commands can be written together, separated by ``;`` or ``\n``::”h]”(hŒrCommand submissions are bounded by a write() system call. Multiple commands can be written together, separated by ”…”�”}”(hj­h²hh³Nh´Nubhõ)�”}”(hŒ``;``”h]”hŒ;”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhj­ubhŒ or ”…”�”}”(hj­h²hh³Nh´Nubhõ)�”}”(hŒ``\n``”h]”hŒ\n”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhj­ubhŒ:”…”�”}”(hj­h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KWhj€h²hubj )�”}”(hŒÃ:#> ddcmd "func pnpacpi_get_resources +p; func pnp_assign_mem +p" :#> ddcmd <<"EOC" func pnpacpi_get_resources +p func pnp_assign_mem +p EOC :#> cat query-batch-file > /proc/dynamic_debug/control”h]”hŒÃ:#> ddcmd "func pnpacpi_get_resources +p; func pnp_assign_mem +p" :#> ddcmd <<"EOC" func pnpacpi_get_resources +p func pnp_assign_mem +p EOC :#> cat query-batch-file > /proc/dynamic_debug/control”…”�”}”hjßsbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´KZhj€h²hubhÝ)�”}”(hŒÆYou can also use wildcards in each query term. The match rule supports ``*`` (matches zero or more characters) and ``?`` (matches exactly one character). For example, you can match all usb drivers::”h]”(hŒGYou can also use wildcards in each query term. The match rule supports ”…”�”}”(hjíh²hh³Nh´Nubhõ)�”}”(hŒ``*``”h]”hŒ*”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjíubhŒ' (matches zero or more characters) and ”…”�”}”(hjíh²hh³Nh´Nubhõ)�”}”(hŒ``?``”h]”hŒ?”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjíubhŒM (matches exactly one character). For example, you can match all usb drivers:”…”�”}”(hjíh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kahj€h²hubj )�”}”(hŒF:#> ddcmd file "drivers/usb/*" +p # "" to suppress shell expansion”h]”hŒF:#> ddcmd file "drivers/usb/*" +p # "" to suppress shell expansion”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´Kehj€h²hubhÝ)�”}”(hŒ\Syntactically, a command is pairs of keyword values, followed by a flags change or setting::”h]”hŒ[Syntactically, a command is pairs of keyword values, followed by a flags change or setting:”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kghj€h²hubj )�”}”(hŒ"command ::= match-spec* flags-spec”h]”hŒ"command ::= match-spec* flags-spec”…”�”}”hj;sbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´Kjhj€h²hubhÝ)�”}”(hŒ©The match-spec's select *prdbgs* from the catalog, upon which to apply the flags-spec, all constraints are ANDed together. An absent keyword is the same as keyword "*".”h]”(hŒThe match-spec’s select ”…”�”}”(hjIh²hh³Nh´Nubj6)�”}”(hŒ*prdbgs*”h]”hŒprdbgs”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j5hjIubhŒ� from the catalog, upon which to apply the flags-spec, all constraints are ANDed together. An absent keyword is the same as keyword “*â€�.”…”�”}”(hjIh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Klhj€h²hubhÝ)�”}”(hŒ�Note that since the match-spec can be empty, the flags are checked 1st, then the pairs of keyword and value. Flag errs will hide keyword errs::”h]”hŒ�Note that since the match-spec can be empty, the flags are checked 1st, then the pairs of keyword and value. Flag errs will hide keyword errs:”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kphj€h²hubj )�”}”(hŒÏbash-5.2# ddcmd mod bar +foo dyndbg: read 13 bytes from userspace dyndbg: query 0: "mod bar +foo" mod:* dyndbg: unknown flag 'o' dyndbg: flags parse failed dyndbg: processed 1 queries, with 0 matches, 1 errs”h]”hŒÏbash-5.2# ddcmd mod bar +foo dyndbg: read 13 bytes from userspace dyndbg: query 0: "mod bar +foo" mod:* dyndbg: unknown flag 'o' dyndbg: flags parse failed dyndbg: processed 1 queries, with 0 matches, 1 errs”…”�”}”hjwsbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´Kshj€h²hubhÝ)�”}”(hŒ’So a match-spec is a keyword, which selects the attribute of the callsite to be compared, and a value to compare against. Possible keywords are::”h]”hŒ‘So a match-spec is a keyword, which selects the attribute of the callsite to be compared, and a value to compare against. Possible keywords are:”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kzhj€h²hubj )�”}”(hXGmatch-spec ::= 'func' string | 'file' string | 'module' string | 'format' string | 'class' string | 'line' line-range line-range ::= lineno | '-'lineno | lineno'-' | lineno'-'lineno lineno ::= unsigned-int”h]”hXGmatch-spec ::= 'func' string | 'file' string | 'module' string | 'format' string | 'class' string | 'line' line-range line-range ::= lineno | '-'lineno | lineno'-' | lineno'-'lineno lineno ::= unsigned-int”…”�”}”hj“sbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´K~hj€h²hubhŒnote”“”)�”}”(hŒT``line-range`` cannot contain space, e.g. "1-30" is valid range but "1 - 30" is not.”h]”hÝ)�”}”(hŒT``line-range`` cannot contain space, e.g. "1-30" is valid range but "1 - 30" is not.”h]”(hõ)�”}”(hŒ``line-range``”h]”hŒ line-range”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhj§ubhŒN cannot contain space, e.g. “1-30â€� is valid range but “1 - 30â€� is not.”…”�”}”(hj§h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KŽhj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¡hj€h²hh³hÊh´NubhÝ)�”}”(hŒ!The meanings of each keyword are:”h]”hŒ!The meanings of each keyword are:”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K’hj€h²hubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒ°func The given string is compared against the function name of each callsite. Example:: func svc_tcp_accept func *recv* # in rfcomm, bluetooth, ping, tcp ”h]”(hŒterm”“”)�”}”(hŒfunc”h]”hŒfunc”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÊh´K™hjÞubhŒ definition”“”)�”}”(hhh]”(hÝ)�”}”(hŒSThe given string is compared against the function name of each callsite. Example::”h]”hŒRThe given string is compared against the function name of each callsite. Example:”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K•hjôubj )�”}”(hŒMfunc svc_tcp_accept func *recv* # in rfcomm, bluetooth, ping, tcp”h]”hŒMfunc svc_tcp_accept func *recv* # in rfcomm, bluetooth, ping, tcp”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´K˜hjôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jòhjÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÊh´K™hjÙubjÝ)�”}”(hX’file The given string is compared against either the src-root relative pathname, or the basename of the source file of each callsite. Examples:: file svcsock.c file kernel/freezer.c # ie column 1 of control file file drivers/usb/* # all callsites under it file inode.c:start_* # parse :tail as a func (above) file inode.c:1-100 # parse :tail as a line-range (above) ”h]”(jã)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÊh´K¤hjubjó)�”}”(hhh]”(hÝ)�”}”(hŒ‹The given string is compared against either the src-root relative pathname, or the basename of the source file of each callsite. Examples::”h]”hŒŠThe given string is compared against either the src-root relative pathname, or the basename of the source file of each callsite. Examples:”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kœhj1ubj )�”}”(hŒëfile svcsock.c file kernel/freezer.c # ie column 1 of control file file drivers/usb/* # all callsites under it file inode.c:start_* # parse :tail as a func (above) file inode.c:1-100 # parse :tail as a line-range (above)”h]”hŒëfile svcsock.c file kernel/freezer.c # ie column 1 of control file file drivers/usb/* # all callsites under it file inode.c:start_* # parse :tail as a func (above) file inode.c:1-100 # parse :tail as a line-range (above)”…”�”}”hjBsbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´K hj1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jòhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÊh´K¤hjÙh²hubjÝ)�”}”(hX3module The given string is compared against the module name of each callsite. The module name is the string as seen in ``lsmod``, i.e. without the directory or the ``.ko`` suffix and with ``-`` changed to ``_``. Examples:: module sunrpc module nfsd module drm* # both drm, drm_kms_helper ”h]”(jã)�”}”(hŒmodule”h]”hŒmodule”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÊh´K®hj\ubjó)�”}”(hhh]”(hÝ)�”}”(hŒÙThe given string is compared against the module name of each callsite. The module name is the string as seen in ``lsmod``, i.e. without the directory or the ``.ko`` suffix and with ``-`` changed to ``_``. Examples::”h]”(hŒqThe given string is compared against the module name of each callsite. The module name is the string as seen in ”…”�”}”(hjqh²hh³Nh´Nubhõ)�”}”(hŒ ``lsmod``”h]”hŒlsmod”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjqubhŒ$, i.e. without the directory or the ”…”�”}”(hjqh²hh³Nh´Nubhõ)�”}”(hŒ``.ko``”h]”hŒ.ko”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjqubhŒ suffix and with ”…”�”}”(hjqh²hh³Nh´Nubhõ)�”}”(hŒ``-``”h]”hŒ-”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjqubhŒ changed to ”…”�”}”(hjqh²hh³Nh´Nubhõ)�”}”(hŒ``_``”h]”hŒ_”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjqubhŒ . Examples:”…”�”}”(hjqh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K§hjnubj )�”}”(hŒDmodule sunrpc module nfsd module drm* # both drm, drm_kms_helper”h]”hŒDmodule sunrpc module nfsd module drm* # both drm, drm_kms_helper”…”�”}”hjÇsbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´K¬hjnubeh}”(h]”h ]”h"]”h$]”h&]”uh1jòhj\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÊh´K®hjÙh²hubjÝ)�”}”(hXformat The given string is searched for in the dynamic debug format string. Note that the string does not need to match the entire format, only some part. Whitespace and other special characters can be escaped using C octal character escape ``\ooo`` notation, e.g. the space character is ``\040``. Alternatively, the string can be enclosed in double quote characters (``"``) or single quote characters (``'``). Examples:: format svcrdma: // many of the NFS/RDMA server pr_debugs format readahead // some pr_debugs in the readahead cache format nfsd:\040SETATTR // one way to match a format with whitespace format "nfsd: SETATTR" // a neater way to match a format with whitespace format 'nfsd: SETATTR' // yet another way to match a format with whitespace ”h]”(jã)�”}”(hŒformat”h]”hŒformat”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÊh´K¾hjáubjó)�”}”(hhh]”(hÝ)�”}”(hX The given string is searched for in the dynamic debug format string. Note that the string does not need to match the entire format, only some part. Whitespace and other special characters can be escaped using C octal character escape ``\ooo`` notation, e.g. the space character is ``\040``. Alternatively, the string can be enclosed in double quote characters (``"``) or single quote characters (``'``). Examples::”h]”(hŒìThe given string is searched for in the dynamic debug format string. Note that the string does not need to match the entire format, only some part. Whitespace and other special characters can be escaped using C octal character escape ”…”�”}”(hjöh²hh³Nh´Nubhõ)�”}”(hŒ``\ooo``”h]”hŒ\ooo”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjöubhŒ' notation, e.g. the space character is ”…”�”}”(hjöh²hh³Nh´Nubhõ)�”}”(hŒ``\040``”h]”hŒ\040”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjöubhŒH. Alternatively, the string can be enclosed in double quote characters (”…”�”}”(hjöh²hh³Nh´Nubhõ)�”}”(hŒ``"``”h]”hŒ"”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjöubhŒ) or single quote characters (”…”�”}”(hjöh²hh³Nh´Nubhõ)�”}”(hŒ``'``”h]”hŒ'”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjöubhŒ ). Examples:”…”�”}”(hjöh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K±hjóubj )�”}”(hX]format svcrdma: // many of the NFS/RDMA server pr_debugs format readahead // some pr_debugs in the readahead cache format nfsd:\040SETATTR // one way to match a format with whitespace format "nfsd: SETATTR" // a neater way to match a format with whitespace format 'nfsd: SETATTR' // yet another way to match a format with whitespace”h]”hX]format svcrdma: // many of the NFS/RDMA server pr_debugs format readahead // some pr_debugs in the readahead cache format nfsd:\040SETATTR // one way to match a format with whitespace format "nfsd: SETATTR" // a neater way to match a format with whitespace format 'nfsd: SETATTR' // yet another way to match a format with whitespace”…”�”}”hjLsbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´Kºhjóubeh}”(h]”h ]”h"]”h$]”h&]”uh1jòhjáubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÊh´K¾hjÙh²hubjÝ)�”}”(hXclass The given class_name is validated against each module, which may have declared a list of known class_names. If the class_name is found for a module, callsite & class matching and adjustment proceeds. Examples:: class DRM_UT_KMS # a DRM.debug category class JUNK # silent non-match // class TLD_* # NOTICE: no wildcard in class names ”h]”(jã)�”}”(hŒclass”h]”hŒclass”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÊh´KÈhjfubjó)�”}”(hhh]”(hÝ)�”}”(hŒÔThe given class_name is validated against each module, which may have declared a list of known class_names. If the class_name is found for a module, callsite & class matching and adjustment proceeds. Examples::”h]”hŒÓThe given class_name is validated against each module, which may have declared a list of known class_names. If the class_name is found for a module, callsite & class matching and adjustment proceeds. Examples:”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÁhjxubj )�”}”(hŒ–class DRM_UT_KMS # a DRM.debug category class JUNK # silent non-match // class TLD_* # NOTICE: no wildcard in class names”h]”hŒ–class DRM_UT_KMS # a DRM.debug category class JUNK # silent non-match // class TLD_* # NOTICE: no wildcard in class names”…”�”}”hj‰sbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´KÆhjxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jòhjfubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÊh´KÈhjÙh²hubjÝ)�”}”(hX¡line The given line number or range of line numbers is compared against the line number of each ``pr_debug()`` callsite. A single line number matches the callsite line number exactly. A range of line numbers matches any callsite between the first and last line number inclusive. An empty first number means the first line in the file, an empty last line number means the last line number in the file. Examples:: line 1603 // exactly line 1603 line 1600-1605 // the six lines from line 1600 to line 1605 line -1605 // the 1605 lines from line 1 to line 1605 line 1600- // all lines from line 1600 to the end of the file ”h]”(jã)�”}”(hŒline”h]”hŒline”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÊh´KÖhj£ubjó)�”}”(hhh]”(hÝ)�”}”(hXšThe given line number or range of line numbers is compared against the line number of each ``pr_debug()`` callsite. A single line number matches the callsite line number exactly. A range of line numbers matches any callsite between the first and last line number inclusive. An empty first number means the first line in the file, an empty last line number means the last line number in the file. Examples::”h]”(hŒ[The given line number or range of line numbers is compared against the line number of each ”…”�”}”(hj¸h²hh³Nh´Nubhõ)�”}”(hŒ``pr_debug()``”h]”hŒ pr_debug()”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhj¸ubhX0 callsite. A single line number matches the callsite line number exactly. A range of line numbers matches any callsite between the first and last line number inclusive. An empty first number means the first line in the file, an empty last line number means the last line number in the file. Examples:”…”�”}”(hj¸h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KËhjµubj )�”}”(hŒïline 1603 // exactly line 1603 line 1600-1605 // the six lines from line 1600 to line 1605 line -1605 // the 1605 lines from line 1 to line 1605 line 1600- // all lines from line 1600 to the end of the file”h]”hŒïline 1603 // exactly line 1603 line 1600-1605 // the six lines from line 1600 to line 1605 line -1605 // the 1605 lines from line 1 to line 1605 line 1600- // all lines from line 1600 to the end of the file”…”�”}”hjØsbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´KÓhjµubeh}”(h]”h ]”h"]”h$]”h&]”uh1jòhj£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÊh´KÖhjÙh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×hj€h²hh³hÊh´NubhÝ)�”}”(hŒŽThe flags specification comprises a change operation followed by one or more flag characters. The change operation is one of the characters::”h]”hŒ�The flags specification comprises a change operation followed by one or more flag characters. The change operation is one of the characters:”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KØhj€h²hubj )�”}”(hŒZ- remove the given flags + add the given flags = set the flags to the given flags”h]”hŒZ- remove the given flags + add the given flags = set the flags to the given flags”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´KÜhj€h²hubhÝ)�”}”(hŒThe flags are::”h]”hŒThe flags are:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kàhj€h²hubj )�”}”(hXp enables the pr_debug() callsite. _ enables no flags. Decorator flags add to the message-prefix, in order: t Include thread ID, or m Include module name f Include the function name s Include the source file name l Include line number d Include call trace”h]”hXp enables the pr_debug() callsite. _ enables no flags. Decorator flags add to the message-prefix, in order: t Include thread ID, or m Include module name f Include the function name s Include the source file name l Include line number d Include call trace”…”�”}”hj"sbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´Kâhj€h²hubhÝ)�”}”(hŒxFor ``print_hex_dump_debug()`` and ``print_hex_dump_bytes()``, only the ``p`` flag has meaning, other flags are ignored.”h]”(hŒFor ”…”�”}”(hj0h²hh³Nh´Nubhõ)�”}”(hŒ``print_hex_dump_debug()``”h]”hŒprint_hex_dump_debug()”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhj0ubhŒ and ”…”�”}”(hj0h²hh³Nh´Nubhõ)�”}”(hŒ``print_hex_dump_bytes()``”h]”hŒprint_hex_dump_bytes()”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhj0ubhŒ , only the ”…”�”}”(hj0h²hh³Nh´Nubhõ)�”}”(hŒ``p``”h]”hŒp”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhj0ubhŒ+ flag has meaning, other flags are ignored.”…”�”}”(hj0h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kíhj€h²hubhÝ)�”}”(hŒ}Note the regexp ``^[-+=][fslmptd_]+$`` matches a flags specification. To clear all flags at once, use ``=_`` or ``-fslmptd``.”h]”(hŒNote the regexp ”…”�”}”(hjth²hh³Nh´Nubhõ)�”}”(hŒ``^[-+=][fslmptd_]+$``”h]”hŒ^[-+=][fslmptd_]+$”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjtubhŒ@ matches a flags specification. To clear all flags at once, use ”…”�”}”(hjth²hh³Nh´Nubhõ)�”}”(hŒ``=_``”h]”hŒ=_”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjtubhŒ or ”…”�”}”(hjth²hh³Nh´Nubhõ)�”}”(hŒ ``-fslmptd``”h]”hŒ-fslmptd”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjtubhŒ.”…”�”}”(hjth²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kðhj€h²hubeh}”(h]”Œcommand-language-reference”ah ]”h"]”Œcommand language reference”ah$]”h&]”uh1hµhh·h²hh³hÊh´KNubh¶)�”}”(hhh]”(h»)�”}”(hŒ"Debug messages during Boot Process”h]”hŒ"Debug messages during Boot Process”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÀh²hh³hÊh´KõubhÝ)�”}”(hX/To activate debug messages for core code and built-in modules during the boot process, even before userspace and debugfs exists, use ``dyndbg="QUERY"`` or ``module.dyndbg="QUERY"``. QUERY follows the syntax described above, but must not exceed 1023 characters. Your bootloader may impose lower limits.”h]”(hŒ…To activate debug messages for core code and built-in modules during the boot process, even before userspace and debugfs exists, use ”…”�”}”(hjÑh²hh³Nh´Nubhõ)�”}”(hŒ``dyndbg="QUERY"``”h]”hŒdyndbg="QUERY"”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjÑubhŒ or ”…”�”}”(hjÑh²hh³Nh´Nubhõ)�”}”(hŒ``module.dyndbg="QUERY"``”h]”hŒmodule.dyndbg="QUERY"”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjÑubhŒ{. QUERY follows the syntax described above, but must not exceed 1023 characters. Your bootloader may impose lower limits.”…”�”}”(hjÑh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K÷hjÀh²hubhÝ)�”}”(hŒ×These ``dyndbg`` params are processed just after the ddebug tables are processed, as part of the early_initcall. Thus you can enable debug messages in all code run after this early_initcall via this boot parameter.”h]”(hŒThese ”…”�”}”(hjh²hh³Nh´Nubhõ)�”}”(hŒ ``dyndbg``”h]”hŒdyndbg”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjubhŒÇ params are processed just after the ddebug tables are processed, as part of the early_initcall. Thus you can enable debug messages in all code run after this early_initcall via this boot parameter.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KýhjÀh²hubhÝ)�”}”(hŒGOn an x86 system for example ACPI enablement is a subsys_initcall and::”h]”hŒFOn an x86 system for example ACPI enablement is a subsys_initcall and:”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´MhjÀh²hubj )�”}”(hŒdyndbg="file ec.c +p"”h]”hŒdyndbg="file ec.c +p"”…”�”}”hj1sbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´MhjÀh²hubhÝ)�”}”(hŒ÷will show early Embedded Controller transactions during ACPI setup if your machine (typically a laptop) has an Embedded Controller. PCI (or other devices) initialization also is a hot candidate for using this boot parameter for debugging purposes.”h]”hŒ÷will show early Embedded Controller transactions during ACPI setup if your machine (typically a laptop) has an Embedded Controller. PCI (or other devices) initialization also is a hot candidate for using this boot parameter for debugging purposes.”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´MhjÀh²hubhÝ)�”}”(hŒÈIf ``foo`` module is not built-in, ``foo.dyndbg`` will still be processed at boot time, without effect, but will be reprocessed when module is loaded later. Bare ``dyndbg=`` is only processed at boot.”h]”(hŒIf ”…”�”}”(hjMh²hh³Nh´Nubhõ)�”}”(hŒ``foo``”h]”hŒfoo”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjMubhŒ module is not built-in, ”…”�”}”(hjMh²hh³Nh´Nubhõ)�”}”(hŒ``foo.dyndbg``”h]”hŒ foo.dyndbg”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjMubhŒq will still be processed at boot time, without effect, but will be reprocessed when module is loaded later. Bare ”…”�”}”(hjMh²hh³Nh´Nubhõ)�”}”(hŒ ``dyndbg=``”h]”hŒdyndbg=”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjMubhŒ is only processed at boot.”…”�”}”(hjMh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´M hjÀh²hubeh}”(h]”Œ"debug-messages-during-boot-process”ah ]”h"]”Œ"debug messages during boot process”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kõubh¶)�”}”(hhh]”(h»)�”}”(hŒ,Debug Messages at Module Initialization Time”h]”hŒ,Debug Messages at Module Initialization Time”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj™h²hh³hÊh´MubhÝ)�”}”(hŒêWhen ``modprobe foo`` is called, modprobe scans ``/proc/cmdline`` for ``foo.params``, strips ``foo.``, and passes them to the kernel along with params given in modprobe args or ``/etc/modprobe.d/*.conf`` files, in the following order:”h]”(hŒWhen ”…”�”}”(hjªh²hh³Nh´Nubhõ)�”}”(hŒ``modprobe foo``”h]”hŒ modprobe foo”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjªubhŒ is called, modprobe scans ”…”�”}”(hjªh²hh³Nh´Nubhõ)�”}”(hŒ``/proc/cmdline``”h]”hŒ /proc/cmdline”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjªubhŒ for ”…”�”}”(hjªh²hh³Nh´Nubhõ)�”}”(hŒ``foo.params``”h]”hŒ foo.params”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjªubhŒ , strips ”…”�”}”(hjªh²hh³Nh´Nubhõ)�”}”(hŒ``foo.``”h]”hŒfoo.”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjªubhŒL, and passes them to the kernel along with params given in modprobe args or ”…”�”}”(hjªh²hh³Nh´Nubhõ)�”}”(hŒ``/etc/modprobe.d/*.conf``”h]”hŒ/etc/modprobe.d/*.conf”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjªubhŒ files, in the following order:”…”�”}”(hjªh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Mhj™h²hubhŒenumerated_list”“”)�”}”(hhh]”(j()�”}”(hŒxparameters given via ``/etc/modprobe.d/*.conf``:: options foo dyndbg=+pt options foo dyndbg # defaults to +p ”h]”(hÝ)�”}”(hŒ1parameters given via ``/etc/modprobe.d/*.conf``::”h]”(hŒparameters given via ”…”�”}”(hj h²hh³Nh´Nubhõ)�”}”(hŒ``/etc/modprobe.d/*.conf``”h]”hŒ/etc/modprobe.d/*.conf”…”�”}”(hj# h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhj ubhŒ:”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Mhj ubj )�”}”(hŒ:options foo dyndbg=+pt options foo dyndbg # defaults to +p”h]”hŒ:options foo dyndbg=+pt options foo dyndbg # defaults to +p”…”�”}”hj; sbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´Mhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'hj h²hh³hÊh´Nubj()�”}”(hŒv``foo.dyndbg`` as given in boot args, ``foo.`` is stripped and passed:: foo.dyndbg=" func bar +p; func buz +mp" ”h]”(hÝ)�”}”(hŒG``foo.dyndbg`` as given in boot args, ``foo.`` is stripped and passed::”h]”(hõ)�”}”(hŒ``foo.dyndbg``”h]”hŒ foo.dyndbg”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjS ubhŒ as given in boot args, ”…”�”}”(hjS h²hh³Nh´Nubhõ)�”}”(hŒ``foo.``”h]”hŒfoo.”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjS ubhŒ is stripped and passed:”…”�”}”(hjS h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´MhjO ubj )�”}”(hŒ'foo.dyndbg=" func bar +p; func buz +mp"”h]”hŒ'foo.dyndbg=" func bar +p; func buz +mp"”…”�”}”hj� sbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´MhjO ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'hj h²hh³hÊh´Nubj()�”}”(hŒOargs to modprobe:: modprobe foo dyndbg==pmf # override previous settings ”h]”(hÝ)�”}”(hŒargs to modprobe::”h]”hŒargs to modprobe:”…”�”}”(hj™ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´M!hj• ubj )�”}”(hŒ5modprobe foo dyndbg==pmf # override previous settings”h]”hŒ5modprobe foo dyndbg==pmf # override previous settings”…”�”}”hj§ sbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´M#hj• ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'hj h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1j hj™h²hh³hÊh´MubhÝ)�”}”(hŒûThese ``dyndbg`` queries are applied in order, with last having final say. This allows boot args to override or modify those from ``/etc/modprobe.d`` (sensible, since 1 is system wide, 2 is kernel or boot specific), and modprobe args to override both.”h]”(hŒThese ”…”�”}”(hjÆ h²hh³Nh´Nubhõ)�”}”(hŒ ``dyndbg``”h]”hŒdyndbg”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjÆ ubhŒr queries are applied in order, with last having final say. This allows boot args to override or modify those from ”…”�”}”(hjÆ h²hh³Nh´Nubhõ)�”}”(hŒ``/etc/modprobe.d``”h]”hŒ/etc/modprobe.d”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjÆ ubhŒf (sensible, since 1 is system wide, 2 is kernel or boot specific), and modprobe args to override both.”…”�”}”(hjÆ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´M%hj™h²hubhÝ)�”}”(hŒËIn the ``foo.dyndbg="QUERY"`` form, the query must exclude ``module foo``. ``foo`` is extracted from the param-name, and applied to each query in ``QUERY``, and only 1 match-spec of each type is allowed.”h]”(hŒIn the ”…”�”}”(hjø h²hh³Nh´Nubhõ)�”}”(hŒ``foo.dyndbg="QUERY"``”h]”hŒfoo.dyndbg="QUERY"”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjø ubhŒ form, the query must exclude ”…”�”}”(hjø h²hh³Nh´Nubhõ)�”}”(hŒ``module foo``”h]”hŒ module foo”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjø ubhŒ. ”…”�”}”(hjø h²hh³Nh´Nubhõ)�”}”(hŒ``foo``”h]”hŒfoo”…”�”}”(hj$ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjø ubhŒ@ is extracted from the param-name, and applied to each query in ”…”�”}”(hjø h²hh³Nh´Nubhõ)�”}”(hŒ ``QUERY``”h]”hŒQUERY”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjø ubhŒ0, and only 1 match-spec of each type is allowed.”…”�”}”(hjø h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´M*hj™h²hubhÝ)�”}”(hŒ@The ``dyndbg`` option is a "fake" module parameter, which means:”h]”(hŒThe ”…”�”}”(hjN h²hh³Nh´Nubhõ)�”}”(hŒ ``dyndbg``”h]”hŒdyndbg”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjN ubhŒ6 option is a “fakeâ€� module parameter, which means:”…”�”}”(hjN h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´M.hj™h²hubj#)�”}”(hhh]”(j()�”}”(hŒ+modules do not need to define it explicitly”h]”hÝ)�”}”(hjs h]”hŒ+modules do not need to define it explicitly”…”�”}”(hju h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´M0hjq ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjn h²hh³hÊh´Nubj()�”}”(hŒ>every module gets it tacitly, whether they use pr_debug or not”h]”hÝ)�”}”(hjŠ h]”hŒ>every module gets it tacitly, whether they use pr_debug or not”…”�”}”(hjŒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´M1hjˆ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjn h²hh³hÊh´Nubj()�”}”(hŒyit doesn't appear in ``/sys/module/$module/parameters/`` To see it, grep the control file, or inspect ``/proc/cmdline.`` ”h]”hÝ)�”}”(hŒxit doesn't appear in ``/sys/module/$module/parameters/`` To see it, grep the control file, or inspect ``/proc/cmdline.``”h]”(hŒit doesn’t appear in ”…”�”}”(hj£ h²hh³Nh´Nubhõ)�”}”(hŒ#``/sys/module/$module/parameters/``”h]”hŒ/sys/module/$module/parameters/”…”�”}”(hj« h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhj£ ubhŒ. To see it, grep the control file, or inspect ”…”�”}”(hj£ h²hh³Nh´Nubhõ)�”}”(hŒ``/proc/cmdline.``”h]”hŒ/proc/cmdline.”…”�”}”(hj½ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhj£ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´M2hjŸ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjn h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jj uh1j"h³hÊh´M0hj™h²hubhÝ)�”}”(hŒÖFor ``CONFIG_DYNAMIC_DEBUG`` kernels, any settings given at boot-time (or enabled by ``-DDEBUG`` flag during compilation) can be disabled later via the debugfs interface if the debug messages are no longer needed::”h]”(hŒFor ”…”�”}”(hjÝ h²hh³Nh´Nubhõ)�”}”(hŒ``CONFIG_DYNAMIC_DEBUG``”h]”hŒCONFIG_DYNAMIC_DEBUG”…”�”}”(hjå h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjÝ ubhŒ9 kernels, any settings given at boot-time (or enabled by ”…”�”}”(hjÝ h²hh³Nh´Nubhõ)�”}”(hŒ ``-DDEBUG``”h]”hŒ-DDEBUG”…”�”}”(hj÷ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjÝ ubhŒu flag during compilation) can be disabled later via the debugfs interface if the debug messages are no longer needed:”…”�”}”(hjÝ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´M5hj™h²hubj )�”}”(hŒ:echo "module module_name -p" > /proc/dynamic_debug/control”h]”hŒ:echo "module module_name -p" > /proc/dynamic_debug/control”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´M9hj™h²hubeh}”(h]”Œ,debug-messages-at-module-initialization-time”ah ]”h"]”Œ,debug messages at module initialization time”ah$]”h&]”uh1hµhh·h²hh³hÊh´Mubh¶)�”}”(hhh]”(h»)�”}”(hŒExamples”h]”hŒExamples”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj% h²hh³hÊh´M<ubj )�”}”(hXø// enable the message at line 1603 of file svcsock.c :#> ddcmd 'file svcsock.c line 1603 +p' // enable all the messages in file svcsock.c :#> ddcmd 'file svcsock.c +p' // enable all the messages in the NFS server module :#> ddcmd 'module nfsd +p' // enable all 12 messages in the function svc_process() :#> ddcmd 'func svc_process +p' // disable all 12 messages in the function svc_process() :#> ddcmd 'func svc_process -p' // enable messages for NFS calls READ, READLINK, READDIR and READDIR+. :#> ddcmd 'format "nfsd: READ" +p' // enable messages in files of which the paths include string "usb" :#> ddcmd 'file *usb* +p' // enable all messages :#> ddcmd '+p' // add module, function to all enabled messages :#> ddcmd '+mf' // boot-args example, with newlines and comments for readability Kernel command line: ... // see what's going on in dyndbg=value processing dynamic_debug.verbose=3 // enable pr_debugs in the btrfs module (can be builtin or loadable) btrfs.dyndbg="+p" // enable pr_debugs in all files under init/ // and the function parse_one, #cmt is stripped dyndbg="file init/* +p #cmt ; func parse_one +p" // enable pr_debugs in 2 functions in a module loaded later pc87360.dyndbg="func pc87360_init_device +p; func pc87360_find +p"”h]”hXø// enable the message at line 1603 of file svcsock.c :#> ddcmd 'file svcsock.c line 1603 +p' // enable all the messages in file svcsock.c :#> ddcmd 'file svcsock.c +p' // enable all the messages in the NFS server module :#> ddcmd 'module nfsd +p' // enable all 12 messages in the function svc_process() :#> ddcmd 'func svc_process +p' // disable all 12 messages in the function svc_process() :#> ddcmd 'func svc_process -p' // enable messages for NFS calls READ, READLINK, READDIR and READDIR+. :#> ddcmd 'format "nfsd: READ" +p' // enable messages in files of which the paths include string "usb" :#> ddcmd 'file *usb* +p' // enable all messages :#> ddcmd '+p' // add module, function to all enabled messages :#> ddcmd '+mf' // boot-args example, with newlines and comments for readability Kernel command line: ... // see what's going on in dyndbg=value processing dynamic_debug.verbose=3 // enable pr_debugs in the btrfs module (can be builtin or loadable) btrfs.dyndbg="+p" // enable pr_debugs in all files under init/ // and the function parse_one, #cmt is stripped dyndbg="file init/* +p #cmt ; func parse_one +p" // enable pr_debugs in 2 functions in a module loaded later pc87360.dyndbg="func pc87360_init_device +p; func pc87360_find +p"”…”�”}”hj6 sbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´M@hj% h²hubeh}”(h]”Œexamples”ah ]”h"]”Œexamples”ah$]”h&]”uh1hµhh·h²hh³hÊh´M<ubh¶)�”}”(hhh]”(h»)�”}”(hŒKernel Configuration”h]”hŒKernel Configuration”…”�”}”(hjO h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjL h²hh³hÊh´MhubhÝ)�”}”(hŒ2Dynamic Debug is enabled via kernel config items::”h]”hŒ1Dynamic Debug is enabled via kernel config items:”…”�”}”(hj] h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´MjhjL h²hubj )�”}”(hŒCONFIG_DYNAMIC_DEBUG=y # build catalog, enables CORE CONFIG_DYNAMIC_DEBUG_CORE=y # enable mechanics only, skip catalog”h]”hŒCONFIG_DYNAMIC_DEBUG=y # build catalog, enables CORE CONFIG_DYNAMIC_DEBUG_CORE=y # enable mechanics only, skip catalog”…”�”}”hjk sbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´MlhjL h²hubhÝ)�”}”(hXIf you do not want to enable dynamic debug globally (i.e. in some embedded system), you may set ``CONFIG_DYNAMIC_DEBUG_CORE`` as basic support of dynamic debug and add ``ccflags := -DDYNAMIC_DEBUG_MODULE`` into the Makefile of any modules which you'd like to dynamically debug later.”h]”(hŒ`If you do not want to enable dynamic debug globally (i.e. in some embedded system), you may set ”…”�”}”(hjy h²hh³Nh´Nubhõ)�”}”(hŒ``CONFIG_DYNAMIC_DEBUG_CORE``”h]”hŒCONFIG_DYNAMIC_DEBUG_CORE”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjy ubhŒ+ as basic support of dynamic debug and add ”…”�”}”(hjy h²hh³Nh´Nubhõ)�”}”(hŒ%``ccflags := -DDYNAMIC_DEBUG_MODULE``”h]”hŒ!ccflags := -DDYNAMIC_DEBUG_MODULE”…”�”}”(hj“ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjy ubhŒP into the Makefile of any modules which you’d like to dynamically debug later.”…”�”}”(hjy h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´MohjL h²hubeh}”(h]”Œkernel-configuration”ah ]”h"]”Œkernel configuration”ah$]”h&]”uh1hµhh·h²hh³hÊh´Mhubh¶)�”}”(hhh]”(h»)�”}”(hŒKernel *prdbg* API”h]”(hŒKernel ”…”�”}”(hj¶ h²hh³Nh´Nubj6)�”}”(hŒ*prdbg*”h]”hŒprdbg”…”�”}”(hj¾ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j5hj¶ ubhŒ API”…”�”}”(hj¶ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hºhj³ h²hh³hÊh´MvubhÝ)�”}”(hŒVThe following functions are cataloged and controllable when dynamic debug is enabled::”h]”hŒUThe following functions are cataloged and controllable when dynamic debug is enabled:”…”�”}”(hjÖ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Mxhj³ h²hubj )�”}”(hŒBpr_debug() dev_dbg() print_hex_dump_debug() print_hex_dump_bytes()”h]”hŒBpr_debug() dev_dbg() print_hex_dump_debug() print_hex_dump_bytes()”…”�”}”hjä sbah}”(h]”h ]”h"]”h$]”h&]”j¯j°uh1jŸh³hÊh´M{hj³ h²hubhÝ)�”}”(hŒ€Otherwise, they are off by default; ``ccflags += -DDEBUG`` or ``#define DEBUG`` in a source file will enable them appropriately.”h]”(hŒ$Otherwise, they are off by default; ”…”�”}”(hjò h²hh³Nh´Nubhõ)�”}”(hŒ``ccflags += -DDEBUG``”h]”hŒccflags += -DDEBUG”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjò ubhŒ or ”…”�”}”(hjò h²hh³Nh´Nubhõ)�”}”(hŒ``#define DEBUG``”h]”hŒ #define DEBUG”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjò ubhŒ1 in a source file will enable them appropriately.”…”�”}”(hjò h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´M€hj³ h²hubhÝ)�”}”(hŒyIf ``CONFIG_DYNAMIC_DEBUG`` is not set, ``print_hex_dump_debug()`` is just a shortcut for ``print_hex_dump(KERN_DEBUG)``.”h]”(hŒIf ”…”�”}”(hj$ h²hh³Nh´Nubhõ)�”}”(hŒ``CONFIG_DYNAMIC_DEBUG``”h]”hŒCONFIG_DYNAMIC_DEBUG”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhj$ ubhŒ is not set, ”…”�”}”(hj$ h²hh³Nh´Nubhõ)�”}”(hŒ``print_hex_dump_debug()``”h]”hŒprint_hex_dump_debug()”…”�”}”(hj> h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhj$ ubhŒ is just a shortcut for ”…”�”}”(hj$ h²hh³Nh´Nubhõ)�”}”(hŒ``print_hex_dump(KERN_DEBUG)``”h]”hŒprint_hex_dump(KERN_DEBUG)”…”�”}”(hjP h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhj$ ubhŒ.”…”�”}”(hj$ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Mƒhj³ h²hubhÝ)�”}”(hŒ¾For ``print_hex_dump_debug()``/``print_hex_dump_bytes()``, format string is its ``prefix_str`` argument, if it is constant string; or ``hexdump`` in case ``prefix_str`` is built dynamically.”h]”(hŒFor ”…”�”}”(hjh h²hh³Nh´Nubhõ)�”}”(hŒ``print_hex_dump_debug()``”h]”hŒprint_hex_dump_debug()”…”�”}”(hjp h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjh ubhŒ/”…”�”}”(hjh h²hh³Nh´Nubhõ)�”}”(hŒ``print_hex_dump_bytes()``”h]”hŒprint_hex_dump_bytes()”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjh ubhŒ, format string is its ”…”�”}”(hjh h²hh³Nh´Nubhõ)�”}”(hŒ``prefix_str``”h]”hŒ prefix_str”…”�”}”(hj” h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjh ubhŒ( argument, if it is constant string; or ”…”�”}”(hjh h²hh³Nh´Nubhõ)�”}”(hŒ ``hexdump``”h]”hŒhexdump”…”�”}”(hj¦ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjh ubhŒ in case ”…”�”}”(hjh h²hh³Nh´Nubhõ)�”}”(hŒ``prefix_str``”h]”hŒ prefix_str”…”�”}”(hj¸ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hôhjh ubhŒ is built dynamically.”…”�”}”(hjh h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´M†hj³ h²hubeh}”(h]”Œkernel-prdbg-api”ah ]”h"]”Œkernel prdbg api”ah$]”h&]”uh1hµhh·h²hh³hÊh´Mvubeh}”(h]”Œ dynamic-debug”ah ]”h"]”Œ dynamic debug”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”Œentry”Œ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”}”(jÝ jÚ jkjhjèjåj}jzj½jºj–j“j" j jI jF j° j­ jÕ jÒ uŒ nametypes”}”(jÝ ‰jk‰jè‰j}‰j½‰j–‰j" ‰jI ‰j° ‰jÕ ‰uh}”(jÚ h·jhhËjåjnjzjëjºj€j“jÀj j™jF j% j­ jL jÒ 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”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.