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