€•Œ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-formats”Œ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-formats”Œ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-formats”Œ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-formats”Œ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-formats”Œ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-formats”Œ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-formats”Œ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Œ)How to get printk format specifiers right”h]”hŒ)How to get printk format specifiers right”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒE/var/lib/git/docbuild/linux/Documentation/core-api/printk-formats.rst”h´KubhŒtarget”“”)�”}”(hŒ.. _printk-specifiers:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œprintk-specifiers”uh1hËh´Khh·h²hh³hÊubhŒ field_list”“”)�”}”(hhh]”(hŒfield”“”)�”}”(hhh]”(hŒ field_name”“”)�”}”(hŒAuthor”h]”hŒAuthor”…”�”}”(hhåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhhàh³hÊh´KubhŒ field_body”“”)�”}”(hŒ$Randy Dunlap ”h]”hŒ paragraph”“”)�”}”(hh÷h]”(hŒRandy Dunlap <”…”�”}”(hhûh²hh³Nh´NubhŒ reference”“”)�”}”(hŒrdunlap@infradead.org”h]”hŒrdunlap@infradead.org”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:rdunlap@infradead.org”uh1jhhûubhŒ>”…”�”}”(hhûh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Khhõubah}”(h]”h ]”h"]”h$]”h&]”uh1hóhhàubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÞh³hÊh´KhhÛh²hubhß)�”}”(hhh]”(hä)�”}”(hŒAuthor”h]”hŒAuthor”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhj*h³hÊh´Kubhô)�”}”(hŒ(Andrew Murray ”h]”hú)�”}”(hŒ&Andrew Murray ”h]”(hŒAndrew Murray <”…”�”}”(hj?h²hh³Nh´Nubj)�”}”(hŒamurray@mpc-data.co.uk”h]”hŒamurray@mpc-data.co.uk”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:amurray@mpc-data.co.uk”uh1jhj?ubhŒ>”…”�”}”(hj?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Khj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hóhj*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÞh³hÊh´KhhÛh²hubeh}”(h]”hØah ]”h"]”Œprintk-specifiers”ah$]”h&]”uh1hÙhh·h²hh³hÊh´KŒexpect_referenced_by_name”}”jqhÍsŒexpect_referenced_by_id”}”hØhÍsubh¶)�”}”(hhh]”(h»)�”}”(hŒ Integer types”h]”hŒ Integer types”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjxh²hh³hÊh´K ubhŒ literal_block”“”)�”}”(hXôIf variable is of Type, use printk format specifier: ------------------------------------------------------------ signed char %d or %hhx unsigned char %u or %x char %u or %x short int %d or %hx unsigned short int %u or %x int %d or %x unsigned int %u or %x long %ld or %lx unsigned long %lu or %lx long long %lld or %llx unsigned long long %llu or %llx size_t %zu or %zx ssize_t %zd or %zx s8 %d or %hhx u8 %u or %x s16 %d or %hx u16 %u or %x s32 %d or %x u32 %u or %x s64 %lld or %llx u64 %llu or %llx”h]”hXôIf variable is of Type, use printk format specifier: ------------------------------------------------------------ signed char %d or %hhx unsigned char %u or %x char %u or %x short int %d or %hx unsigned short int %u or %x int %d or %x unsigned int %u or %x long %ld or %lx unsigned long %lu or %lx long long %lld or %llx unsigned long long %llu or %llx size_t %zu or %zx ssize_t %zd or %zx s8 %d or %hhx u8 %u or %x s16 %d or %hx u16 %u or %x s32 %d or %x u32 %u or %x s64 %lld or %llx u64 %llu or %llx”…”�”}”hj‹sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1j‰h³hÊh´Khjxh²hubhú)�”}”(hŒàIf is architecture-dependent for its size (e.g., cycles_t, tcflag_t) or is dependent on a config option for its size (e.g., blk_status_t), use a format specifier of its largest possible type and explicitly cast to it.”h]”hŒàIf is architecture-dependent for its size (e.g., cycles_t, tcflag_t) or is dependent on a config option for its size (e.g., blk_status_t), use a format specifier of its largest possible type and explicitly cast to it.”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´K)hjxh²hubhú)�”}”(hŒ Example::”h]”hŒExample:”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´K-hjxh²hubjŠ)�”}”(hŒAprintk("test: latency: %llu cycles\n", (unsigned long long)time);”h]”hŒAprintk("test: latency: %llu cycles\n", (unsigned long long)time);”…”�”}”hj·sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´K/hjxh²hubhú)�”}”(hŒ'Reminder: sizeof() returns type size_t.”h]”hŒ'Reminder: sizeof() returns type size_t.”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´K1hjxh²hubhú)�”}”(hŒèThe kernel's printf does not support %n. Floating point formats (%e, %f, %g, %a) are also not recognized, for obvious reasons. Use of any unsupported specifier or length qualifier results in a WARN and early return from vsnprintf().”h]”hŒêThe kernel’s printf does not support %n. Floating point formats (%e, %f, %g, %a) are also not recognized, for obvious reasons. Use of any unsupported specifier or length qualifier results in a WARN and early return from vsnprintf().”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´K3hjxh²hubeh}”(h]”Œ integer-types”ah ]”h"]”Œ integer types”ah$]”h&]”uh1hµhh·h²hh³hÊh´K ubh¶)�”}”(hhh]”(h»)�”}”(hŒ Pointer types”h]”hŒ Pointer types”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjéh²hh³hÊh´K9ubhú)�”}”(hŒ®A raw pointer value may be printed with %p which will hash the address before printing. The kernel also supports extended specifiers for printing pointers of different types.”h]”hŒ®A raw pointer value may be printed with %p which will hash the address before printing. The kernel also supports extended specifiers for printing pointers of different types.”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´K;hjéh²hubhú)�”}”(hŒÐSome of the extended specifiers print the data on the given address instead of printing the address itself. In this case, the following error messages might be printed instead of the unreachable information::”h]”hŒÏSome of the extended specifiers print the data on the given address instead of printing the address itself. In this case, the following error messages might be printed instead of the unreachable information:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´K?hjéh²hubjŠ)�”}”(hŒm(null) data on plain NULL address (efault) data on invalid address (einval) invalid data on a valid address”h]”hŒm(null) data on plain NULL address (efault) data on invalid address (einval) invalid data on a valid address”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´KChjéh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒPlain Pointers”h]”hŒPlain Pointers”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj$h²hh³hÊh´KHubjŠ)�”}”(hŒ$%p abcdef12 or 00000000abcdef12”h]”hŒ$%p abcdef12 or 00000000abcdef12”…”�”}”hj5sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´KLhj$h²hubhú)�”}”(hX=Pointers printed without a specifier extension (i.e unadorned %p) are hashed to prevent leaking information about the kernel memory layout. This has the added benefit of providing a unique identifier. On 64-bit machines the first 32 bits are zeroed. The kernel will print ``(ptrval)`` until it gathers enough entropy.”h]”(hXPointers printed without a specifier extension (i.e unadorned %p) are hashed to prevent leaking information about the kernel memory layout. This has the added benefit of providing a unique identifier. On 64-bit machines the first 32 bits are zeroed. The kernel will print ”…”�”}”(hjCh²hh³Nh´NubhŒliteral”“”)�”}”(hŒ ``(ptrval)``”h]”hŒ(ptrval)”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjCubhŒ! until it gathers enough entropy.”…”�”}”(hjCh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´KNhj$h²hubhú)�”}”(hXÎWhen possible, use specialised modifiers such as %pS or %pB (described below) to avoid the need of providing an unhashed address that has to be interpreted post-hoc. If not possible, and the aim of printing the address is to provide more information for debugging, use %p and boot the kernel with the ``no_hash_pointers`` parameter during debugging, which will print all %p addresses unmodified. If you *really* always want the unmodified address, see %px below.”h]”(hX-When possible, use specialised modifiers such as %pS or %pB (described below) to avoid the need of providing an unhashed address that has to be interpreted post-hoc. If not possible, and the aim of printing the address is to provide more information for debugging, use %p and boot the kernel with the ”…”�”}”(hjeh²hh³Nh´NubjL)�”}”(hŒ``no_hash_pointers``”h]”hŒno_hash_pointers”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjeubhŒR parameter during debugging, which will print all %p addresses unmodified. If you ”…”�”}”(hjeh²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*really*”h]”hŒreally”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjeubhŒ3 always want the unmodified address, see %px below.”…”�”}”(hjeh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´KThj$h²hubhú)�”}”(hŒâIf (and only if) you are printing addresses as a content of a virtual file in e.g. procfs or sysfs (using e.g. seq_printf(), not printk()) read by a userspace process, use the %pK modifier described below instead of %p or %px.”h]”hŒâIf (and only if) you are printing addresses as a content of a virtual file in e.g. procfs or sysfs (using e.g. seq_printf(), not printk()) read by a userspace process, use the %pK modifier described below instead of %p or %px.”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´K\hj$h²hubeh}”(h]”Œplain-pointers”ah ]”h"]”Œplain pointers”ah$]”h&]”uh1hµhjéh²hh³hÊh´KHubh¶)�”}”(hhh]”(h»)�”}”(hŒError Pointers”h]”hŒError Pointers”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¯h²hh³hÊh´KaubjŠ)�”}”(hŒ%pe -ENOSPC”h]”hŒ%pe -ENOSPC”…”�”}”hjÀsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´Kehj¯h²hubhú)�”}”(hŒùFor printing error pointers (i.e. a pointer for which IS_ERR() is true) as a symbolic error name. Error values for which no symbolic name is known are printed in decimal, while a non-ERR_PTR passed as the argument to %pe gets treated as ordinary %p.”h]”hŒùFor printing error pointers (i.e. a pointer for which IS_ERR() is true) as a symbolic error name. Error values for which no symbolic name is known are printed in decimal, while a non-ERR_PTR passed as the argument to %pe gets treated as ordinary %p.”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Kghj¯h²hubeh}”(h]”Œerror-pointers”ah ]”h"]”Œerror pointers”ah$]”h&]”uh1hµhjéh²hh³hÊh´Kaubh¶)�”}”(hhh]”(h»)�”}”(hŒSymbols/Function Pointers”h]”hŒSymbols/Function Pointers”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjäh²hh³hÊh´KmubjŠ)�”}”(hŒ¿%pS versatile_init+0x0/0x110 %ps versatile_init %pSR versatile_init+0x9/0x110 (with __builtin_extract_return_addr() translation) %pB prev_fn_of_versatile_init+0x88/0x88”h]”hŒ¿%pS versatile_init+0x0/0x110 %ps versatile_init %pSR versatile_init+0x9/0x110 (with __builtin_extract_return_addr() translation) %pB prev_fn_of_versatile_init+0x88/0x88”…”�”}”hjõsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´Kqhjäh²hubhú)�”}”(hŒ×The ``S`` and ``s`` specifiers are used for printing a pointer in symbolic format. They result in the symbol name with (S) or without (s) offsets. If KALLSYMS are disabled then the symbol address is printed instead.”h]”(hŒThe ”…”�”}”(hjh²hh³Nh´NubjL)�”}”(hŒ``S``”h]”hŒS”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjubhŒ and ”…”�”}”(hjh²hh³Nh´NubjL)�”}”(hŒ``s``”h]”hŒs”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjubhŒÄ specifiers are used for printing a pointer in symbolic format. They result in the symbol name with (S) or without (s) offsets. If KALLSYMS are disabled then the symbol address is printed instead.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Kxhjäh²hubhú)�”}”(hXThe ``B`` specifier results in the symbol name with offsets and should be used when printing stack backtraces. The specifier takes into consideration the effect of compiler optimisations which may occur when tail-calls are used and marked with the noreturn GCC attribute.”h]”(hŒThe ”…”�”}”(hj5h²hh³Nh´NubjL)�”}”(hŒ``B``”h]”hŒB”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj5ubhX specifier results in the symbol name with offsets and should be used when printing stack backtraces. The specifier takes into consideration the effect of compiler optimisations which may occur when tail-calls are used and marked with the noreturn GCC attribute.”…”�”}”(hj5h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´K|hjäh²hubhú)�”}”(hŒ¥If the pointer is within a module, the module name and optionally build ID is printed after the symbol name with an extra ``b`` appended to the end of the specifier.”h]”(hŒzIf the pointer is within a module, the module name and optionally build ID is printed after the symbol name with an extra ”…”�”}”(hjUh²hh³Nh´NubjL)�”}”(hŒ``b``”h]”hŒb”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjUubhŒ& appended to the end of the specifier.”…”�”}”(hjUh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´K�hjäh²hubjŠ)�”}”(hX|%pS versatile_init+0x0/0x110 [module_name] %pSb versatile_init+0x0/0x110 [module_name ed5019fdf5e53be37cb1ba7899292d7e143b259e] %pSRb versatile_init+0x9/0x110 [module_name ed5019fdf5e53be37cb1ba7899292d7e143b259e] (with __builtin_extract_return_addr() translation) %pBb prev_fn_of_versatile_init+0x88/0x88 [module_name ed5019fdf5e53be37cb1ba7899292d7e143b259e]”h]”hX|%pS versatile_init+0x0/0x110 [module_name] %pSb versatile_init+0x0/0x110 [module_name ed5019fdf5e53be37cb1ba7899292d7e143b259e] %pSRb versatile_init+0x9/0x110 [module_name ed5019fdf5e53be37cb1ba7899292d7e143b259e] (with __builtin_extract_return_addr() translation) %pBb prev_fn_of_versatile_init+0x88/0x88 [module_name ed5019fdf5e53be37cb1ba7899292d7e143b259e]”…”�”}”hjusbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´K‡hjäh²hubeh}”(h]”Œsymbols-function-pointers”ah ]”h"]”Œsymbols/function pointers”ah$]”h&]”uh1hµhjéh²hh³hÊh´Kmubh¶)�”}”(hhh]”(h»)�”}”(hŒ"Probed Pointers from BPF / tracing”h]”hŒ"Probed Pointers from BPF / tracing”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj‹h²hh³hÊh´KŽubjŠ)�”}”(hŒ)%pks kernel string %pus user string”h]”hŒ)%pks kernel string %pus user string”…”�”}”hjœsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´K’hj‹h²hubhú)�”}”(hX}The ``k`` and ``u`` specifiers are used for printing prior probed memory from either kernel memory (k) or user memory (u). The subsequent ``s`` specifier results in printing a string. For direct use in regular vsnprintf() the (k) and (u) annotation is ignored, however, when used out of BPF's bpf_trace_printk(), for example, it reads the memory it is pointing to without faulting.”h]”(hŒThe ”…”�”}”(hjªh²hh³Nh´NubjL)�”}”(hŒ``k``”h]”hŒk”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjªubhŒ and ”…”�”}”(hjªh²hh³Nh´NubjL)�”}”(hŒ``u``”h]”hŒu”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjªubhŒw specifiers are used for printing prior probed memory from either kernel memory (k) or user memory (u). The subsequent ”…”�”}”(hjªh²hh³Nh´NubjL)�”}”(hŒ``s``”h]”hŒs”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjªubhŒð specifier results in printing a string. For direct use in regular vsnprintf() the (k) and (u) annotation is ignored, however, when used out of BPF’s bpf_trace_printk(), for example, it reads the memory it is pointing to without faulting.”…”�”}”(hjªh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´K•hj‹h²hubeh}”(h]”Œ probed-pointers-from-bpf-tracing”ah ]”h"]”Œ"probed pointers from bpf / tracing”ah$]”h&]”uh1hµhjéh²hh³hÊh´KŽubh¶)�”}”(hhh]”(h»)�”}”(hŒKernel Pointers”h]”hŒKernel Pointers”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjöh²hh³hÊh´KœubjŠ)�”}”(hŒ$%pK 01234567 or 0123456789abcdef”h]”hŒ$%pK 01234567 or 0123456789abcdef”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´K hjöh²hubhú)�”}”(hŒÉFor printing kernel pointers which should be hidden from unprivileged users. The behaviour of %pK depends on the kptr_restrict sysctl - see Documentation/admin-guide/sysctl/kernel.rst for more details.”h]”hŒÉFor printing kernel pointers which should be hidden from unprivileged users. The behaviour of %pK depends on the kptr_restrict sysctl - see Documentation/admin-guide/sysctl/kernel.rst for more details.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´K¢hjöh²hubhú)�”}”(hŒéThis modifier is *only* intended when producing content of a file read by userspace from e.g. procfs or sysfs, not for dmesg. Please refer to the section about %p above for discussion about how to manage hashing pointers in printk().”h]”(hŒThis modifier is ”…”�”}”(hj#h²hh³Nh´Nubj€)�”}”(hŒ*only*”h]”hŒonly”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#ubhŒÒ intended when producing content of a file read by userspace from e.g. procfs or sysfs, not for dmesg. Please refer to the section about %p above for discussion about how to manage hashing pointers in printk().”…”�”}”(hj#h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´K¦hjöh²hubeh}”(h]”Œkernel-pointers”ah ]”h"]”Œkernel pointers”ah$]”h&]”uh1hµhjéh²hh³hÊh´Kœubh¶)�”}”(hhh]”(h»)�”}”(hŒUnmodified Addresses”h]”hŒUnmodified Addresses”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjKh²hh³hÊh´K¬ubjŠ)�”}”(hŒ$%px 01234567 or 0123456789abcdef”h]”hŒ$%px 01234567 or 0123456789abcdef”…”�”}”hj\sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´K°hjKh²hubhú)�”}”(hX´For printing pointers when you *really* want to print the address. Please consider whether or not you are leaking sensitive information about the kernel memory layout before printing pointers with %px. %px is functionally equivalent to %lx (or %lu). %px is preferred because it is more uniquely grep'able. If in the future we need to modify the way the kernel handles printing pointers we will be better equipped to find the call sites.”h]”(hŒFor printing pointers when you ”…”�”}”(hjjh²hh³Nh´Nubj€)�”}”(hŒ*really*”h]”hŒreally”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjjubhX� want to print the address. Please consider whether or not you are leaking sensitive information about the kernel memory layout before printing pointers with %px. %px is functionally equivalent to %lx (or %lu). %px is preferred because it is more uniquely grep’able. If in the future we need to modify the way the kernel handles printing pointers we will be better equipped to find the call sites.”…”�”}”(hjjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´K²hjKh²hubhú)�”}”(hX—Before using %px, consider if using %p is sufficient together with enabling the ``no_hash_pointers`` kernel parameter during debugging sessions (see the %p description above). One valid scenario for %px might be printing information immediately before a panic, which prevents any sensitive information to be exploited anyway, and with %px there would be no need to reproduce the panic with no_hash_pointers.”h]”(hŒPBefore using %px, consider if using %p is sufficient together with enabling the ”…”�”}”(hjŠh²hh³Nh´NubjL)�”}”(hŒ``no_hash_pointers``”h]”hŒno_hash_pointers”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjŠubhX3 kernel parameter during debugging sessions (see the %p description above). One valid scenario for %px might be printing information immediately before a panic, which prevents any sensitive information to be exploited anyway, and with %px there would be no need to reproduce the panic with no_hash_pointers.”…”�”}”(hjŠh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´K¹hjKh²hubeh}”(h]”Œunmodified-addresses”ah ]”h"]”Œunmodified addresses”ah$]”h&]”uh1hµhjéh²hh³hÊh´K¬ubh¶)�”}”(hhh]”(h»)�”}”(hŒPointer Differences”h]”hŒPointer Differences”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj²h²hh³hÊh´KÁubjŠ)�”}”(hŒ%td 2560 %tx a00”h]”hŒ%td 2560 %tx a00”…”�”}”hjÃsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´KÅhj²h²hubhú)�”}”(hŒHFor printing the pointer differences, use the %t modifier for ptrdiff_t.”h]”hŒHFor printing the pointer differences, use the %t modifier for ptrdiff_t.”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´KÈhj²h²hubhú)�”}”(hŒ Example::”h]”hŒExample:”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´KÊhj²h²hubjŠ)�”}”(hŒ@printk("test: difference between pointers: %td\n", ptr2 - ptr1);”h]”hŒ@printk("test: difference between pointers: %td\n", ptr2 - ptr1);”…”�”}”hjísbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´KÌhj²h²hubeh}”(h]”Œpointer-differences”ah ]”h"]”Œpointer differences”ah$]”h&]”uh1hµhjéh²hh³hÊh´KÁubh¶)�”}”(hhh]”(h»)�”}”(hŒStruct Resources”h]”hŒStruct Resources”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´KÏubjŠ)�”}”(hXw%pr [mem 0x60000000-0x6fffffff flags 0x2200] or [mem 0x60000000 flags 0x2200] or [mem 0x0000000060000000-0x000000006fffffff flags 0x2200] [mem 0x0000000060000000 flags 0x2200] %pR [mem 0x60000000-0x6fffffff pref] or [mem 0x60000000 pref] or [mem 0x0000000060000000-0x000000006fffffff pref] [mem 0x0000000060000000 pref]”h]”hXw%pr [mem 0x60000000-0x6fffffff flags 0x2200] or [mem 0x60000000 flags 0x2200] or [mem 0x0000000060000000-0x000000006fffffff flags 0x2200] [mem 0x0000000060000000 flags 0x2200] %pR [mem 0x60000000-0x6fffffff pref] or [mem 0x60000000 pref] or [mem 0x0000000060000000-0x000000006fffffff pref] [mem 0x0000000060000000 pref]”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´KÓhjh²hubhú)�”}”(hŒÀFor printing struct resources. The ``R`` and ``r`` specifiers result in a printed resource with (R) or without (r) a decoded flags member. If start is equal to end only print the start value.”h]”(hŒ#For printing struct resources. The ”…”�”}”(hj"h²hh³Nh´NubjL)�”}”(hŒ``R``”h]”hŒR”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj"ubhŒ and ”…”�”}”(hj"h²hh³Nh´NubjL)�”}”(hŒ``r``”h]”hŒr”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj"ubhŒŽ specifiers result in a printed resource with (R) or without (r) a decoded flags member. If start is equal to end only print the start value.”…”�”}”(hj"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´KÜhjh²hubhú)�”}”(hŒPassed by reference.”h]”hŒPassed by reference.”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Kàhjh²hubeh}”(h]”Œstruct-resources”ah ]”h"]”Œstruct resources”ah$]”h&]”uh1hµhjéh²hh³hÊh´KÏubh¶)�”}”(hhh]”(h»)�”}”(hŒ"Physical address types phys_addr_t”h]”hŒ"Physical address types phys_addr_t”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjjh²hh³hÊh´KãubjŠ)�”}”(hŒ(%pa[p] 0x01234567 or 0x0123456789abcdef”h]”hŒ(%pa[p] 0x01234567 or 0x0123456789abcdef”…”�”}”hj{sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´Kçhjjh²hubhú)�”}”(hŒ£For printing a phys_addr_t type (and its derivatives, such as resource_size_t) which can vary based on build options, regardless of the width of the CPU data path.”h]”hŒ£For printing a phys_addr_t type (and its derivatives, such as resource_size_t) which can vary based on build options, regardless of the width of the CPU data path.”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Kéhjjh²hubhú)�”}”(hŒPassed by reference.”h]”hŒPassed by reference.”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Kíhjjh²hubeh}”(h]”Œ"physical-address-types-phys-addr-t”ah ]”h"]”Œ"physical address types phys_addr_t”ah$]”h&]”uh1hµhjéh²hh³hÊh´Kãubh¶)�”}”(hhh]”(h»)�”}”(hŒ Struct Range”h]”hŒ Struct Range”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj­h²hh³hÊh´KðubjŠ)�”}”(hŒ[%pra [range 0x0000000060000000-0x000000006fffffff] or [range 0x0000000060000000]”h]”hŒ[%pra [range 0x0000000060000000-0x000000006fffffff] or [range 0x0000000060000000]”…”�”}”hj¾sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´Kôhj­h²hubhú)�”}”(hŒ†For printing struct range. struct range holds an arbitrary range of u64 values. If start is equal to end only print the start value.”h]”hŒ†For printing struct range. struct range holds an arbitrary range of u64 values. If start is equal to end only print the start value.”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´K÷hj­h²hubhú)�”}”(hŒPassed by reference.”h]”hŒPassed by reference.”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Kúhj­h²hubeh}”(h]”Œ struct-range”ah ]”h"]”Œ struct range”ah$]”h&]”uh1hµhjéh²hh³hÊh´Kðubh¶)�”}”(hhh]”(h»)�”}”(hŒDMA address types dma_addr_t”h]”hŒDMA address types dma_addr_t”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjðh²hh³hÊh´KýubjŠ)�”}”(hŒ(%pad 0x01234567 or 0x0123456789abcdef”h]”hŒ(%pad 0x01234567 or 0x0123456789abcdef”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´Mhjðh²hubhú)�”}”(hŒsFor printing a dma_addr_t type which can vary based on build options, regardless of the width of the CPU data path.”h]”hŒsFor printing a dma_addr_t type which can vary based on build options, regardless of the width of the CPU data path.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mhjðh²hubhú)�”}”(hŒPassed by reference.”h]”hŒPassed by reference.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mhjðh²hubeh}”(h]”Œdma-address-types-dma-addr-t”ah ]”h"]”Œdma address types dma_addr_t”ah$]”h&]”uh1hµhjéh²hh³hÊh´Kýubh¶)�”}”(hhh]”(h»)�”}”(hŒRaw buffer as an escaped string”h]”hŒRaw buffer as an escaped string”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj3h²hh³hÊh´M ubjŠ)�”}”(hŒ %*pE[achnops]”h]”hŒ %*pE[achnops]”…”�”}”hjDsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´M hj3h²hubhú)�”}”(hŒHFor printing raw buffer as an escaped string. For the following buffer::”h]”hŒGFor printing raw buffer as an escaped string. For the following buffer:”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mhj3h²hubjŠ)�”}”(hŒ1b 62 20 5c 43 07 22 90 0d 5d”h]”hŒ1b 62 20 5c 43 07 22 90 0d 5d”…”�”}”hj`sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´Mhj3h²hubhú)�”}”(hŒUA few examples show how the conversion would be done (excluding surrounding quotes)::”h]”hŒTA few examples show how the conversion would be done (excluding surrounding quotes):”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mhj3h²hubjŠ)�”}”(hŒ~%*pE "\eb \C\a"\220\r]" %*pEhp "\x1bb \C\x07"\x90\x0d]" %*pEa "\e\142\040\\\103\a\042\220\r\135"”h]”hŒ~%*pE "\eb \C\a"\220\r]" %*pEhp "\x1bb \C\x07"\x90\x0d]" %*pEa "\e\142\040\\\103\a\042\220\r\135"”…”�”}”hj|sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´Mhj3h²hubhú)�”}”(hŒ–The conversion rules are applied according to an optional combination of flags (see :c:func:`string_escape_mem` kernel documentation for the details):”h]”(hŒTThe conversion rules are applied according to an optional combination of flags (see ”…”�”}”(hjŠh²hh³Nh´Nubh)�”}”(hŒ:c:func:`string_escape_mem`”h]”jL)�”}”(hj”h]”hŒstring_escape_mem()”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œc”Œc-func”eh"]”h$]”h&]”uh1jKhj’ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œcore-api/printk-formats”Œ refdomain”j¡Œreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰Œ reftarget”Œstring_escape_mem”uh1hh³hÊh´MhjŠubhŒ' kernel documentation for the details):”…”�”}”(hjŠh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mhj3h²hubhŒ block_quote”“”)�”}”(hŒ- a - ESCAPE_ANY - c - ESCAPE_SPECIAL - h - ESCAPE_HEX - n - ESCAPE_NULL - o - ESCAPE_OCTAL - p - ESCAPE_NP - s - ESCAPE_SPACE ”h]”hŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒa - ESCAPE_ANY”h]”hú)�”}”(hjÎh]”hŒa - ESCAPE_ANY”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MhjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhjÇubjË)�”}”(hŒc - ESCAPE_SPECIAL”h]”hú)�”}”(hjåh]”hŒc - ESCAPE_SPECIAL”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mhjãubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhjÇubjË)�”}”(hŒh - ESCAPE_HEX”h]”hú)�”}”(hjüh]”hŒh - ESCAPE_HEX”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M hjúubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhjÇubjË)�”}”(hŒn - ESCAPE_NULL”h]”hú)�”}”(hjh]”hŒn - ESCAPE_NULL”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M!hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhjÇubjË)�”}”(hŒo - ESCAPE_OCTAL”h]”hú)�”}”(hj*h]”hŒo - ESCAPE_OCTAL”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M"hj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhjÇubjË)�”}”(hŒ p - ESCAPE_NP”h]”hú)�”}”(hjAh]”hŒ p - ESCAPE_NP”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M#hj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhjÇubjË)�”}”(hŒs - ESCAPE_SPACE ”h]”hú)�”}”(hŒs - ESCAPE_SPACE”h]”hŒs - ESCAPE_SPACE”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M$hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhjÇubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jÅh³hÊh´MhjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿h³hÊh´Mhj3h²hubhú)�”}”(hŒ!By default ESCAPE_ANY_NP is used.”h]”hŒ!By default ESCAPE_ANY_NP is used.”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M&hj3h²hubhú)�”}”(hŒTESCAPE_ANY_NP is the sane choice for many cases, in particularly for printing SSIDs.”h]”hŒTESCAPE_ANY_NP is the sane choice for many cases, in particularly for printing SSIDs.”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M(hj3h²hubhú)�”}”(hŒ;If field width is omitted then 1 byte only will be escaped.”h]”hŒ;If field width is omitted then 1 byte only will be escaped.”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M+hj3h²hubeh}”(h]”Œraw-buffer-as-an-escaped-string”ah ]”h"]”Œraw buffer as an escaped string”ah$]”h&]”uh1hµhjéh²hh³hÊh´M ubh¶)�”}”(hhh]”(h»)�”}”(hŒRaw buffer as a hex string”h]”hŒRaw buffer as a hex string”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj®h²hh³hÊh´M.ubjŠ)�”}”(hŒc%*ph 00 01 02 ... 3f %*phC 00:01:02: ... :3f %*phD 00-01-02- ... -3f %*phN 000102 ... 3f”h]”hŒc%*ph 00 01 02 ... 3f %*phC 00:01:02: ... :3f %*phD 00-01-02- ... -3f %*phN 000102 ... 3f”…”�”}”hj¿sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´M2hj®h²hubhú)�”}”(hŒ–For printing small buffers (up to 64 bytes long) as a hex string with a certain separator. For larger buffers consider using :c:func:`print_hex_dump`.”h]”(hŒ}For printing small buffers (up to 64 bytes long) as a hex string with a certain separator. For larger buffers consider using ”…”�”}”(hjÍh²hh³Nh´Nubh)�”}”(hŒ:c:func:`print_hex_dump`”h]”jL)�”}”(hj×h]”hŒprint_hex_dump()”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”(j j¡Œc-func”eh"]”h$]”h&]”uh1jKhjÕubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j­Œ refdomain”j¡Œreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰j³Œprint_hex_dump”uh1hh³hÊh´M7hjÍubhŒ.”…”�”}”(hjÍh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M7hj®h²hubeh}”(h]”Œraw-buffer-as-a-hex-string”ah ]”h"]”Œraw buffer as a hex string”ah$]”h&]”uh1hµhjéh²hh³hÊh´M.ubh¶)�”}”(hhh]”(h»)�”}”(hŒMAC/FDDI addresses”h]”hŒMAC/FDDI addresses”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´M<ubjŠ)�”}”(hŒ…%pM 00:01:02:03:04:05 %pMR 05:04:03:02:01:00 %pMF 00-01-02-03-04-05 %pm 000102030405 %pmR 050403020100 %p[mM][FR][U]”h]”hŒ…%pM 00:01:02:03:04:05 %pMR 05:04:03:02:01:00 %pMF 00-01-02-03-04-05 %pm 000102030405 %pmR 050403020100 %p[mM][FR][U]”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´M@hjh²hubhú)�”}”(hŒÈFor printing 6-byte MAC/FDDI addresses in hex notation. The ``M`` and ``m`` specifiers result in a printed address with (M) or without (m) byte separators. The default byte separator is the colon (:).”h]”(hŒWhen ``U`` is passed, the result is printed in the upper case.”h]”(hŒWhen ”…”�”}”(hj»h²hh³Nh´NubjL)�”}”(hŒ``U``”h]”hŒU”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj»ubhŒ4 is passed, the result is printed in the upper case.”…”�”}”(hj»h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MShjh²hubhú)�”}”(hŒPassed by reference.”h]”hŒPassed by reference.”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MUhjh²hubeh}”(h]”Œmac-fddi-addresses”ah ]”h"]”Œmac/fddi addresses”ah$]”h&]”uh1hµhjéh²hh³hÊh´M<ubh¶)�”}”(hhh]”(h»)�”}”(hŒIPv4 addresses”h]”hŒIPv4 addresses”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjñh²hh³hÊh´MXubjŠ)�”}”(hŒ5%pI4 1.2.3.4 %pi4 001.002.003.004 %p[Ii]4[hnbl]”h]”hŒ5%pI4 1.2.3.4 %pi4 001.002.003.004 %p[Ii]4[hnbl]”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´M\hjñh²hubhú)�”}”(hŒ˜For printing IPv4 dot-separated decimal addresses. The ``I4`` and ``i4`` specifiers result in a printed address with (i4) or without (I4) leading zeros.”h]”(hŒ7For printing IPv4 dot-separated decimal addresses. The ”…”�”}”(hj h²hh³Nh´NubjL)�”}”(hŒ``I4``”h]”hŒI4”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj ubhŒ and ”…”�”}”(hj h²hh³Nh´NubjL)�”}”(hŒ``i4``”h]”hŒi4”…”�”}”(hj* h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj ubhŒP specifiers result in a printed address with (i4) or without (I4) leading zeros.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M`hjñh²hubhú)�”}”(hŒÛThe additional ``h``, ``n``, ``b``, and ``l`` specifiers are used to specify host, network, big or little endian order addresses respectively. Where no specifier is provided the default network/big endian order is used.”h]”(hŒThe additional ”…”�”}”(hjB h²hh³Nh´NubjL)�”}”(hŒ``h``”h]”hŒh”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjB ubhŒ, ”…”�”}”(hjB h²hh³Nh´NubjL)�”}”(hŒ``n``”h]”hŒn”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjB ubhŒ, ”…”�”}”hjB sbjL)�”}”(hŒ``b``”h]”hŒb”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjB ubhŒ, and ”…”�”}”(hjB h²hh³Nh´NubjL)�”}”(hŒ``l``”h]”hŒl”…”�”}”(hj€ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjB ubhŒ® specifiers are used to specify host, network, big or little endian order addresses respectively. Where no specifier is provided the default network/big endian order is used.”…”�”}”(hjB h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mdhjñh²hubhú)�”}”(hŒPassed by reference.”h]”hŒPassed by reference.”…”�”}”(hj˜ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mhhjñh²hubeh}”(h]”Œipv4-addresses”ah ]”h"]”Œipv4 addresses”ah$]”h&]”uh1hµhjéh²hh³hÊh´MXubh¶)�”}”(hhh]”(h»)�”}”(hŒIPv6 addresses”h]”hŒIPv6 addresses”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj® h²hh³hÊh´MkubjŠ)�”}”(hŒp%pI6 0001:0002:0003:0004:0005:0006:0007:0008 %pi6 00010002000300040005000600070008 %pI6c 1:2:3:4:5:6:7:8”h]”hŒp%pI6 0001:0002:0003:0004:0005:0006:0007:0008 %pi6 00010002000300040005000600070008 %pI6c 1:2:3:4:5:6:7:8”…”�”}”hj¿ sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´Mohj® h²hubhú)�”}”(hŒ½For printing IPv6 network-order 16-bit hex addresses. The ``I6`` and ``i6`` specifiers result in a printed address with (I6) or without (i6) colon-separators. Leading zeros are always used.”h]”(hŒ:For printing IPv6 network-order 16-bit hex addresses. The ”…”�”}”(hjÍ h²hh³Nh´NubjL)�”}”(hŒ``I6``”h]”hŒI6”…”�”}”(hjÕ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjÍ ubhŒ and ”…”�”}”(hjÍ h²hh³Nh´NubjL)�”}”(hŒ``i6``”h]”hŒi6”…”�”}”(hjç h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjÍ ubhŒr specifiers result in a printed address with (I6) or without (i6) colon-separators. Leading zeros are always used.”…”�”}”(hjÍ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mshj® h²hubhú)�”}”(hŒšThe additional ``c`` specifier can be used with the ``I`` specifier to print a compressed IPv6 address as described by https://tools.ietf.org/html/rfc5952”h]”(hŒThe additional ”…”�”}”(hjÿ h²hh³Nh´NubjL)�”}”(hŒ``c``”h]”hŒc”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjÿ ubhŒ specifier can be used with the ”…”�”}”(hjÿ h²hh³Nh´NubjL)�”}”(hŒ``I``”h]”hŒI”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjÿ ubhŒ> specifier to print a compressed IPv6 address as described by ”…”�”}”(hjÿ h²hh³Nh´Nubj)�”}”(hŒ#https://tools.ietf.org/html/rfc5952”h]”hŒ#https://tools.ietf.org/html/rfc5952”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j- uh1jhjÿ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mwhj® h²hubhú)�”}”(hŒPassed by reference.”h]”hŒPassed by reference.”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M{hj® h²hubeh}”(h]”Œipv6-addresses”ah ]”h"]”Œipv6 addresses”ah$]”h&]”uh1hµhjéh²hh³hÊh´Mkubh¶)�”}”(hhh]”(h»)�”}”(hŒ9IPv4/IPv6 addresses (generic, with port, flowinfo, scope)”h]”hŒ9IPv4/IPv6 addresses (generic, with port, flowinfo, scope)”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjV h²hh³hÊh´M~ubjŠ)�”}”(hŒî%pIS 1.2.3.4 or 0001:0002:0003:0004:0005:0006:0007:0008 %piS 001.002.003.004 or 00010002000300040005000600070008 %pISc 1.2.3.4 or 1:2:3:4:5:6:7:8 %pISpc 1.2.3.4:12345 or [1:2:3:4:5:6:7:8]:12345 %p[Ii]S[pfschnbl]”h]”hŒî%pIS 1.2.3.4 or 0001:0002:0003:0004:0005:0006:0007:0008 %piS 001.002.003.004 or 00010002000300040005000600070008 %pISc 1.2.3.4 or 1:2:3:4:5:6:7:8 %pISpc 1.2.3.4:12345 or [1:2:3:4:5:6:7:8]:12345 %p[Ii]S[pfschnbl]”…”�”}”hjg sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´M‚hjV h²hubhú)�”}”(hŒÖFor printing an IP address without the need to distinguish whether it's of type AF_INET or AF_INET6. A pointer to a valid struct sockaddr, specified through ``IS`` or ``iS``, can be passed to this format specifier.”h]”(hŒŸFor printing an IP address without the need to distinguish whether it’s of type AF_INET or AF_INET6. A pointer to a valid struct sockaddr, specified through ”…”�”}”(hju h²hh³Nh´NubjL)�”}”(hŒ``IS``”h]”hŒIS”…”�”}”(hj} h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhju ubhŒ or ”…”�”}”(hju h²hh³Nh´NubjL)�”}”(hŒ``iS``”h]”hŒiS”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhju ubhŒ), can be passed to this format specifier.”…”�”}”(hju h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MˆhjV h²hubhú)�”}”(hŒÜThe additional ``p``, ``f``, and ``s`` specifiers are used to specify port (IPv4, IPv6), flowinfo (IPv6) and scope (IPv6). Ports have a ``:`` prefix, flowinfo a ``/`` and scope a ``%``, each followed by the actual value.”h]”(hŒThe additional ”…”�”}”(hj§ h²hh³Nh´NubjL)�”}”(hŒ``p``”h]”hŒp”…”�”}”(hj¯ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj§ ubhŒ, ”…”�”}”(hj§ h²hh³Nh´NubjL)�”}”(hŒ``f``”h]”hŒf”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj§ ubhŒ, and ”…”�”}”(hj§ h²hh³Nh´NubjL)�”}”(hŒ``s``”h]”hŒs”…”�”}”(hjÓ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj§ ubhŒb specifiers are used to specify port (IPv4, IPv6), flowinfo (IPv6) and scope (IPv6). Ports have a ”…”�”}”(hj§ h²hh³Nh´NubjL)�”}”(hŒ``:``”h]”hŒ:”…”�”}”(hjå h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj§ ubhŒ prefix, flowinfo a ”…”�”}”(hj§ h²hh³Nh´NubjL)�”}”(hŒ``/``”h]”hŒ/”…”�”}”(hj÷ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj§ ubhŒ and scope a ”…”�”}”(hj§ h²hh³Nh´NubjL)�”}”(hŒ``%``”h]”hŒ%”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj§ ubhŒ$, each followed by the actual value.”…”�”}”(hj§ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MŒhjV h²hubhú)�”}”(hXbIn case of an IPv6 address the compressed IPv6 address as described by https://tools.ietf.org/html/rfc5952 is being used if the additional specifier ``c`` is given. The IPv6 address is surrounded by ``[``, ``]`` in case of additional specifiers ``p``, ``f`` or ``s`` as suggested by https://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-07”h]”(hŒGIn case of an IPv6 address the compressed IPv6 address as described by ”…”�”}”(hj! h²hh³Nh´Nubj)�”}”(hŒ#https://tools.ietf.org/html/rfc5952”h]”hŒ#https://tools.ietf.org/html/rfc5952”…”�”}”(hj) h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j+ uh1jhj! ubhŒ+ is being used if the additional specifier ”…”�”}”(hj! h²hh³Nh´NubjL)�”}”(hŒ``c``”h]”hŒc”…”�”}”(hj< h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj! ubhŒ- is given. The IPv6 address is surrounded by ”…”�”}”(hj! h²hh³Nh´NubjL)�”}”(hŒ``[``”h]”hŒ[”…”�”}”(hjN h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj! ubhŒ, ”…”�”}”(hj! h²hh³Nh´NubjL)�”}”(hŒ``]``”h]”hŒ]”…”�”}”(hj` h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj! ubhŒ" in case of additional specifiers ”…”�”}”(hj! h²hh³Nh´NubjL)�”}”(hŒ``p``”h]”hŒp”…”�”}”(hjr h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj! ubhŒ, ”…”�”}”hj! sbjL)�”}”(hŒ``f``”h]”hŒf”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj! ubhŒ or ”…”�”}”(hj! h²hh³Nh´NubjL)�”}”(hŒ``s``”h]”hŒs”…”�”}”(hj– h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj! ubhŒ as suggested by ”…”�”}”(hj! h²hh³Nh´Nubj)�”}”(hŒGhttps://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-07”h]”hŒGhttps://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-07”…”�”}”(hj¨ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jª uh1jhj! ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M�hjV h²hubhú)�”}”(hŒ“In case of IPv4 addresses, the additional ``h``, ``n``, ``b``, and ``l`` specifiers can be used as well and are ignored in case of an IPv6 address.”h]”(hŒ*In case of IPv4 addresses, the additional ”…”�”}”(hj½ h²hh³Nh´NubjL)�”}”(hŒ``h``”h]”hŒh”…”�”}”(hjÅ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj½ ubhŒ, ”…”�”}”(hj½ h²hh³Nh´NubjL)�”}”(hŒ``n``”h]”hŒn”…”�”}”(hj× h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj½ ubhŒ, ”…”�”}”hj½ sbjL)�”}”(hŒ``b``”h]”hŒb”…”�”}”(hjé h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj½ ubhŒ, and ”…”�”}”(hj½ h²hh³Nh´NubjL)�”}”(hŒ``l``”h]”hŒl”…”�”}”(hjû h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj½ ubhŒK specifiers can be used as well and are ignored in case of an IPv6 address.”…”�”}”(hj½ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M–hjV h²hubhú)�”}”(hŒPassed by reference.”h]”hŒPassed by reference.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MšhjV h²hubhú)�”}”(hŒFurther examples::”h]”hŒFurther examples:”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MœhjV h²hubjŠ)�”}”(hŒÃ%pISfc 1.2.3.4 or [1:2:3:4:5:6:7:8]/123456789 %pISsc 1.2.3.4 or [1:2:3:4:5:6:7:8]%1234567890 %pISpfc 1.2.3.4:12345 or [1:2:3:4:5:6:7:8]:12345/123456789”h]”hŒÃ%pISfc 1.2.3.4 or [1:2:3:4:5:6:7:8]/123456789 %pISsc 1.2.3.4 or [1:2:3:4:5:6:7:8]%1234567890 %pISpfc 1.2.3.4:12345 or [1:2:3:4:5:6:7:8]:12345/123456789”…”�”}”hj/ sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´MžhjV h²hubeh}”(h]”Œ4ipv4-ipv6-addresses-generic-with-port-flowinfo-scope”ah ]”h"]”Œ9ipv4/ipv6 addresses (generic, with port, flowinfo, scope)”ah$]”h&]”uh1hµhjéh²hh³hÊh´M~ubh¶)�”}”(hhh]”(h»)�”}”(hŒUUID/GUID addresses”h]”hŒUUID/GUID addresses”…”�”}”(hjH h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjE h²hh³hÊh´M£ubjŠ)�”}”(hŒ³%pUb 00010203-0405-0607-0809-0a0b0c0d0e0f %pUB 00010203-0405-0607-0809-0A0B0C0D0E0F %pUl 03020100-0504-0706-0809-0a0b0c0e0e0f %pUL 03020100-0504-0706-0809-0A0B0C0E0E0F”h]”hŒ³%pUb 00010203-0405-0607-0809-0a0b0c0d0e0f %pUB 00010203-0405-0607-0809-0A0B0C0D0E0F %pUl 03020100-0504-0706-0809-0a0b0c0e0e0f %pUL 03020100-0504-0706-0809-0A0B0C0E0E0F”…”�”}”hjV sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´M§hjE h²hubhú)�”}”(hŒüFor printing 16-byte UUID/GUIDs addresses. The additional ``l``, ``L``, ``b`` and ``B`` specifiers are used to specify a little endian order in lower (l) or upper case (L) hex notation - and big endian order in lower (b) or upper case (B) hex notation.”h]”(hŒ:For printing 16-byte UUID/GUIDs addresses. The additional ”…”�”}”(hjd h²hh³Nh´NubjL)�”}”(hŒ``l``”h]”hŒl”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjd ubhŒ, ”…”�”}”(hjd h²hh³Nh´NubjL)�”}”(hŒ``L``”h]”hŒL”…”�”}”(hj~ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjd ubhŒ, ”…”�”}”(hjd h²hh³Nh´NubjL)�”}”(hŒ``b``”h]”hŒb”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjd ubhŒ and ”…”�”}”(hjd h²hh³Nh´NubjL)�”}”(hŒ``B``”h]”hŒB”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjd ubhŒ¥ specifiers are used to specify a little endian order in lower (l) or upper case (L) hex notation - and big endian order in lower (b) or upper case (B) hex notation.”…”�”}”(hjd h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M¬hjE h²hubhú)�”}”(hŒrWhere no additional specifiers are used the default big endian order with lower case hex notation will be printed.”h]”hŒrWhere no additional specifiers are used the default big endian order with lower case hex notation will be printed.”…”�”}”(hjº h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M±hjE h²hubhú)�”}”(hŒPassed by reference.”h]”hŒPassed by reference.”…”�”}”(hjÈ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M´hjE h²hubeh}”(h]”Œuuid-guid-addresses”ah ]”h"]”Œuuid/guid addresses”ah$]”h&]”uh1hµhjéh²hh³hÊh´M£ubh¶)�”}”(hhh]”(h»)�”}”(hŒ dentry names”h]”hŒ dentry names”…”�”}”(hjá h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÞ h²hh³hÊh´M·ubjŠ)�”}”(hŒ%pd{,2,3,4} %pD{,2,3,4}”h]”hŒ%pd{,2,3,4} %pD{,2,3,4}”…”�”}”hjï sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´M»hjÞ h²hubhú)�”}”(hXFor printing dentry name; if we race with :c:func:`d_move`, the name might be a mix of old and new ones, but it won't oops. %pd dentry is a safer equivalent of %s dentry->d_name.name we used to use, %pd prints ``n`` last components. %pD does the same thing for struct file.”h]”(hŒ*For printing dentry name; if we race with ”…”�”}”(hjý h²hh³Nh´Nubh)�”}”(hŒ:c:func:`d_move`”h]”jL)�”}”(hj h]”hŒd_move()”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”(j j¡Œc-func”eh"]”h$]”h&]”uh1jKhj ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j­Œ refdomain”j¡Œreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰j³Œd_move”uh1hh³hÊh´M¾hjý ubhŒž, the name might be a mix of old and new ones, but it won’t oops. %pd dentry is a safer equivalent of %s dentry->d_name.name we used to use, %pd prints ”…”�”}”(hjý h²hh³Nh´NubjL)�”}”(hŒ``n``”h]”hŒn”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjý ubhŒ; last components. %pD does the same thing for struct file.”…”�”}”(hjý h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M¾hjÞ h²hubhú)�”}”(hŒPassed by reference.”h]”hŒPassed by reference.”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MÃhjÞ h²hubeh}”(h]”Œ dentry-names”ah ]”h"]”Œ dentry names”ah$]”h&]”uh1hµhjéh²hh³hÊh´M·ubh¶)�”}”(hhh]”(h»)�”}”(hŒblock_device names”h]”hŒblock_device names”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjV h²hh³hÊh´MÆubjŠ)�”}”(hŒ%pg sda, sda1 or loop0p1”h]”hŒ%pg sda, sda1 or loop0p1”…”�”}”hjg sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´MÊhjV h²hubhú)�”}”(hŒ+For printing name of block_device pointers.”h]”hŒ+For printing name of block_device pointers.”…”�”}”(hju h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MÌhjV h²hubeh}”(h]”Œblock-device-names”ah ]”h"]”Œblock_device names”ah$]”h&]”uh1hµhjéh²hh³hÊh´MÆubh¶)�”}”(hhh]”(h»)�”}”(hŒstruct va_format”h]”hŒstruct va_format”…”�”}”(hjŽ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj‹ h²hh³hÊh´MÏubjŠ)�”}”(hŒ%pV”h]”hŒ%pV”…”�”}”hjœ sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´MÓhj‹ h²hubhú)�”}”(hŒ`For printing struct va_format structures. These contain a format string and va_list as follows::”h]”hŒ_For printing struct va_format structures. These contain a format string and va_list as follows:”…”�”}”(hjª h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MÕhj‹ h²hubjŠ)�”}”(hŒCstruct va_format { const char *fmt; va_list *va; };”h]”hŒCstruct va_format { const char *fmt; va_list *va; };”…”�”}”hj¸ sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´MØhj‹ h²hubhú)�”}”(hŒ#Implements a "recursive vsnprintf".”h]”hŒ'Implements a “recursive vsnprintfâ€�.”…”�”}”(hjÆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MÝhj‹ h²hubhú)�”}”(hŒtDo not use this feature without some mechanism to verify the correctness of the format string and va_list arguments.”h]”hŒtDo not use this feature without some mechanism to verify the correctness of the format string and va_list arguments.”…”�”}”(hjÔ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mßhj‹ h²hubhú)�”}”(hŒPassed by reference.”h]”hŒPassed by reference.”…”�”}”(hjâ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mâhj‹ h²hubeh}”(h]”Œstruct-va-format”ah ]”h"]”Œstruct va_format”ah$]”h&]”uh1hµhjéh²hh³hÊh´MÏubh¶)�”}”(hhh]”(h»)�”}”(hŒDevice tree nodes”h]”hŒDevice tree nodes”…”�”}”(hjû h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjø h²hh³hÊh´MåubjŠ)�”}”(hŒ %pOF[fnpPcCF]”h]”hŒ %pOF[fnpPcCF]”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´Méhjø h²hubhú)�”}”(hŒSFor printing device tree node structures. Default behaviour is equivalent to %pOFf.”h]”hŒSFor printing device tree node structures. Default behaviour is equivalent to %pOFf.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mìhjø h²hubjÀ)�”}”(hŒË- f - device node full_name - n - device node name - p - device node phandle - P - device node path spec (name + @unit) - F - device node flags - c - major compatible string - C - full compatible string ”h]”jÆ)�”}”(hhh]”(jË)�”}”(hŒf - device node full_name”h]”hú)�”}”(hj.h]”hŒf - device node full_name”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mïhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhj)ubjË)�”}”(hŒn - device node name”h]”hú)�”}”(hjEh]”hŒn - device node name”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MðhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhj)ubjË)�”}”(hŒp - device node phandle”h]”hú)�”}”(hj\h]”hŒp - device node phandle”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MñhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhj)ubjË)�”}”(hŒ(P - device node path spec (name + @unit)”h]”hú)�”}”(hjsh]”hŒ(P - device node path spec (name + @unit)”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mòhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhj)ubjË)�”}”(hŒF - device node flags”h]”hú)�”}”(hjŠh]”hŒF - device node flags”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Móhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhj)ubjË)�”}”(hŒc - major compatible string”h]”hú)�”}”(hj¡h]”hŒc - major compatible string”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MôhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhj)ubjË)�”}”(hŒC - full compatible string ”h]”hú)�”}”(hŒC - full compatible string”h]”hŒC - full compatible string”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mõhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhj)ubeh}”(h]”h ]”h"]”h$]”h&]”jtjuuh1jÅh³hÊh´Mïhj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿h³hÊh´Mïhjø h²hubhú)�”}”(hŒ2The separator when using multiple arguments is ':'”h]”hŒ6The separator when using multiple arguments is ‘:’”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M÷hjø h²hubhú)�”}”(hŒ Examples::”h]”hŒ Examples:”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mùhjø h²hubjŠ)�”}”(hX`%pOF /foo/bar@0 - Node full name %pOFf /foo/bar@0 - Same as above %pOFfp /foo/bar@0:10 - Node full name + phandle %pOFfcF /foo/bar@0:foo,device:--P- - Node full name + major compatible string + node flags D - dynamic d - detached P - Populated B - Populated bus”h]”hX`%pOF /foo/bar@0 - Node full name %pOFf /foo/bar@0 - Same as above %pOFfp /foo/bar@0:10 - Node full name + phandle %pOFfcF /foo/bar@0:foo,device:--P- - Node full name + major compatible string + node flags D - dynamic d - detached P - Populated B - Populated bus”…”�”}”hjösbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´Mûhjø h²hubhú)�”}”(hŒPassed by reference.”h]”hŒPassed by reference.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mhjø h²hubeh}”(h]”Œdevice-tree-nodes”ah ]”h"]”Œdevice tree nodes”ah$]”h&]”uh1hµhjéh²hh³hÊh´Måubh¶)�”}”(hhh]”(h»)�”}”(hŒFwnode handles”h]”hŒFwnode handles”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´M ubjŠ)�”}”(hŒ%pfw[fP]”h]”hŒ%pfw[fP]”…”�”}”hj+sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´M hjh²hubhú)�”}”(hŒ¦For printing information on an fwnode_handle. The default is to print the full node name, including the path. The modifiers are functionally equivalent to %pOF above.”h]”hŒ¦For printing information on an fwnode_handle. The default is to print the full node name, including the path. The modifiers are functionally equivalent to %pOF above.”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mhjh²hubjÀ)�”}”(hŒr- f - full name of the node, including the path - P - the name of the node including an address (if there is one) ”h]”jÆ)�”}”(hhh]”(jË)�”}”(hŒ-f - full name of the node, including the path”h]”hú)�”}”(hjPh]”hŒ-f - full name of the node, including the path”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhjKubjË)�”}”(hŒ@P - the name of the node including an address (if there is one) ”h]”hú)�”}”(hŒ?P - the name of the node including an address (if there is one)”h]”hŒ?P - the name of the node including an address (if there is one)”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhjKubeh}”(h]”h ]”h"]”h$]”h&]”jtjuuh1jÅh³hÊh´MhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿h³hÊh´Mhjh²hubhú)�”}”(hŒExamples (ACPI)::”h]”hŒExamples (ACPI):”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mhjh²hubjŠ)�”}”(hŒ|%pfwf \_SB.PCI0.CIO2.port@1.endpoint@0 - Full node name %pfwP endpoint@0 - Node name”h]”hŒ|%pfwf \_SB.PCI0.CIO2.port@1.endpoint@0 - Full node name %pfwP endpoint@0 - Node name”…”�”}”hj—sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´Mhjh²hubhú)�”}”(hŒExamples (OF)::”h]”hŒExamples (OF):”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mhjh²hubjŠ)�”}”(hŒ‚%pfwf /ocp@68000000/i2c@48072000/camera@10/port/endpoint - Full name %pfwP endpoint - Node name”h]”hŒ‚%pfwf /ocp@68000000/i2c@48072000/camera@10/port/endpoint - Full name %pfwP endpoint - Node name”…”�”}”hj³sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´Mhjh²hubeh}”(h]”Œfwnode-handles”ah ]”h"]”Œfwnode handles”ah$]”h&]”uh1hµhjéh²hh³hÊh´M ubh¶)�”}”(hhh]”(h»)�”}”(hŒ Time and date”h]”hŒ Time and date”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÉh²hh³hÊh´M!ubjŠ)�”}”(hŒÞ%pt[RT] YYYY-mm-ddTHH:MM:SS %pt[RT]s YYYY-mm-dd HH:MM:SS %pt[RT]d YYYY-mm-dd %pt[RT]t HH:MM:SS %ptSp . %pt[RST][dt][r][s]”h]”hŒÞ%pt[RT] YYYY-mm-ddTHH:MM:SS %pt[RT]s YYYY-mm-dd HH:MM:SS %pt[RT]d YYYY-mm-dd %pt[RT]t HH:MM:SS %ptSp . %pt[RST][dt][r][s]”…”�”}”hjÚsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´M%hjÉh²hubhú)�”}”(hŒ.For printing date and time as represented by::”h]”hŒ-For printing date and time as represented by:”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M,hjÉh²hubjŠ)�”}”(hŒNR content of struct rtc_time S content of struct timespec64 T time64_t type”h]”hŒNR content of struct rtc_time S content of struct timespec64 T time64_t type”…”�”}”hjösbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´M.hjÉh²hubhú)�”}”(hŒin human readable format.”h]”hŒin human readable format.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M2hjÉh²hubhú)�”}”(hŒjBy default year will be incremented by 1900 and month by 1. Use %pt[RT]r (raw) to suppress this behaviour.”h]”hŒjBy default year will be incremented by 1900 and month by 1. Use %pt[RT]r (raw) to suppress this behaviour.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M4hjÉh²hubhú)�”}”(hŒ³The %pt[RT]s (space) will override ISO 8601 separator by using ' ' (space) instead of 'T' (Capital T) between date and time. It won't have any effect when date or time is omitted.”h]”hŒ½The %pt[RT]s (space) will override ISO 8601 separator by using ‘ ‘ (space) instead of ‘T’ (Capital T) between date and time. It won’t have any effect when date or time is omitted.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M7hjÉh²hubhú)�”}”(hX The %ptSp is equivalent to %lld.%09ld for the content of the struct timespec64. When the other specifiers are given, it becomes the respective equivalent of %ptT[dt][r][s].%09ld. In other words, the seconds are being printed in the human readable format followed by a dot and nanoseconds.”h]”hX The %ptSp is equivalent to %lld.%09ld for the content of the struct timespec64. When the other specifiers are given, it becomes the respective equivalent of %ptT[dt][r][s].%09ld. In other words, the seconds are being printed in the human readable format followed by a dot and nanoseconds.”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M;hjÉh²hubhú)�”}”(hŒPassed by reference.”h]”hŒPassed by reference.”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M@hjÉh²hubeh}”(h]”Œ time-and-date”ah ]”h"]”Œ time and date”ah$]”h&]”uh1hµhjéh²hh³hÊh´M!ubh¶)�”}”(hhh]”(h»)�”}”(hŒ struct clk”h]”hŒ struct clk”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjRh²hh³hÊh´MCubjŠ)�”}”(hŒ %pC pll1”h]”hŒ %pC pll1”…”�”}”hjcsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰•¯Eh³hÊh´MGhjRh²hubhú)�”}”(hŒ�For printing struct clk structures. %pC prints the name of the clock (Common Clock Framework) or a unique 32-bit ID (legacy clock framework).”h]”hŒ�For printing struct clk structures. %pC prints the name of the clock (Common Clock Framework) or a unique 32-bit ID (legacy clock framework).”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MIhjRh²hubhú)�”}”(hŒPassed by reference.”h]”hŒPassed by reference.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MLhjRh²hubeh}”(h]”Œ struct-clk”ah ]”h"]”Œ struct clk”ah$]”h&]”uh1hµhjéh²hh³hÊh´MCubh¶)�”}”(hhh]”(h»)�”}”(hŒ7bitmap and its derivatives such as cpumask and nodemask”h]”hŒ7bitmap and its derivatives such as cpumask and nodemask”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj•h²hh³hÊh´MOubjŠ)�”}”(hŒ%*pb 0779 %*pbl 0,3-6,8-10”h]”hŒ%*pb 0779 %*pbl 0,3-6,8-10”…”�”}”hj¦sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´MShj•h²hubhú)�”}”(hŒÖFor printing bitmap and its derivatives such as cpumask and nodemask, %*pb outputs the bitmap with field width as the number of bits and %*pbl output the bitmap as range list with field width as the number of bits.”h]”hŒÖFor printing bitmap and its derivatives such as cpumask and nodemask, %*pb outputs the bitmap with field width as the number of bits and %*pbl output the bitmap as range list with field width as the number of bits.”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MVhj•h²hubhú)�”}”(hŒ²The field width is passed by value, the bitmap is passed by reference. Helper macros cpumask_pr_args() and nodemask_pr_args() are available to ease printing cpumask and nodemask.”h]”hŒ²The field width is passed by value, the bitmap is passed by reference. Helper macros cpumask_pr_args() and nodemask_pr_args() are available to ease printing cpumask and nodemask.”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MZhj•h²hubeh}”(h]”Œ7bitmap-and-its-derivatives-such-as-cpumask-and-nodemask”ah ]”h"]”Œ7bitmap and its derivatives such as cpumask and nodemask”ah$]”h&]”uh1hµhjéh²hh³hÊh´MOubh¶)�”}”(hhh]”(h»)�”}”(hŒ0Flags bitfields such as page flags and gfp_flags”h]”hŒ0Flags bitfields such as page flags and gfp_flags”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjØh²hh³hÊh´M_ubjŠ)�”}”(hŒ½%pGp 0x17ffffc0002036(referenced|uptodate|lru|active|private|node=0|zone=2|lastcpupid=0x1fffff) %pGg GFP_USER|GFP_DMA32|GFP_NOWARN %pGv read|exec|mayread|maywrite|mayexec|denywrite”h]”hŒ½%pGp 0x17ffffc0002036(referenced|uptodate|lru|active|private|node=0|zone=2|lastcpupid=0x1fffff) %pGg GFP_USER|GFP_DMA32|GFP_NOWARN %pGv read|exec|mayread|maywrite|mayexec|denywrite”…”�”}”hjésbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´MchjØh²hubhú)�”}”(hŒ®For printing flags bitfields as a collection of symbolic constants that would construct the value. The type of flags is given by the third character. Currently supported are:”h]”hŒ®For printing flags bitfields as a collection of symbolic constants that would construct the value. The type of flags is given by the third character. Currently supported are:”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MghjØh²hubjÀ)�”}”(hŒ¶- p - [p]age flags, expects value of type (``unsigned long *``) - v - [v]ma_flags, expects value of type (``unsigned long *``) - g - [g]fp_flags, expects value of type (``gfp_t *``) ”h]”jÆ)�”}”(hhh]”(jË)�”}”(hŒ=p - [p]age flags, expects value of type (``unsigned long *``)”h]”hú)�”}”(hjh]”(hŒ)p - [p]age flags, expects value of type (”…”�”}”(hjh²hh³Nh´NubjL)�”}”(hŒ``unsigned long *``”h]”hŒunsigned long *”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjubhŒ)”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mkhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhj ubjË)�”}”(hŒThe flag names and print order depends on the particular type.”h]”hŒ>The flag names and print order depends on the particular type.”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MohjØh²hubhú)�”}”(hŒ­Note that this format should not be used directly in the :c:func:`TP_printk()` part of a tracepoint. Instead, use the show_*_flags() functions from .”h]”(hŒ9Note that this format should not be used directly in the ”…”�”}”(hj¢h²hh³Nh´Nubh)�”}”(hŒ:c:func:`TP_printk()`”h]”jL)�”}”(hj¬h]”hŒ TP_printk()”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”(j j¡Œc-func”eh"]”h$]”h&]”uh1jKhjªubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j­Œ refdomain”j¡Œreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰j³Œ TP_printk”uh1hh³hÊh´Mqhj¢ubhŒ_ part of a tracepoint. Instead, use the show_*_flags() functions from .”…”�”}”(hj¢h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MqhjØh²hubhú)�”}”(hŒPassed by reference.”h]”hŒPassed by reference.”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MuhjØh²hubeh}”(h]”Œ0flags-bitfields-such-as-page-flags-and-gfp-flags”ah ]”h"]”Œ0flags bitfields such as page flags and gfp_flags”ah$]”h&]”uh1hµhjéh²hh³hÊh´M_ubh¶)�”}”(hhh]”(h»)�”}”(hŒNetwork device features”h]”hŒNetwork device features”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjéh²hh³hÊh´MxubjŠ)�”}”(hŒ%pNF 0x000000000000c000”h]”hŒ%pNF 0x000000000000c000”…”�”}”hjúsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´M|hjéh²hubhú)�”}”(hŒFor printing netdev_features_t.”h]”hŒFor printing netdev_features_t.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M~hjéh²hubhú)�”}”(hŒPassed by reference.”h]”hŒPassed by reference.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M€hjéh²hubeh}”(h]”Œnetwork-device-features”ah ]”h"]”Œnetwork device features”ah$]”h&]”uh1hµhjéh²hh³hÊh´Mxubh¶)�”}”(hhh]”(h»)�”}”(hŒ'V4L2 and DRM FourCC code (pixel format)”h]”hŒ'V4L2 and DRM FourCC code (pixel format)”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj,h²hh³hÊh´MƒubjŠ)�”}”(hŒ%p4cc”h]”hŒ%p4cc”…”�”}”hj=sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´M‡hj,h²hubhú)�”}”(hŒlPrint a FourCC code used by V4L2 or DRM, including format endianness and its numerical value as hexadecimal.”h]”hŒlPrint a FourCC code used by V4L2 or DRM, including format endianness and its numerical value as hexadecimal.”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M‰hj,h²hubhú)�”}”(hŒPassed by reference.”h]”hŒPassed by reference.”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MŒhj,h²hubhú)�”}”(hŒ Examples::”h]”hŒ Examples:”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MŽhj,h²hubjŠ)�”}”(hŒt%p4cc BG12 little-endian (0x32314742) %p4cc Y10 little-endian (0x20303159) %p4cc NV12 big-endian (0xb231564e)”h]”hŒt%p4cc BG12 little-endian (0x32314742) %p4cc Y10 little-endian (0x20303159) %p4cc NV12 big-endian (0xb231564e)”…”�”}”hjusbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´M�hj,h²hubeh}”(h]”Œ%v4l2-and-drm-fourcc-code-pixel-format”ah ]”h"]”Œ'v4l2 and drm fourcc code (pixel format)”ah$]”h&]”uh1hµhjéh²hh³hÊh´Mƒubh¶)�”}”(hhh]”(h»)�”}”(hŒGeneric FourCC code”h]”hŒGeneric FourCC code”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj‹h²hh³hÊh´M•ubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒ%:: %p4c[h[R]lb] gP00 (0x67503030) ”h]”(hŒterm”“”)�”}”(hŒ::”h]”hŒ::”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j§h³hÊh´M˜hj£ubhŒ definition”“”)�”}”(hhh]”hú)�”}”(hŒ!%p4c[h[R]lb] gP00 (0x67503030)”h]”hŒ!%p4c[h[R]lb] gP00 (0x67503030)”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M˜hj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¡h³hÊh´M˜hjžubah}”(h]”h ]”h"]”h$]”h&]”uh1jœhj‹h²hh³hÊh´Nubhú)�”}”(hŒ]Print a generic FourCC code, as both ASCII characters and its numerical value as hexadecimal.”h]”hŒ]Print a generic FourCC code, as both ASCII characters and its numerical value as hexadecimal.”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´Mšhj‹h²hubhú)�”}”(hŒ�The generic FourCC code is always printed in the big-endian format, the most significant byte first. This is the opposite of V4L/DRM FourCCs.”h]”hŒ�The generic FourCC code is always printed in the big-endian format, the most significant byte first. This is the opposite of V4L/DRM FourCCs.”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M�hj‹h²hubhú)�”}”(hŒØThe additional ``h``, ``hR``, ``l``, and ``b`` specifiers define what endianness is used to load the stored bytes. The data might be interpreted using the host, reversed host byte order, little-endian, or big-endian.”h]”(hŒThe additional ”…”�”}”(hjøh²hh³Nh´NubjL)�”}”(hŒ``h``”h]”hŒh”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjøubhŒ, ”…”�”}”(hjøh²hh³Nh´NubjL)�”}”(hŒ``hR``”h]”hŒhR”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjøubhŒ, ”…”�”}”hjøsbjL)�”}”(hŒ``l``”h]”hŒl”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjøubhŒ, and ”…”�”}”(hjøh²hh³Nh´NubjL)�”}”(hŒ``b``”h]”hŒb”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhjøubhŒª specifiers define what endianness is used to load the stored bytes. The data might be interpreted using the host, reversed host byte order, little-endian, or big-endian.”…”�”}”(hjøh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M hj‹h²hubhú)�”}”(hŒPassed by reference.”h]”hŒPassed by reference.”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M¤hj‹h²hubhú)�”}”(hŒ>Examples for a little-endian machine, given &(u32)0x67503030::”h]”hŒ=Examples for a little-endian machine, given &(u32)0x67503030:”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M¦hj‹h²hubjŠ)�”}”(hŒg%p4ch gP00 (0x67503030) %p4chR 00Pg (0x30305067) %p4cl gP00 (0x67503030) %p4cb 00Pg (0x30305067)”h]”hŒg%p4ch gP00 (0x67503030) %p4chR 00Pg (0x30305067) %p4cl gP00 (0x67503030) %p4cb 00Pg (0x30305067)”…”�”}”hjjsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´M¨hj‹h²hubhú)�”}”(hŒ;Examples for a big-endian machine, given &(u32)0x67503030::”h]”hŒ:Examples for a big-endian machine, given &(u32)0x67503030:”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M­hj‹h²hubjŠ)�”}”(hŒg%p4ch gP00 (0x67503030) %p4chR 00Pg (0x30305067) %p4cl 00Pg (0x30305067) %p4cb gP00 (0x67503030)”h]”hŒg%p4ch gP00 (0x67503030) %p4chR 00Pg (0x30305067) %p4cl 00Pg (0x30305067) %p4cb gP00 (0x67503030)”…”�”}”hj†sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´M¯hj‹h²hubeh}”(h]”Œgeneric-fourcc-code”ah ]”h"]”Œgeneric fourcc code”ah$]”h&]”uh1hµhjéh²hh³hÊh´M•ubh¶)�”}”(hhh]”(h»)�”}”(hŒRust”h]”hŒRust”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjœh²hh³hÊh´MµubjŠ)�”}”(hŒ%pA”h]”hŒ%pA”…”�”}”hj­sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j‰h³hÊh´M¹hjœh²hubhú)�”}”(hŒcOnly intended to be used from Rust code to format ``core::fmt::Arguments``. Do *not* use it from C.”h]”(hŒ2Only intended to be used from Rust code to format ”…”�”}”(hj»h²hh³Nh´NubjL)�”}”(hŒ``core::fmt::Arguments``”h]”hŒcore::fmt::Arguments”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jKhj»ubhŒ. Do ”…”�”}”(hj»h²hh³Nh´Nubj€)�”}”(hŒ*not*”h]”hŒnot”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj»ubhŒ use it from C.”…”�”}”(hj»h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´M»hjœh²hubeh}”(h]”Œrust”ah ]”h"]”Œrust”ah$]”h&]”uh1hµhjéh²hh³hÊh´Mµubeh}”(h]”Œ pointer-types”ah ]”h"]”Œ pointer types”ah$]”h&]”uh1hµhh·h²hh³hÊh´K9ubh¶)�”}”(hhh]”(h»)�”}”(hŒThanks”h]”hŒThanks”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjýh²hh³hÊh´M¿ubhú)�”}”(hŒyIf you add other %p extensions, please extend with one or more test cases, if at all feasible.”h]”hŒyIf you add other %p extensions, please extend with one or more test cases, if at all feasible.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MÁhjýh²hubhú)�”}”(hŒ-Thank you for your cooperation and attention.”h]”hŒ-Thank you for your cooperation and attention.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÊh´MÄhjýh²hubeh}”(h]”Œthanks”ah ]”h"]”Œthanks”ah$]”h&]”uh1hµhh·h²hh³hÊh´M¿ubeh}”(h]”Œ)how-to-get-printk-format-specifiers-right”ah ]”h"]”Œ)how to get printk format specifiers right”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”}”hØ]”hÍasŒnameids”}”(j7j4jqhØjæjãjúj÷j¬j©jájÞjˆj…jójðjHjEj¯j¬jjýjgjdjªj§jíjêj0j-j«j¨jjjîjëj« j¨ jS jP jB j? jÛ jØ jS jP jˆ j… jõ jò jjjÆjÃjOjLj’j�jÕjÒjæjãj)j&jˆj…j™j–jòjïj/j,uŒ nametypes”}”(j7‰jqˆjæ‰jú‰j¬‰já‰jˆ‰jó‰jH‰j¯‰j‰jg‰jª‰jí‰j0‰j«‰j‰jî‰j« ‰jS ‰jB ‰jÛ ‰jS ‰jˆ ‰jõ ‰j‰jƉjO‰j’‰jÕ‰jæ‰j)‰jˆ‰j™‰jò‰j/‰uh}”(j4h·hØhÛjãjxj÷jéj©j$jÞj¯j…jäjðj‹jEjöj¬jKjýj²jdjj§jjjêj­j-jðj¨j3jj®jëjj¨ jñjP j® j? jV jØ jE jP jÞ j… jV jò j‹ jjø jÃjjLjÉj�jRjÒj•jãjØj&jéj…j,j–j‹jïjœ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”]”(hŒsystem_message”“”)�”}”(hhh]”hú)�”}”(hŒ`Possible incomplete section title. Treating the overline as ordinary text because it's so short.”h]”hŒbPossible incomplete section title. Treating the overline 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”M—Œsource”hÊuh1jÀhj‹h²hh³hÊh´M™ubjÁ)�”}”(hhh]”hú)�”}”(hŒ`Blank line missing before literal block (after the "::")? Interpreted as a definition list item.”h]”hŒdBlank line missing before literal block (after the “::â€�)? Interpreted as a definition list item.”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÞubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”jÛŒline”M™Œsource”hÊuh1jÀhj¹ubeŒtransform_messages”]”jÁ)�”}”(hhh]”hú)�”}”(hhh]”hŒ7Hyperlink target "printk-specifiers" is not referenced.”…”�”}”hjþsbah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjûubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”jÛŒsource”hÊŒline”Kuh1jÀubaŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.