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