]> git.ipfire.org Git - thirdparty/linux.git/blob - Documentation/core-api/printk-formats.rst
io_uring: reset -EBUSY error when io sq thread is waken up
[thirdparty/linux.git] / Documentation / core-api / printk-formats.rst
1 =========================================
2 How to get printk format specifiers right
3 =========================================
4
5 :Author: Randy Dunlap <rdunlap@infradead.org>
6 :Author: Andrew Murray <amurray@mpc-data.co.uk>
7
8
9 Integer types
10 =============
11
12 ::
13
14 If variable is of Type, use printk format specifier:
15 ------------------------------------------------------------
16 char %d or %x
17 unsigned char %u or %x
18 short int %d or %x
19 unsigned short int %u or %x
20 int %d or %x
21 unsigned int %u or %x
22 long %ld or %lx
23 unsigned long %lu or %lx
24 long long %lld or %llx
25 unsigned long long %llu or %llx
26 size_t %zu or %zx
27 ssize_t %zd or %zx
28 s8 %d or %x
29 u8 %u or %x
30 s16 %d or %x
31 u16 %u or %x
32 s32 %d or %x
33 u32 %u or %x
34 s64 %lld or %llx
35 u64 %llu or %llx
36
37
38 If <type> is dependent on a config option for its size (e.g., sector_t,
39 blkcnt_t) or is architecture-dependent for its size (e.g., tcflag_t), use a
40 format specifier of its largest possible type and explicitly cast to it.
41
42 Example::
43
44 printk("test: sector number/total blocks: %llu/%llu\n",
45 (unsigned long long)sector, (unsigned long long)blockcount);
46
47 Reminder: sizeof() returns type size_t.
48
49 The kernel's printf does not support %n. Floating point formats (%e, %f,
50 %g, %a) are also not recognized, for obvious reasons. Use of any
51 unsupported specifier or length qualifier results in a WARN and early
52 return from vsnprintf().
53
54 Pointer types
55 =============
56
57 A raw pointer value may be printed with %p which will hash the address
58 before printing. The kernel also supports extended specifiers for printing
59 pointers of different types.
60
61 Some of the extended specifiers print the data on the given address instead
62 of printing the address itself. In this case, the following error messages
63 might be printed instead of the unreachable information::
64
65 (null) data on plain NULL address
66 (efault) data on invalid address
67 (einval) invalid data on a valid address
68
69 Plain Pointers
70 --------------
71
72 ::
73
74 %p abcdef12 or 00000000abcdef12
75
76 Pointers printed without a specifier extension (i.e unadorned %p) are
77 hashed to prevent leaking information about the kernel memory layout. This
78 has the added benefit of providing a unique identifier. On 64-bit machines
79 the first 32 bits are zeroed. The kernel will print ``(ptrval)`` until it
80 gathers enough entropy. If you *really* want the address see %px below.
81
82 Error Pointers
83 --------------
84
85 ::
86
87 %pe -ENOSPC
88
89 For printing error pointers (i.e. a pointer for which IS_ERR() is true)
90 as a symbolic error name. Error values for which no symbolic name is
91 known are printed in decimal, while a non-ERR_PTR passed as the
92 argument to %pe gets treated as ordinary %p.
93
94 Symbols/Function Pointers
95 -------------------------
96
97 ::
98
99 %pS versatile_init+0x0/0x110
100 %ps versatile_init
101 %pSR versatile_init+0x9/0x110
102 (with __builtin_extract_return_addr() translation)
103 %pB prev_fn_of_versatile_init+0x88/0x88
104
105
106 The ``S`` and ``s`` specifiers are used for printing a pointer in symbolic
107 format. They result in the symbol name with (S) or without (s)
108 offsets. If KALLSYMS are disabled then the symbol address is printed instead.
109
110 The ``B`` specifier results in the symbol name with offsets and should be
111 used when printing stack backtraces. The specifier takes into
112 consideration the effect of compiler optimisations which may occur
113 when tail-calls are used and marked with the noreturn GCC attribute.
114
115 Kernel Pointers
116 ---------------
117
118 ::
119
120 %pK 01234567 or 0123456789abcdef
121
122 For printing kernel pointers which should be hidden from unprivileged
123 users. The behaviour of %pK depends on the kptr_restrict sysctl - see
124 Documentation/admin-guide/sysctl/kernel.rst for more details.
125
126 Unmodified Addresses
127 --------------------
128
129 ::
130
131 %px 01234567 or 0123456789abcdef
132
133 For printing pointers when you *really* want to print the address. Please
134 consider whether or not you are leaking sensitive information about the
135 kernel memory layout before printing pointers with %px. %px is functionally
136 equivalent to %lx (or %lu). %px is preferred because it is more uniquely
137 grep'able. If in the future we need to modify the way the kernel handles
138 printing pointers we will be better equipped to find the call sites.
139
140 Pointer Differences
141 -------------------
142
143 ::
144
145 %td 2560
146 %tx a00
147
148 For printing the pointer differences, use the %t modifier for ptrdiff_t.
149
150 Example::
151
152 printk("test: difference between pointers: %td\n", ptr2 - ptr1);
153
154 Struct Resources
155 ----------------
156
157 ::
158
159 %pr [mem 0x60000000-0x6fffffff flags 0x2200] or
160 [mem 0x0000000060000000-0x000000006fffffff flags 0x2200]
161 %pR [mem 0x60000000-0x6fffffff pref] or
162 [mem 0x0000000060000000-0x000000006fffffff pref]
163
164 For printing struct resources. The ``R`` and ``r`` specifiers result in a
165 printed resource with (R) or without (r) a decoded flags member.
166
167 Passed by reference.
168
169 Physical address types phys_addr_t
170 ----------------------------------
171
172 ::
173
174 %pa[p] 0x01234567 or 0x0123456789abcdef
175
176 For printing a phys_addr_t type (and its derivatives, such as
177 resource_size_t) which can vary based on build options, regardless of the
178 width of the CPU data path.
179
180 Passed by reference.
181
182 DMA address types dma_addr_t
183 ----------------------------
184
185 ::
186
187 %pad 0x01234567 or 0x0123456789abcdef
188
189 For printing a dma_addr_t type which can vary based on build options,
190 regardless of the width of the CPU data path.
191
192 Passed by reference.
193
194 Raw buffer as an escaped string
195 -------------------------------
196
197 ::
198
199 %*pE[achnops]
200
201 For printing raw buffer as an escaped string. For the following buffer::
202
203 1b 62 20 5c 43 07 22 90 0d 5d
204
205 A few examples show how the conversion would be done (excluding surrounding
206 quotes)::
207
208 %*pE "\eb \C\a"\220\r]"
209 %*pEhp "\x1bb \C\x07"\x90\x0d]"
210 %*pEa "\e\142\040\\\103\a\042\220\r\135"
211
212 The conversion rules are applied according to an optional combination
213 of flags (see :c:func:`string_escape_mem` kernel documentation for the
214 details):
215
216 - a - ESCAPE_ANY
217 - c - ESCAPE_SPECIAL
218 - h - ESCAPE_HEX
219 - n - ESCAPE_NULL
220 - o - ESCAPE_OCTAL
221 - p - ESCAPE_NP
222 - s - ESCAPE_SPACE
223
224 By default ESCAPE_ANY_NP is used.
225
226 ESCAPE_ANY_NP is the sane choice for many cases, in particularly for
227 printing SSIDs.
228
229 If field width is omitted then 1 byte only will be escaped.
230
231 Raw buffer as a hex string
232 --------------------------
233
234 ::
235
236 %*ph 00 01 02 ... 3f
237 %*phC 00:01:02: ... :3f
238 %*phD 00-01-02- ... -3f
239 %*phN 000102 ... 3f
240
241 For printing small buffers (up to 64 bytes long) as a hex string with a
242 certain separator. For larger buffers consider using
243 :c:func:`print_hex_dump`.
244
245 MAC/FDDI addresses
246 ------------------
247
248 ::
249
250 %pM 00:01:02:03:04:05
251 %pMR 05:04:03:02:01:00
252 %pMF 00-01-02-03-04-05
253 %pm 000102030405
254 %pmR 050403020100
255
256 For printing 6-byte MAC/FDDI addresses in hex notation. The ``M`` and ``m``
257 specifiers result in a printed address with (M) or without (m) byte
258 separators. The default byte separator is the colon (:).
259
260 Where FDDI addresses are concerned the ``F`` specifier can be used after
261 the ``M`` specifier to use dash (-) separators instead of the default
262 separator.
263
264 For Bluetooth addresses the ``R`` specifier shall be used after the ``M``
265 specifier to use reversed byte order suitable for visual interpretation
266 of Bluetooth addresses which are in the little endian order.
267
268 Passed by reference.
269
270 IPv4 addresses
271 --------------
272
273 ::
274
275 %pI4 1.2.3.4
276 %pi4 001.002.003.004
277 %p[Ii]4[hnbl]
278
279 For printing IPv4 dot-separated decimal addresses. The ``I4`` and ``i4``
280 specifiers result in a printed address with (i4) or without (I4) leading
281 zeros.
282
283 The additional ``h``, ``n``, ``b``, and ``l`` specifiers are used to specify
284 host, network, big or little endian order addresses respectively. Where
285 no specifier is provided the default network/big endian order is used.
286
287 Passed by reference.
288
289 IPv6 addresses
290 --------------
291
292 ::
293
294 %pI6 0001:0002:0003:0004:0005:0006:0007:0008
295 %pi6 00010002000300040005000600070008
296 %pI6c 1:2:3:4:5:6:7:8
297
298 For printing IPv6 network-order 16-bit hex addresses. The ``I6`` and ``i6``
299 specifiers result in a printed address with (I6) or without (i6)
300 colon-separators. Leading zeros are always used.
301
302 The additional ``c`` specifier can be used with the ``I`` specifier to
303 print a compressed IPv6 address as described by
304 http://tools.ietf.org/html/rfc5952
305
306 Passed by reference.
307
308 IPv4/IPv6 addresses (generic, with port, flowinfo, scope)
309 ---------------------------------------------------------
310
311 ::
312
313 %pIS 1.2.3.4 or 0001:0002:0003:0004:0005:0006:0007:0008
314 %piS 001.002.003.004 or 00010002000300040005000600070008
315 %pISc 1.2.3.4 or 1:2:3:4:5:6:7:8
316 %pISpc 1.2.3.4:12345 or [1:2:3:4:5:6:7:8]:12345
317 %p[Ii]S[pfschnbl]
318
319 For printing an IP address without the need to distinguish whether it's of
320 type AF_INET or AF_INET6. A pointer to a valid struct sockaddr,
321 specified through ``IS`` or ``iS``, can be passed to this format specifier.
322
323 The additional ``p``, ``f``, and ``s`` specifiers are used to specify port
324 (IPv4, IPv6), flowinfo (IPv6) and scope (IPv6). Ports have a ``:`` prefix,
325 flowinfo a ``/`` and scope a ``%``, each followed by the actual value.
326
327 In case of an IPv6 address the compressed IPv6 address as described by
328 http://tools.ietf.org/html/rfc5952 is being used if the additional
329 specifier ``c`` is given. The IPv6 address is surrounded by ``[``, ``]`` in
330 case of additional specifiers ``p``, ``f`` or ``s`` as suggested by
331 https://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-07
332
333 In case of IPv4 addresses, the additional ``h``, ``n``, ``b``, and ``l``
334 specifiers can be used as well and are ignored in case of an IPv6
335 address.
336
337 Passed by reference.
338
339 Further examples::
340
341 %pISfc 1.2.3.4 or [1:2:3:4:5:6:7:8]/123456789
342 %pISsc 1.2.3.4 or [1:2:3:4:5:6:7:8]%1234567890
343 %pISpfc 1.2.3.4:12345 or [1:2:3:4:5:6:7:8]:12345/123456789
344
345 UUID/GUID addresses
346 -------------------
347
348 ::
349
350 %pUb 00010203-0405-0607-0809-0a0b0c0d0e0f
351 %pUB 00010203-0405-0607-0809-0A0B0C0D0E0F
352 %pUl 03020100-0504-0706-0809-0a0b0c0e0e0f
353 %pUL 03020100-0504-0706-0809-0A0B0C0E0E0F
354
355 For printing 16-byte UUID/GUIDs addresses. The additional ``l``, ``L``,
356 ``b`` and ``B`` specifiers are used to specify a little endian order in
357 lower (l) or upper case (L) hex notation - and big endian order in lower (b)
358 or upper case (B) hex notation.
359
360 Where no additional specifiers are used the default big endian
361 order with lower case hex notation will be printed.
362
363 Passed by reference.
364
365 dentry names
366 ------------
367
368 ::
369
370 %pd{,2,3,4}
371 %pD{,2,3,4}
372
373 For printing dentry name; if we race with :c:func:`d_move`, the name might
374 be a mix of old and new ones, but it won't oops. %pd dentry is a safer
375 equivalent of %s dentry->d_name.name we used to use, %pd<n> prints ``n``
376 last components. %pD does the same thing for struct file.
377
378 Passed by reference.
379
380 block_device names
381 ------------------
382
383 ::
384
385 %pg sda, sda1 or loop0p1
386
387 For printing name of block_device pointers.
388
389 struct va_format
390 ----------------
391
392 ::
393
394 %pV
395
396 For printing struct va_format structures. These contain a format string
397 and va_list as follows::
398
399 struct va_format {
400 const char *fmt;
401 va_list *va;
402 };
403
404 Implements a "recursive vsnprintf".
405
406 Do not use this feature without some mechanism to verify the
407 correctness of the format string and va_list arguments.
408
409 Passed by reference.
410
411 Device tree nodes
412 -----------------
413
414 ::
415
416 %pOF[fnpPcCF]
417
418
419 For printing device tree node structures. Default behaviour is
420 equivalent to %pOFf.
421
422 - f - device node full_name
423 - n - device node name
424 - p - device node phandle
425 - P - device node path spec (name + @unit)
426 - F - device node flags
427 - c - major compatible string
428 - C - full compatible string
429
430 The separator when using multiple arguments is ':'
431
432 Examples::
433
434 %pOF /foo/bar@0 - Node full name
435 %pOFf /foo/bar@0 - Same as above
436 %pOFfp /foo/bar@0:10 - Node full name + phandle
437 %pOFfcF /foo/bar@0:foo,device:--P- - Node full name +
438 major compatible string +
439 node flags
440 D - dynamic
441 d - detached
442 P - Populated
443 B - Populated bus
444
445 Passed by reference.
446
447 Fwnode handles
448 --------------
449
450 ::
451
452 %pfw[fP]
453
454 For printing information on fwnode handles. The default is to print the full
455 node name, including the path. The modifiers are functionally equivalent to
456 %pOF above.
457
458 - f - full name of the node, including the path
459 - P - the name of the node including an address (if there is one)
460
461 Examples (ACPI)::
462
463 %pfwf \_SB.PCI0.CIO2.port@1.endpoint@0 - Full node name
464 %pfwP endpoint@0 - Node name
465
466 Examples (OF)::
467
468 %pfwf /ocp@68000000/i2c@48072000/camera@10/port/endpoint - Full name
469 %pfwP endpoint - Node name
470
471 Time and date (struct rtc_time)
472 -------------------------------
473
474 ::
475
476 %ptR YYYY-mm-ddTHH:MM:SS
477 %ptRd YYYY-mm-dd
478 %ptRt HH:MM:SS
479 %ptR[dt][r]
480
481 For printing date and time as represented by struct rtc_time structure in
482 human readable format.
483
484 By default year will be incremented by 1900 and month by 1. Use %ptRr (raw)
485 to suppress this behaviour.
486
487 Passed by reference.
488
489 struct clk
490 ----------
491
492 ::
493
494 %pC pll1
495 %pCn pll1
496
497 For printing struct clk structures. %pC and %pCn print the name of the clock
498 (Common Clock Framework) or a unique 32-bit ID (legacy clock framework).
499
500 Passed by reference.
501
502 bitmap and its derivatives such as cpumask and nodemask
503 -------------------------------------------------------
504
505 ::
506
507 %*pb 0779
508 %*pbl 0,3-6,8-10
509
510 For printing bitmap and its derivatives such as cpumask and nodemask,
511 %*pb outputs the bitmap with field width as the number of bits and %*pbl
512 output the bitmap as range list with field width as the number of bits.
513
514 Passed by reference.
515
516 Flags bitfields such as page flags, gfp_flags
517 ---------------------------------------------
518
519 ::
520
521 %pGp referenced|uptodate|lru|active|private
522 %pGg GFP_USER|GFP_DMA32|GFP_NOWARN
523 %pGv read|exec|mayread|maywrite|mayexec|denywrite
524
525 For printing flags bitfields as a collection of symbolic constants that
526 would construct the value. The type of flags is given by the third
527 character. Currently supported are [p]age flags, [v]ma_flags (both
528 expect ``unsigned long *``) and [g]fp_flags (expects ``gfp_t *``). The flag
529 names and print order depends on the particular type.
530
531 Note that this format should not be used directly in the
532 :c:func:`TP_printk()` part of a tracepoint. Instead, use the show_*_flags()
533 functions from <trace/events/mmflags.h>.
534
535 Passed by reference.
536
537 Network device features
538 -----------------------
539
540 ::
541
542 %pNF 0x000000000000c000
543
544 For printing netdev_features_t.
545
546 Passed by reference.
547
548 Thanks
549 ======
550
551 If you add other %p extensions, please extend <lib/test_printf.c> with
552 one or more test cases, if at all feasible.
553
554 Thank you for your cooperation and attention.