Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / Documentation / printk-formats.txt
diff --git a/kernel/Documentation/printk-formats.txt b/kernel/Documentation/printk-formats.txt
new file mode 100644 (file)
index 0000000..2216eb1
--- /dev/null
@@ -0,0 +1,291 @@
+If variable is of Type,                use printk format specifier:
+---------------------------------------------------------
+               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
+               s32                     %d or %x
+               u32                     %u or %x
+               s64                     %lld or %llx
+               u64                     %llu or %llx
+
+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:
+
+       printk("test: sector number/total blocks: %llu/%llu\n",
+               (unsigned long long)sector, (unsigned long long)blockcount);
+
+Reminder: sizeof() result is of type size_t.
+
+
+Raw pointer value SHOULD be printed with %p. The kernel supports
+the following extended format specifiers for pointer types:
+
+Symbols/Function Pointers:
+
+       %pF     versatile_init+0x0/0x110
+       %pf     versatile_init
+       %pS     versatile_init+0x0/0x110
+       %pSR    versatile_init+0x9/0x110
+               (with __builtin_extract_return_addr() translation)
+       %ps     versatile_init
+       %pB     prev_fn_of_versatile_init+0x88/0x88
+
+       For printing symbols and function pointers. The 'S' and 's' specifiers
+       result in the symbol name with ('S') or without ('s') offsets. Where
+       this is used on a kernel without KALLSYMS - the symbol address is
+       printed instead.
+
+       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.
+
+       On ia64, ppc64 and parisc64 architectures function pointers are
+       actually function descriptors which must first be resolved. The 'F' and
+       'f' specifiers perform this resolution and then provide the same
+       functionality as the 'S' and 's' specifiers.
+
+Kernel Pointers:
+
+       %pK     0x01234567 or 0x0123456789abcdef
+
+       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:
+
+       %pr     [mem 0x60000000-0x6fffffff flags 0x2200] or
+               [mem 0x0000000060000000-0x000000006fffffff flags 0x2200]
+       %pR     [mem 0x60000000-0x6fffffff pref] or
+               [mem 0x0000000060000000-0x000000006fffffff pref]
+
+       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:
+
+       %pa[p]  0x01234567 or 0x0123456789abcdef
+
+       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.
+
+DMA addresses types dma_addr_t:
+
+       %pad    0x01234567 or 0x0123456789abcdef
+
+       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:
+
+       %*pE[achnops]
+
+       For printing raw buffer as an escaped string. For the following buffer
+
+               1b 62 20 5c 43 07 22 90 0d 5d
+
+       few examples show how the conversion would be done (the result string
+       without surrounding quotes):
+
+               %*pE            "\eb \C\a"\220\r]"
+               %*pEhp          "\x1bb \C\x07"\x90\x0d]"
+               %*pEa           "\e\142\040\\\103\a\042\220\r\135"
+
+       The conversion rules are applied according to an optional combination
+       of flags (see 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
+       By default ESCAPE_ANY_NP is used.
+
+       ESCAPE_ANY_NP is the sane choice for many cases, in particularly for
+       printing SSIDs.
+
+       If field width is omitted the 1 byte only will be escaped.
+
+Raw buffer as a hex string:
+       %*ph    00 01 02  ...  3f
+       %*phC   00:01:02: ... :3f
+       %*phD   00-01-02- ... -3f
+       %*phN   000102 ... 3f
+
+       For printing a small buffers (up to 64 bytes long) as a hex string with
+       certain separator. For the larger buffers consider to use
+       print_hex_dump().
+
+MAC/FDDI addresses:
+
+       %pM     00:01:02:03:04:05
+       %pMR    05:04:03:02:01:00
+       %pMF    00-01-02-03-04-05
+       %pm     000102030405
+       %pmR    050403020100
+
+       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 (':').
+
+       Where FDDI addresses are concerned the 'F' specifier can be used after
+       the 'M' specifier to use dash ('-') separators instead of the default
+       separator.
+
+       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.
+
+       Passed by reference.
+
+IPv4 addresses:
+
+       %pI4    1.2.3.4
+       %pi4    001.002.003.004
+       %p[Ii]4[hnbl]
+
+       For printing IPv4 dot-separated decimal addresses. The 'I4' and 'i4'
+       specifiers result in a printed address with ('i4') or without ('I4')
+       leading zeros.
+
+       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.
+
+       Passed by reference.
+
+IPv6 addresses:
+
+       %pI6    0001:0002:0003:0004:0005:0006:0007:0008
+       %pi6    00010002000300040005000600070008
+       %pI6c   1:2:3:4:5:6:7:8
+
+       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.
+
+       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
+
+       Passed by reference.
+
+IPv4/IPv6 addresses (generic, with port, flowinfo, scope):
+
+       %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]
+
+       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.
+
+       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.
+
+       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
+
+       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.
+
+       Passed by reference.
+
+       Further examples:
+
+       %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
+
+UUID/GUID addresses:
+
+       %pUb    00010203-0405-0607-0809-0a0b0c0d0e0f
+       %pUB    00010203-0405-0607-0809-0A0B0C0D0E0F
+       %pUl    03020100-0504-0706-0809-0a0b0c0e0e0f
+       %pUL    03020100-0504-0706-0809-0A0B0C0E0E0F
+
+       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.
+
+       Where no additional specifiers are used the default big endian
+       order with lower case hex characters will be printed.
+
+       Passed by reference.
+
+dentry names:
+       %pd{,2,3,4}
+       %pD{,2,3,4}
+
+       For printing dentry name; if we race with 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.
+
+       Passed by reference.
+
+struct va_format:
+
+       %pV
+
+       For printing struct va_format structures. These contain a format string
+       and va_list as follows:
+
+       struct va_format {
+               const char *fmt;
+               va_list *va;
+       };
+
+       Do not use this feature without some mechanism to verify the
+       correctness of the format string and va_list arguments.
+
+       Passed by reference.
+
+struct clk:
+
+       %pC     pll1
+       %pCn    pll1
+       %pCr    1560000000
+
+       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.
+
+       Passed by reference.
+
+bitmap and its derivatives such as cpumask and nodemask:
+
+       %*pb    0779
+       %*pbl   0,3-6,8-10
+
+       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.
+
+       Passed by reference.
+
+Thank you for your cooperation and attention.
+
+
+By Randy Dunlap <rdunlap@infradead.org> and
+Andrew Murray <amurray@mpc-data.co.uk>