printk-formats.txt 12.2 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
=========================================
How to get printk format specifiers right
=========================================

:Author: Randy Dunlap <rdunlap@infradead.org>
:Author: Andrew Murray <amurray@mpc-data.co.uk>


Integer types
=============

::

	If variable is of Type,		use printk format specifier:
	------------------------------------------------------------
R
Randy Dunlap 已提交
16 17 18 19 20 21 22 23
		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
24 25 26 27 28
		s32			%d or %x
		u32			%u or %x
		s64			%lld or %llx
		u64			%llu or %llx

29 30 31 32 33
If <type> is dependent on a config option for its size (e.g., ``sector_t``,
``blkcnt_t``) or is architecture-dependent for its size (e.g., ``tcflag_t``),
use a format specifier of its largest possible type and explicitly cast to it.

Example::
34 35 36 37

	printk("test: sector number/total blocks: %llu/%llu\n",
		(unsigned long long)sector, (unsigned long long)blockcount);

38
Reminder: ``sizeof()`` result is of type ``size_t``.
39

40 41
The kernel's printf does not support ``%n``. For obvious reasons, floating
point formats (``%e, %f, %g, %a``) are also not recognized. Use of any
42 43
unsupported specifier or length qualifier results in a WARN and early
return from vsnprintf.
R
Randy Dunlap 已提交
44

45 46 47
Raw pointer value SHOULD be printed with %p. The kernel supports
the following extended format specifiers for pointer types:

48 49 50 51
Symbols/Function Pointers
=========================

::
52 53 54 55

	%pF	versatile_init+0x0/0x110
	%pf	versatile_init
	%pS	versatile_init+0x0/0x110
56 57
	%pSR	versatile_init+0x9/0x110
		(with __builtin_extract_return_addr() translation)
58 59 60
	%ps	versatile_init
	%pB	prev_fn_of_versatile_init+0x88/0x88

61 62 63 64 65 66 67 68 69 70 71
The ``F`` and ``f`` specifiers are for printing function pointers,
for example, f->func, &gettimeofday. They have the same result as
``S`` and ``s`` specifiers. But they do an extra conversion on
ia64, ppc64 and parisc64 architectures where the function pointers
are actually function descriptors.

The ``S`` and ``s`` specifiers can be used for printing symbols
from direct addresses, for example, __builtin_return_address(0),
(void *)regs->ip. They result in the symbol name with (``S``) or
without (``s``) offsets. If KALLSYMS are disabled then the symbol
address is printed instead.
72 73 74 75 76

The ``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-call``s are used and marked with the noreturn GCC attribute.
77 78


79 80
Kernel Pointers
===============
81

82
::
83 84 85

	%pK	0x01234567 or 0x0123456789abcdef

86 87 88 89 90 91
For printing kernel pointers which should be hidden from unprivileged
users. The behaviour of ``%pK`` depends on the ``kptr_restrict sysctl`` - see
Documentation/sysctl/kernel.txt for more details.

Struct Resources
================
92

93
::
94 95 96 97 98 99

	%pr	[mem 0x60000000-0x6fffffff flags 0x2200] or
		[mem 0x0000000060000000-0x000000006fffffff flags 0x2200]
	%pR	[mem 0x60000000-0x6fffffff pref] or
		[mem 0x0000000060000000-0x000000006fffffff pref]

100 101 102 103 104 105
For printing struct resources. The ``R`` and ``r`` specifiers result in a
printed resource with (``R``) or without (``r``) a decoded flags member.
Passed by reference.

Physical addresses types ``phys_addr_t``
========================================
106

107
::
108

109
	%pa[p]	0x01234567 or 0x0123456789abcdef
110

111 112 113
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. Passed by reference.
114

115 116 117 118
DMA addresses types ``dma_addr_t``
==================================

::
119 120 121

	%pad	0x01234567 or 0x0123456789abcdef

122 123 124 125 126
For printing a ``dma_addr_t`` type which can vary based on build options,
regardless of the width of the CPU data path. Passed by reference.

Raw buffer as an escaped string
===============================
127

128
::
129 130 131

	%*pE[achnops]

132
For printing raw buffer as an escaped string. For the following buffer::
133 134 135

		1b 62 20 5c 43 07 22 90 0d 5d

136 137
few examples show how the conversion would be done (the result string
without surrounding quotes)::
138 139 140 141 142

		%*pE		"\eb \C\a"\220\r]"
		%*pEhp		"\x1bb \C\x07"\x90\x0d]"
		%*pEa		"\e\142\040\\\103\a\042\220\r\135"

143 144 145 146 147 148 149 150 151 152 153
The conversion rules are applied according to an optional combination
of flags (see :c:func:`string_escape_mem` kernel documentation for the
details):

	- ``a`` - ESCAPE_ANY
	- ``c`` - ESCAPE_SPECIAL
	- ``h`` - ESCAPE_HEX
	- ``n`` - ESCAPE_NULL
	- ``o`` - ESCAPE_OCTAL
	- ``p`` - ESCAPE_NP
	- ``s`` - ESCAPE_SPACE
154

155
By default ESCAPE_ANY_NP is used.
156

157 158
ESCAPE_ANY_NP is the sane choice for many cases, in particularly for
printing SSIDs.
159

160 161 162 163 164 165
If field width is omitted the 1 byte only will be escaped.

Raw buffer as a hex string
==========================

::
166

167 168 169 170 171
	%*ph	00 01 02  ...  3f
	%*phC	00:01:02: ... :3f
	%*phD	00-01-02- ... -3f
	%*phN	000102 ... 3f

172 173 174 175 176 177
For printing a small buffers (up to 64 bytes long) as a hex string with
certain separator. For the larger buffers consider to use
:c:func:`print_hex_dump`.

MAC/FDDI addresses
==================
178

179
::
180 181

	%pM	00:01:02:03:04:05
182
	%pMR	05:04:03:02:01:00
183 184
	%pMF	00-01-02-03-04-05
	%pm	000102030405
185
	%pmR	050403020100
186

187 188 189
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 (``:``).
190

191 192 193
Where FDDI addresses are concerned the ``F`` specifier can be used after
the ``M`` specifier to use dash (``-``) separators instead of the default
separator.
194

195 196 197
For Bluetooth addresses the ``R`` specifier shall be used after the ``M``
specifier to use reversed byte order suitable for visual interpretation
of Bluetooth addresses which are in the little endian order.
198

199 200 201 202
Passed by reference.

IPv4 addresses
==============
203

204
::
205 206 207

	%pI4	1.2.3.4
	%pi4	001.002.003.004
208
	%p[Ii]4[hnbl]
209

210 211 212
For printing IPv4 dot-separated decimal addresses. The ``I4`` and ``i4``
specifiers result in a printed address with (``i4``) or without (``I4``)
leading zeros.
213

214 215 216
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.
217

218
Passed by reference.
219

220 221 222 223
IPv6 addresses
==============

::
224 225 226 227 228

	%pI6	0001:0002:0003:0004:0005:0006:0007:0008
	%pi6	00010002000300040005000600070008
	%pI6c	1:2:3:4:5:6:7:8

229 230 231
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.
232

233 234 235
The additional ``c`` specifier can be used with the ``I`` specifier to
print a compressed IPv6 address as described by
http://tools.ietf.org/html/rfc5952
236

237
Passed by reference.
238

239 240 241 242
IPv4/IPv6 addresses (generic, with port, flowinfo, scope)
=========================================================

::
243 244 245 246 247 248 249

	%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]

250 251 252
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.
253

254 255 256
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.
257

258 259 260 261 262
In case of an IPv6 address the compressed IPv6 address as described by
http://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
263

264 265 266
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.
267

268
Passed by reference.
269

270
Further examples::
271 272 273 274 275

	%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

276 277 278 279
UUID/GUID addresses
===================

::
280 281 282 283 284 285

	%pUb	00010203-0405-0607-0809-0a0b0c0d0e0f
	%pUB	00010203-0405-0607-0809-0A0B0C0D0E0F
	%pUl	03020100-0504-0706-0809-0a0b0c0e0e0f
	%pUL	03020100-0504-0706-0809-0A0B0C0E0E0F

286 287 288 289
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 characters - and big endian order
in lower ('b') or upper case ('B') hex characters.
290

291 292
Where no additional specifiers are used the default big endian
order with lower case hex characters will be printed.
293

294 295 296 297
Passed by reference.

dentry names
============
298

299
::
300

A
Al Viro 已提交
301 302 303
	%pd{,2,3,4}
	%pD{,2,3,4}

304 305 306 307
For 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<n>`` prints
``n`` last components.  ``%pD`` does the same thing for struct file.
A
Al Viro 已提交
308

309
Passed by reference.
310

311 312 313 314
block_device names
==================

::
315 316 317

	%pg	sda, sda1 or loop0p1

318 319 320 321
For printing name of block_device pointers.

struct va_format
================
322

323
::
324 325 326

	%pV

327 328
For printing struct va_format structures. These contain a format string
and va_list as follows::
329 330 331 332 333 334

	struct va_format {
		const char *fmt;
		va_list *va;
	};

335
Implements a "recursive vsnprintf".
336

337 338
Do not use this feature without some mechanism to verify the
correctness of the format string and va_list arguments.
R
Randy Dunlap 已提交
339

340 341 342 343 344 345
Passed by reference.

kobjects
========

::
346

347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381
	%pO

	Base specifier for kobject based structs. Must be followed with
	character for specific type of kobject as listed below:

	Device tree nodes:

	%pOF[fnpPcCF]

	For printing device tree nodes. The optional arguments are:
	    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
	Without any arguments prints full_name (same as %pOFf)
	The separator when using multiple arguments is ':'

	Examples:

	%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

	Passed by reference.

382 383 384 385 386

struct clk
==========

::
387 388 389 390 391

	%pC	pll1
	%pCn	pll1
	%pCr	1560000000

392 393 394
For printing struct clk structures. ``%pC`` and ``%pCn`` print the name
(Common Clock Framework) or address (legacy clock framework) of the
structure; ``%pCr`` prints the current clock rate.
395

396
Passed by reference.
397

398 399 400 401
bitmap and its derivatives such as cpumask and nodemask
=======================================================

::
402 403 404 405

	%*pb	0779
	%*pbl	0,3-6,8-10

406 407 408
For printing bitmap and its derivatives such as cpumask and nodemask,
``%*pb`` output 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.
409

410 411 412 413
Passed by reference.

Flags bitfields such as page flags, gfp_flags
=============================================
R
Randy Dunlap 已提交
414

415
::
416 417 418 419 420

	%pGp	referenced|uptodate|lru|active|private
	%pGg	GFP_USER|GFP_DMA32|GFP_NOWARN
	%pGv	read|exec|mayread|maywrite|mayexec|denywrite

421 422 423 424 425
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 [p]age flags, [v]ma_flags (both
expect ``unsigned long *``) and [g]fp_flags (expects ``gfp_t *``). The flag
names and print order depends on the particular	type.
426

427 428 429
Note that this format should not be used directly in :c:func:`TP_printk()` part
of a tracepoint. Instead, use the ``show_*_flags()`` functions from
<trace/events/mmflags.h>.
430

431 432 433 434
Passed by reference.

Network device features
=======================
435

436
::
437 438 439

	%pNF	0x000000000000c000

440
For printing netdev_features_t.
441

442
Passed by reference.
443

444
If you add other ``%p`` extensions, please extend lib/test_printf.c with
445
one or more test cases, if at all feasible.
446 447


R
Randy Dunlap 已提交
448
Thank you for your cooperation and attention.