blob: 361789df51ecf58d5083436792588d2f12faa7f2 [file] [log] [blame]
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -03001=========================================
2How 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
9Integer types
10=============
11
12::
13
14 If variable is of Type, use printk format specifier:
15 ------------------------------------------------------------
Randy Dunlapb67ad182008-11-12 13:26:55 -080016 int %d or %x
17 unsigned int %u or %x
18 long %ld or %lx
19 unsigned long %lu or %lx
20 long long %lld or %llx
21 unsigned long long %llu or %llx
22 size_t %zu or %zx
23 ssize_t %zd or %zx
Geert Uytterhoevene8a7ba52015-04-15 16:17:17 -070024 s32 %d or %x
25 u32 %u or %x
26 s64 %lld or %llx
27 u64 %llu or %llx
28
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -030029If <type> is dependent on a config option for its size (e.g., ``sector_t``,
30``blkcnt_t``) or is architecture-dependent for its size (e.g., ``tcflag_t``),
31use a format specifier of its largest possible type and explicitly cast to it.
32
33Example::
Geert Uytterhoevene8a7ba52015-04-15 16:17:17 -070034
35 printk("test: sector number/total blocks: %llu/%llu\n",
36 (unsigned long long)sector, (unsigned long long)blockcount);
37
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -030038Reminder: ``sizeof()`` result is of type ``size_t``.
Geert Uytterhoevene8a7ba52015-04-15 16:17:17 -070039
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -030040The kernel's printf does not support ``%n``. For obvious reasons, floating
41point formats (``%e, %f, %g, %a``) are also not recognized. Use of any
Rasmus Villemoesd7ec9a02015-11-06 16:30:35 -080042unsupported specifier or length qualifier results in a WARN and early
43return from vsnprintf.
Randy Dunlapb67ad182008-11-12 13:26:55 -080044
Andrew Murray04c55712011-06-15 12:57:09 -070045Raw pointer value SHOULD be printed with %p. The kernel supports
46the following extended format specifiers for pointer types:
47
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -030048Symbols/Function Pointers
49=========================
50
51::
Andrew Murray04c55712011-06-15 12:57:09 -070052
53 %pF versatile_init+0x0/0x110
54 %pf versatile_init
55 %pS versatile_init+0x0/0x110
Joe Perchesb0d33c22012-12-12 10:18:50 -080056 %pSR versatile_init+0x9/0x110
57 (with __builtin_extract_return_addr() translation)
Andrew Murray04c55712011-06-15 12:57:09 -070058 %ps versatile_init
59 %pB prev_fn_of_versatile_init+0x88/0x88
60
Helge Dellerd6957f32017-08-15 11:34:19 +020061The ``F`` and ``f`` specifiers are for printing function pointers,
62for example, f->func, &gettimeofday. They have the same result as
63``S`` and ``s`` specifiers. But they do an extra conversion on
64ia64, ppc64 and parisc64 architectures where the function pointers
65are actually function descriptors.
66
67The ``S`` and ``s`` specifiers can be used for printing symbols
68from direct addresses, for example, __builtin_return_address(0),
69(void *)regs->ip. They result in the symbol name with (``S``) or
70without (``s``) offsets. If KALLSYMS are disabled then the symbol
71address is printed instead.
Andrew Murray04c55712011-06-15 12:57:09 -070072
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -030073The ``B`` specifier results in the symbol name with offsets and should be
74used when printing stack backtraces. The specifier takes into
75consideration the effect of compiler optimisations which may occur
76when tail-call``s are used and marked with the noreturn GCC attribute.
Andrew Murray04c55712011-06-15 12:57:09 -070077
Helge Dellerfd46cd52017-08-23 21:52:05 +020078Examples::
79
80 printk("Going to call: %pF\n", gettimeofday);
81 printk("Going to call: %pF\n", p->func);
82 printk("%s: called from %pS\n", __func__, (void *)_RET_IP_);
83 printk("%s: called from %pS\n", __func__,
84 (void *)__builtin_return_address(0));
85 printk("Faulted at %pS\n", (void *)regs->ip);
86 printk(" %s%pB\n", (reliable ? "" : "? "), (void *)*stack);
87
Andrew Murray04c55712011-06-15 12:57:09 -070088
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -030089Kernel Pointers
90===============
91
92::
Andrew Murray04c55712011-06-15 12:57:09 -070093
94 %pK 0x01234567 or 0x0123456789abcdef
95
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -030096For printing kernel pointers which should be hidden from unprivileged
97users. The behaviour of ``%pK`` depends on the ``kptr_restrict sysctl`` - see
98Documentation/sysctl/kernel.txt for more details.
Andrew Murray04c55712011-06-15 12:57:09 -070099
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300100Struct Resources
101================
102
103::
Andrew Murray04c55712011-06-15 12:57:09 -0700104
105 %pr [mem 0x60000000-0x6fffffff flags 0x2200] or
106 [mem 0x0000000060000000-0x000000006fffffff flags 0x2200]
107 %pR [mem 0x60000000-0x6fffffff pref] or
108 [mem 0x0000000060000000-0x000000006fffffff pref]
109
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300110For printing struct resources. The ``R`` and ``r`` specifiers result in a
111printed resource with (``R``) or without (``r``) a decoded flags member.
112Passed by reference.
Andrew Murray04c55712011-06-15 12:57:09 -0700113
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300114Physical addresses types ``phys_addr_t``
115========================================
116
117::
Stepan Moskovchenko7d799212013-02-21 16:43:09 -0800118
Joe Perchesaaf07622014-01-23 15:54:17 -0800119 %pa[p] 0x01234567 or 0x0123456789abcdef
Stepan Moskovchenko7d799212013-02-21 16:43:09 -0800120
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300121For printing a ``phys_addr_t`` type (and its derivatives, such as
122``resource_size_t``) which can vary based on build options, regardless of
123the width of the CPU data path. Passed by reference.
Stepan Moskovchenko7d799212013-02-21 16:43:09 -0800124
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300125DMA addresses types ``dma_addr_t``
126==================================
127
128::
Joe Perchesaaf07622014-01-23 15:54:17 -0800129
130 %pad 0x01234567 or 0x0123456789abcdef
131
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300132For printing a ``dma_addr_t`` type which can vary based on build options,
133regardless of the width of the CPU data path. Passed by reference.
Joe Perchesaaf07622014-01-23 15:54:17 -0800134
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300135Raw buffer as an escaped string
136===============================
137
138::
Andy Shevchenko71dca952014-10-13 15:55:18 -0700139
140 %*pE[achnops]
141
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300142For printing raw buffer as an escaped string. For the following buffer::
Andy Shevchenko71dca952014-10-13 15:55:18 -0700143
144 1b 62 20 5c 43 07 22 90 0d 5d
145
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300146few examples show how the conversion would be done (the result string
147without surrounding quotes)::
Andy Shevchenko71dca952014-10-13 15:55:18 -0700148
149 %*pE "\eb \C\a"\220\r]"
150 %*pEhp "\x1bb \C\x07"\x90\x0d]"
151 %*pEa "\e\142\040\\\103\a\042\220\r\135"
152
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300153The conversion rules are applied according to an optional combination
154of flags (see :c:func:`string_escape_mem` kernel documentation for the
155details):
Andy Shevchenko71dca952014-10-13 15:55:18 -0700156
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300157 - ``a`` - ESCAPE_ANY
158 - ``c`` - ESCAPE_SPECIAL
159 - ``h`` - ESCAPE_HEX
160 - ``n`` - ESCAPE_NULL
161 - ``o`` - ESCAPE_OCTAL
162 - ``p`` - ESCAPE_NP
163 - ``s`` - ESCAPE_SPACE
Andy Shevchenko71dca952014-10-13 15:55:18 -0700164
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300165By default ESCAPE_ANY_NP is used.
Andy Shevchenko71dca952014-10-13 15:55:18 -0700166
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300167ESCAPE_ANY_NP is the sane choice for many cases, in particularly for
168printing SSIDs.
169
170If field width is omitted the 1 byte only will be escaped.
171
172Raw buffer as a hex string
173==========================
174
175::
Martin Kletzander5e4ee7b2015-11-06 16:30:17 -0800176
Andy Shevchenko31550a12012-07-30 14:40:27 -0700177 %*ph 00 01 02 ... 3f
178 %*phC 00:01:02: ... :3f
179 %*phD 00-01-02- ... -3f
180 %*phN 000102 ... 3f
181
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300182For printing a small buffers (up to 64 bytes long) as a hex string with
183certain separator. For the larger buffers consider to use
184:c:func:`print_hex_dump`.
Andy Shevchenko31550a12012-07-30 14:40:27 -0700185
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300186MAC/FDDI addresses
187==================
188
189::
Andrew Murray04c55712011-06-15 12:57:09 -0700190
191 %pM 00:01:02:03:04:05
Andrei Emeltchenko76597ff92012-07-30 14:40:23 -0700192 %pMR 05:04:03:02:01:00
Andrew Murray04c55712011-06-15 12:57:09 -0700193 %pMF 00-01-02-03-04-05
194 %pm 000102030405
Andy Shevchenko7c591542012-10-04 17:12:33 -0700195 %pmR 050403020100
Andrew Murray04c55712011-06-15 12:57:09 -0700196
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300197For printing 6-byte MAC/FDDI addresses in hex notation. The ``M`` and ``m``
198specifiers result in a printed address with (``M``) or without (``m``) byte
199separators. The default byte separator is the colon (``:``).
Andrew Murray04c55712011-06-15 12:57:09 -0700200
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300201Where FDDI addresses are concerned the ``F`` specifier can be used after
202the ``M`` specifier to use dash (``-``) separators instead of the default
203separator.
Andrew Murray04c55712011-06-15 12:57:09 -0700204
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300205For Bluetooth addresses the ``R`` specifier shall be used after the ``M``
206specifier to use reversed byte order suitable for visual interpretation
207of Bluetooth addresses which are in the little endian order.
Andrei Emeltchenko76597ff92012-07-30 14:40:23 -0700208
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300209Passed by reference.
Geert Uytterhoeven73306602015-04-15 16:17:14 -0700210
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300211IPv4 addresses
212==============
213
214::
Andrew Murray04c55712011-06-15 12:57:09 -0700215
216 %pI4 1.2.3.4
217 %pi4 001.002.003.004
Daniel Borkmann8ecada12013-06-28 15:49:39 +0200218 %p[Ii]4[hnbl]
Andrew Murray04c55712011-06-15 12:57:09 -0700219
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300220For printing IPv4 dot-separated decimal addresses. The ``I4`` and ``i4``
221specifiers result in a printed address with (``i4``) or without (``I4``)
222leading zeros.
Andrew Murray04c55712011-06-15 12:57:09 -0700223
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300224The additional ``h``, ``n``, ``b``, and ``l`` specifiers are used to specify
225host, network, big or little endian order addresses respectively. Where
226no specifier is provided the default network/big endian order is used.
Andrew Murray04c55712011-06-15 12:57:09 -0700227
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300228Passed by reference.
Geert Uytterhoeven73306602015-04-15 16:17:14 -0700229
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300230IPv6 addresses
231==============
232
233::
Andrew Murray04c55712011-06-15 12:57:09 -0700234
235 %pI6 0001:0002:0003:0004:0005:0006:0007:0008
236 %pi6 00010002000300040005000600070008
237 %pI6c 1:2:3:4:5:6:7:8
238
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300239For printing IPv6 network-order 16-bit hex addresses. The ``I6`` and ``i6``
240specifiers result in a printed address with (``I6``) or without (``i6``)
241colon-separators. Leading zeros are always used.
Andrew Murray04c55712011-06-15 12:57:09 -0700242
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300243The additional ``c`` specifier can be used with the ``I`` specifier to
244print a compressed IPv6 address as described by
245http://tools.ietf.org/html/rfc5952
Andrew Murray04c55712011-06-15 12:57:09 -0700246
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300247Passed by reference.
Geert Uytterhoeven73306602015-04-15 16:17:14 -0700248
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300249IPv4/IPv6 addresses (generic, with port, flowinfo, scope)
250=========================================================
251
252::
Daniel Borkmann10679642013-06-28 19:49:39 +0200253
254 %pIS 1.2.3.4 or 0001:0002:0003:0004:0005:0006:0007:0008
255 %piS 001.002.003.004 or 00010002000300040005000600070008
256 %pISc 1.2.3.4 or 1:2:3:4:5:6:7:8
257 %pISpc 1.2.3.4:12345 or [1:2:3:4:5:6:7:8]:12345
258 %p[Ii]S[pfschnbl]
259
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300260For printing an IP address without the need to distinguish whether it``s
261of type AF_INET or AF_INET6, a pointer to a valid ``struct sockaddr``,
262specified through ``IS`` or ``iS``, can be passed to this format specifier.
Daniel Borkmann10679642013-06-28 19:49:39 +0200263
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300264The additional ``p``, ``f``, and ``s`` specifiers are used to specify port
265(IPv4, IPv6), flowinfo (IPv6) and scope (IPv6). Ports have a ``:`` prefix,
266flowinfo a ``/`` and scope a ``%``, each followed by the actual value.
Daniel Borkmann10679642013-06-28 19:49:39 +0200267
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300268In case of an IPv6 address the compressed IPv6 address as described by
269http://tools.ietf.org/html/rfc5952 is being used if the additional
270specifier ``c`` is given. The IPv6 address is surrounded by ``[``, ``]`` in
271case of additional specifiers ``p``, ``f`` or ``s`` as suggested by
272https://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-07
Daniel Borkmann10679642013-06-28 19:49:39 +0200273
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300274In case of IPv4 addresses, the additional ``h``, ``n``, ``b``, and ``l``
275specifiers can be used as well and are ignored in case of an IPv6
276address.
Daniel Borkmann10679642013-06-28 19:49:39 +0200277
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300278Passed by reference.
Geert Uytterhoeven73306602015-04-15 16:17:14 -0700279
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300280Further examples::
Daniel Borkmann10679642013-06-28 19:49:39 +0200281
282 %pISfc 1.2.3.4 or [1:2:3:4:5:6:7:8]/123456789
283 %pISsc 1.2.3.4 or [1:2:3:4:5:6:7:8]%1234567890
284 %pISpfc 1.2.3.4:12345 or [1:2:3:4:5:6:7:8]:12345/123456789
285
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300286UUID/GUID addresses
287===================
288
289::
Andrew Murray04c55712011-06-15 12:57:09 -0700290
291 %pUb 00010203-0405-0607-0809-0a0b0c0d0e0f
292 %pUB 00010203-0405-0607-0809-0A0B0C0D0E0F
293 %pUl 03020100-0504-0706-0809-0a0b0c0e0e0f
294 %pUL 03020100-0504-0706-0809-0A0B0C0E0E0F
295
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300296For printing 16-byte UUID/GUIDs addresses. The additional 'l', 'L',
297'b' and 'B' specifiers are used to specify a little endian order in
298lower ('l') or upper case ('L') hex characters - and big endian order
299in lower ('b') or upper case ('B') hex characters.
Andrew Murray04c55712011-06-15 12:57:09 -0700300
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300301Where no additional specifiers are used the default big endian
302order with lower case hex characters will be printed.
Andrew Murray04c55712011-06-15 12:57:09 -0700303
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300304Passed by reference.
Geert Uytterhoeven73306602015-04-15 16:17:14 -0700305
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300306dentry names
307============
308
309::
Martin Kletzander5e4ee7b2015-11-06 16:30:17 -0800310
Al Viro4b6ccca2013-09-03 12:00:44 -0400311 %pd{,2,3,4}
312 %pD{,2,3,4}
313
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300314For printing dentry name; if we race with :c:func:`d_move`, the name might be
315a mix of old and new ones, but it won't oops. ``%pd`` dentry is a safer
316equivalent of ``%s`` ``dentry->d_name.name`` we used to use, ``%pd<n>`` prints
317``n`` last components. ``%pD`` does the same thing for struct file.
Al Viro4b6ccca2013-09-03 12:00:44 -0400318
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300319Passed by reference.
Geert Uytterhoeven73306602015-04-15 16:17:14 -0700320
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300321block_device names
322==================
323
324::
Dmitry Monakhov1031bc52015-04-13 16:31:35 +0400325
326 %pg sda, sda1 or loop0p1
327
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300328For printing name of block_device pointers.
Dmitry Monakhov1031bc52015-04-13 16:31:35 +0400329
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300330struct va_format
331================
332
333::
Andrew Murray04c55712011-06-15 12:57:09 -0700334
335 %pV
336
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300337For printing struct va_format structures. These contain a format string
338and va_list as follows::
Andrew Murray04c55712011-06-15 12:57:09 -0700339
340 struct va_format {
341 const char *fmt;
342 va_list *va;
343 };
344
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300345Implements a "recursive vsnprintf".
Martin Kletzander5e4ee7b2015-11-06 16:30:17 -0800346
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300347Do not use this feature without some mechanism to verify the
348correctness of the format string and va_list arguments.
Randy Dunlapb67ad182008-11-12 13:26:55 -0800349
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300350Passed by reference.
Geert Uytterhoeven73306602015-04-15 16:17:14 -0700351
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300352kobjects
353========
354
355::
356
Pantelis Antoniouce4fecf2015-01-21 19:06:14 +0200357 %pO
358
359 Base specifier for kobject based structs. Must be followed with
360 character for specific type of kobject as listed below:
361
362 Device tree nodes:
363
364 %pOF[fnpPcCF]
365
366 For printing device tree nodes. The optional arguments are:
367 f device node full_name
368 n device node name
369 p device node phandle
370 P device node path spec (name + @unit)
371 F device node flags
372 c major compatible string
373 C full compatible string
374 Without any arguments prints full_name (same as %pOFf)
375 The separator when using multiple arguments is ':'
376
377 Examples:
378
379 %pOF /foo/bar@0 - Node full name
380 %pOFf /foo/bar@0 - Same as above
381 %pOFfp /foo/bar@0:10 - Node full name + phandle
382 %pOFfcF /foo/bar@0:foo,device:--P- - Node full name +
383 major compatible string +
384 node flags
385 D - dynamic
386 d - detached
387 P - Populated
388 B - Populated bus
389
390 Passed by reference.
391
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300392
393struct clk
394==========
395
396::
Geert Uytterhoeven900cca22015-04-15 16:17:20 -0700397
398 %pC pll1
399 %pCn pll1
400 %pCr 1560000000
401
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300402For printing struct clk structures. ``%pC`` and ``%pCn`` print the name
403(Common Clock Framework) or address (legacy clock framework) of the
404structure; ``%pCr`` prints the current clock rate.
Geert Uytterhoeven900cca22015-04-15 16:17:20 -0700405
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300406Passed by reference.
Geert Uytterhoeven900cca22015-04-15 16:17:20 -0700407
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300408bitmap and its derivatives such as cpumask and nodemask
409=======================================================
410
411::
Wang Longd0724962015-02-26 03:28:25 +0000412
413 %*pb 0779
414 %*pbl 0,3-6,8-10
415
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300416For printing bitmap and its derivatives such as cpumask and nodemask,
417``%*pb`` output the bitmap with field width as the number of bits and ``%*pbl``
418output the bitmap as range list with field width as the number of bits.
Wang Longd0724962015-02-26 03:28:25 +0000419
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300420Passed by reference.
Randy Dunlapb67ad182008-11-12 13:26:55 -0800421
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300422Flags bitfields such as page flags, gfp_flags
423=============================================
424
425::
Vlastimil Babkaedf14cd2016-03-15 14:55:56 -0700426
427 %pGp referenced|uptodate|lru|active|private
428 %pGg GFP_USER|GFP_DMA32|GFP_NOWARN
429 %pGv read|exec|mayread|maywrite|mayexec|denywrite
430
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300431For printing flags bitfields as a collection of symbolic constants that
432would construct the value. The type of flags is given by the third
433character. Currently supported are [p]age flags, [v]ma_flags (both
434expect ``unsigned long *``) and [g]fp_flags (expects ``gfp_t *``). The flag
435names and print order depends on the particular type.
Vlastimil Babkaedf14cd2016-03-15 14:55:56 -0700436
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300437Note that this format should not be used directly in :c:func:`TP_printk()` part
438of a tracepoint. Instead, use the ``show_*_flags()`` functions from
439<trace/events/mmflags.h>.
Vlastimil Babkaedf14cd2016-03-15 14:55:56 -0700440
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300441Passed by reference.
Vlastimil Babkaedf14cd2016-03-15 14:55:56 -0700442
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300443Network device features
444=======================
445
446::
Martin Kletzander5e4ee7b2015-11-06 16:30:17 -0800447
448 %pNF 0x000000000000c000
449
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300450For printing netdev_features_t.
Martin Kletzander5e4ee7b2015-11-06 16:30:17 -0800451
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300452Passed by reference.
Martin Kletzander5e4ee7b2015-11-06 16:30:17 -0800453
Mauro Carvalho Chehab3b033382017-05-16 22:27:11 -0300454If you add other ``%p`` extensions, please extend lib/test_printf.c with
Rasmus Villemoesd7ec9a02015-11-06 16:30:35 -0800455one or more test cases, if at all feasible.
Martin Kletzander5e4ee7b2015-11-06 16:30:17 -0800456
Martin Kletzander5e4ee7b2015-11-06 16:30:17 -0800457
Randy Dunlapb67ad182008-11-12 13:26:55 -0800458Thank you for your cooperation and attention.