• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1If variable is of Type,		use printk format specifier:
2---------------------------------------------------------
3		int			%d or %x
4		unsigned int		%u or %x
5		long			%ld or %lx
6		unsigned long		%lu or %lx
7		long long		%lld or %llx
8		unsigned long long	%llu or %llx
9		size_t			%zu or %zx
10		ssize_t			%zd or %zx
11		s32			%d or %x
12		u32			%u or %x
13		s64			%lld or %llx
14		u64			%llu or %llx
15
16If <type> is dependent on a config option for its size (e.g., sector_t,
17blkcnt_t) or is architecture-dependent for its size (e.g., tcflag_t), use a
18format specifier of its largest possible type and explicitly cast to it.
19Example:
20
21	printk("test: sector number/total blocks: %llu/%llu\n",
22		(unsigned long long)sector, (unsigned long long)blockcount);
23
24Reminder: sizeof() result is of type size_t.
25
26The kernel's printf does not support %n. For obvious reasons, floating
27point formats (%e, %f, %g, %a) are also not recognized. Use of any
28unsupported specifier or length qualifier results in a WARN and early
29return from vsnprintf.
30
31Raw pointer value SHOULD be printed with %p. The kernel supports
32the following extended format specifiers for pointer types:
33
34Symbols/Function Pointers:
35
36	%pF	versatile_init+0x0/0x110
37	%pf	versatile_init
38	%pS	versatile_init+0x0/0x110
39	%pSR	versatile_init+0x9/0x110
40		(with __builtin_extract_return_addr() translation)
41	%ps	versatile_init
42	%pB	prev_fn_of_versatile_init+0x88/0x88
43
44	For printing symbols and function pointers. The 'S' and 's' specifiers
45	result in the symbol name with ('S') or without ('s') offsets. Where
46	this is used on a kernel without KALLSYMS - the symbol address is
47	printed instead.
48
49	The 'B' specifier results in the symbol name with offsets and should be
50	used when printing stack backtraces. The specifier takes into
51	consideration the effect of compiler optimisations which may occur
52	when tail-call's are used and marked with the noreturn GCC attribute.
53
54	On ia64, ppc64 and parisc64 architectures function pointers are
55	actually function descriptors which must first be resolved. The 'F' and
56	'f' specifiers perform this resolution and then provide the same
57	functionality as the 'S' and 's' specifiers.
58
59Kernel Pointers:
60
61	%pK	0x01234567 or 0x0123456789abcdef
62
63	For printing kernel pointers which should be hidden from unprivileged
64	users. The behaviour of %pK depends on the kptr_restrict sysctl - see
65	Documentation/sysctl/kernel.txt for more details.
66
67Struct Resources:
68
69	%pr	[mem 0x60000000-0x6fffffff flags 0x2200] or
70		[mem 0x0000000060000000-0x000000006fffffff flags 0x2200]
71	%pR	[mem 0x60000000-0x6fffffff pref] or
72		[mem 0x0000000060000000-0x000000006fffffff pref]
73
74	For printing struct resources. The 'R' and 'r' specifiers result in a
75	printed resource with ('R') or without ('r') a decoded flags member.
76	Passed by reference.
77
78Physical addresses types phys_addr_t:
79
80	%pa[p]	0x01234567 or 0x0123456789abcdef
81
82	For printing a phys_addr_t type (and its derivatives, such as
83	resource_size_t) which can vary based on build options, regardless of
84	the width of the CPU data path. Passed by reference.
85
86DMA addresses types dma_addr_t:
87
88	%pad	0x01234567 or 0x0123456789abcdef
89
90	For printing a dma_addr_t type which can vary based on build options,
91	regardless of the width of the CPU data path. Passed by reference.
92
93Raw buffer as an escaped string:
94
95	%*pE[achnops]
96
97	For printing raw buffer as an escaped string. For the following buffer
98
99		1b 62 20 5c 43 07 22 90 0d 5d
100
101	few examples show how the conversion would be done (the result string
102	without surrounding quotes):
103
104		%*pE		"\eb \C\a"\220\r]"
105		%*pEhp		"\x1bb \C\x07"\x90\x0d]"
106		%*pEa		"\e\142\040\\\103\a\042\220\r\135"
107
108	The conversion rules are applied according to an optional combination
109	of flags (see string_escape_mem() kernel documentation for the
110	details):
111		a - ESCAPE_ANY
112		c - ESCAPE_SPECIAL
113		h - ESCAPE_HEX
114		n - ESCAPE_NULL
115		o - ESCAPE_OCTAL
116		p - ESCAPE_NP
117		s - ESCAPE_SPACE
118	By default ESCAPE_ANY_NP is used.
119
120	ESCAPE_ANY_NP is the sane choice for many cases, in particularly for
121	printing SSIDs.
122
123	If field width is omitted the 1 byte only will be escaped.
124
125Raw buffer as a hex string:
126
127	%*ph	00 01 02  ...  3f
128	%*phC	00:01:02: ... :3f
129	%*phD	00-01-02- ... -3f
130	%*phN	000102 ... 3f
131
132	For printing a small buffers (up to 64 bytes long) as a hex string with
133	certain separator. For the larger buffers consider to use
134	print_hex_dump().
135
136MAC/FDDI addresses:
137
138	%pM	00:01:02:03:04:05
139	%pMR	05:04:03:02:01:00
140	%pMF	00-01-02-03-04-05
141	%pm	000102030405
142	%pmR	050403020100
143
144	For printing 6-byte MAC/FDDI addresses in hex notation. The 'M' and 'm'
145	specifiers result in a printed address with ('M') or without ('m') byte
146	separators. The default byte separator is the colon (':').
147
148	Where FDDI addresses are concerned the 'F' specifier can be used after
149	the 'M' specifier to use dash ('-') separators instead of the default
150	separator.
151
152	For Bluetooth addresses the 'R' specifier shall be used after the 'M'
153	specifier to use reversed byte order suitable for visual interpretation
154	of Bluetooth addresses which are in the little endian order.
155
156	Passed by reference.
157
158IPv4 addresses:
159
160	%pI4	1.2.3.4
161	%pi4	001.002.003.004
162	%p[Ii]4[hnbl]
163
164	For printing IPv4 dot-separated decimal addresses. The 'I4' and 'i4'
165	specifiers result in a printed address with ('i4') or without ('I4')
166	leading zeros.
167
168	The additional 'h', 'n', 'b', and 'l' specifiers are used to specify
169	host, network, big or little endian order addresses respectively. Where
170	no specifier is provided the default network/big endian order is used.
171
172	Passed by reference.
173
174IPv6 addresses:
175
176	%pI6	0001:0002:0003:0004:0005:0006:0007:0008
177	%pi6	00010002000300040005000600070008
178	%pI6c	1:2:3:4:5:6:7:8
179
180	For printing IPv6 network-order 16-bit hex addresses. The 'I6' and 'i6'
181	specifiers result in a printed address with ('I6') or without ('i6')
182	colon-separators. Leading zeros are always used.
183
184	The additional 'c' specifier can be used with the 'I' specifier to
185	print a compressed IPv6 address as described by
186	http://tools.ietf.org/html/rfc5952
187
188	Passed by reference.
189
190IPv4/IPv6 addresses (generic, with port, flowinfo, scope):
191
192	%pIS	1.2.3.4		or 0001:0002:0003:0004:0005:0006:0007:0008
193	%piS	001.002.003.004	or 00010002000300040005000600070008
194	%pISc	1.2.3.4		or 1:2:3:4:5:6:7:8
195	%pISpc	1.2.3.4:12345	or [1:2:3:4:5:6:7:8]:12345
196	%p[Ii]S[pfschnbl]
197
198	For printing an IP address without the need to distinguish whether it's
199	of type AF_INET or AF_INET6, a pointer to a valid 'struct sockaddr',
200	specified through 'IS' or 'iS', can be passed to this format specifier.
201
202	The additional 'p', 'f', and 's' specifiers are used to specify port
203	(IPv4, IPv6), flowinfo (IPv6) and scope (IPv6). Ports have a ':' prefix,
204	flowinfo a '/' and scope a '%', each followed by the actual value.
205
206	In case of an IPv6 address the compressed IPv6 address as described by
207	http://tools.ietf.org/html/rfc5952 is being used if the additional
208	specifier 'c' is given. The IPv6 address is surrounded by '[', ']' in
209	case of additional specifiers 'p', 'f' or 's' as suggested by
210	https://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-07
211
212	In case of IPv4 addresses, the additional 'h', 'n', 'b', and 'l'
213	specifiers can be used as well and are ignored in case of an IPv6
214	address.
215
216	Passed by reference.
217
218	Further examples:
219
220	%pISfc		1.2.3.4		or [1:2:3:4:5:6:7:8]/123456789
221	%pISsc		1.2.3.4		or [1:2:3:4:5:6:7:8]%1234567890
222	%pISpfc		1.2.3.4:12345	or [1:2:3:4:5:6:7:8]:12345/123456789
223
224UUID/GUID addresses:
225
226	%pUb	00010203-0405-0607-0809-0a0b0c0d0e0f
227	%pUB	00010203-0405-0607-0809-0A0B0C0D0E0F
228	%pUl	03020100-0504-0706-0809-0a0b0c0e0e0f
229	%pUL	03020100-0504-0706-0809-0A0B0C0E0E0F
230
231	For printing 16-byte UUID/GUIDs addresses. The additional 'l', 'L',
232	'b' and 'B' specifiers are used to specify a little endian order in
233	lower ('l') or upper case ('L') hex characters - and big endian order
234	in lower ('b') or upper case ('B') hex characters.
235
236	Where no additional specifiers are used the default big endian
237	order with lower case hex characters will be printed.
238
239	Passed by reference.
240
241dentry names:
242
243	%pd{,2,3,4}
244	%pD{,2,3,4}
245
246	For printing dentry name; if we race with d_move(), the name might be
247	a mix of old and new ones, but it won't oops.  %pd dentry is a safer
248	equivalent of %s dentry->d_name.name we used to use, %pd<n> prints
249	n last components.  %pD does the same thing for struct file.
250
251	Passed by reference.
252
253struct va_format:
254
255	%pV
256
257	For printing struct va_format structures. These contain a format string
258	and va_list as follows:
259
260	struct va_format {
261		const char *fmt;
262		va_list *va;
263	};
264
265	Implements a "recursive vsnprintf".
266
267	Do not use this feature without some mechanism to verify the
268	correctness of the format string and va_list arguments.
269
270	Passed by reference.
271
272struct clk:
273
274	%pC	pll1
275	%pCn	pll1
276
277	For printing struct clk structures. '%pC' and '%pCn' print the name
278	(Common Clock Framework) or address (legacy clock framework) of the
279	structure.
280
281	Passed by reference.
282
283bitmap and its derivatives such as cpumask and nodemask:
284
285	%*pb	0779
286	%*pbl	0,3-6,8-10
287
288	For printing bitmap and its derivatives such as cpumask and nodemask,
289	%*pb output the bitmap with field width as the number of bits and %*pbl
290	output the bitmap as range list with field width as the number of bits.
291
292	Passed by reference.
293
294Network device features:
295
296	%pNF	0x000000000000c000
297
298	For printing netdev_features_t.
299
300	Passed by reference.
301
302Command from struct task_struct
303
304	%pT	ls
305
306	For printing executable name excluding path from struct
307	task_struct.
308
309	Passed by reference.
310
311If you add other %p extensions, please extend lib/test_printf.c with
312one or more test cases, if at all feasible.
313
314
315Thank you for your cooperation and attention.
316
317
318By Randy Dunlap <rdunlap@infradead.org> and
319Andrew Murray <amurray@mpc-data.co.uk>
320