diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-03-26 14:17:04 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-03-26 14:17:04 -0400 |
| commit | 0c93ea4064a209cdc36de8a9a3003d43d08f46f7 (patch) | |
| tree | ff19952407c523a1349ef56c05993416dd28437e /Documentation | |
| parent | bc2fd381d8f9dbeb181f82286cdca1567e3d0def (diff) | |
| parent | e6e66b02e11563abdb7f69dcb7a2efbd8d577e77 (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6: (61 commits)
Dynamic debug: fix pr_fmt() build error
Dynamic debug: allow simple quoting of words
dynamic debug: update docs
dynamic debug: combine dprintk and dynamic printk
sysfs: fix some bin_vm_ops errors
kobject: don't block for each kobject_uevent
sysfs: only allow one scheduled removal callback per kobj
Driver core: Fix device_move() vs. dpm list ordering, v2
Driver core: some cleanup on drivers/base/sys.c
Driver core: implement uevent suppress in kobject
vcs: hook sysfs devices into object lifetime instead of "binding"
driver core: fix passing platform_data
driver core: move platform_data into platform_device
sysfs: don't block indefinitely for unmapped files.
driver core: move knode_bus into private structure
driver core: move knode_driver into private structure
driver core: move klist_children into private structure
driver core: create a private portion of struct device
driver core: remove polling for driver_probe_done(v5)
sysfs: reference sysfs_dirent from sysfs inodes
...
Fixed conflicts in drivers/sh/maple/maple.c manually
Diffstat (limited to 'Documentation')
| -rw-r--r-- | Documentation/DocBook/uio-howto.tmpl | 29 | ||||
| -rw-r--r-- | Documentation/dynamic-debug-howto.txt | 240 | ||||
| -rw-r--r-- | Documentation/kernel-parameters.txt | 5 |
3 files changed, 265 insertions, 9 deletions
diff --git a/Documentation/DocBook/uio-howto.tmpl b/Documentation/DocBook/uio-howto.tmpl index 52e1b79ce0e6..8f6e3b2403c7 100644 --- a/Documentation/DocBook/uio-howto.tmpl +++ b/Documentation/DocBook/uio-howto.tmpl | |||
| @@ -42,6 +42,13 @@ GPL version 2. | |||
| 42 | 42 | ||
| 43 | <revhistory> | 43 | <revhistory> |
| 44 | <revision> | 44 | <revision> |
| 45 | <revnumber>0.8</revnumber> | ||
| 46 | <date>2008-12-24</date> | ||
| 47 | <authorinitials>hjk</authorinitials> | ||
| 48 | <revremark>Added name attributes in mem and portio sysfs directories. | ||
| 49 | </revremark> | ||
| 50 | </revision> | ||
| 51 | <revision> | ||
| 45 | <revnumber>0.7</revnumber> | 52 | <revnumber>0.7</revnumber> |
| 46 | <date>2008-12-23</date> | 53 | <date>2008-12-23</date> |
| 47 | <authorinitials>hjk</authorinitials> | 54 | <authorinitials>hjk</authorinitials> |
| @@ -303,12 +310,19 @@ interested in translating it, please email me | |||
| 303 | appear if the size of the mapping is not 0. | 310 | appear if the size of the mapping is not 0. |
| 304 | </para> | 311 | </para> |
| 305 | <para> | 312 | <para> |
| 306 | Each <filename>mapX/</filename> directory contains two read-only files | 313 | Each <filename>mapX/</filename> directory contains four read-only files |
| 307 | that show start address and size of the memory: | 314 | that show attributes of the memory: |
| 308 | </para> | 315 | </para> |
| 309 | <itemizedlist> | 316 | <itemizedlist> |
| 310 | <listitem> | 317 | <listitem> |
| 311 | <para> | 318 | <para> |
| 319 | <filename>name</filename>: A string identifier for this mapping. This | ||
| 320 | is optional, the string can be empty. Drivers can set this to make it | ||
| 321 | easier for userspace to find the correct mapping. | ||
| 322 | </para> | ||
| 323 | </listitem> | ||
| 324 | <listitem> | ||
| 325 | <para> | ||
| 312 | <filename>addr</filename>: The address of memory that can be mapped. | 326 | <filename>addr</filename>: The address of memory that can be mapped. |
| 313 | </para> | 327 | </para> |
| 314 | </listitem> | 328 | </listitem> |
| @@ -366,12 +380,19 @@ offset = N * getpagesize(); | |||
| 366 | <filename>/sys/class/uio/uioX/portio/</filename>. | 380 | <filename>/sys/class/uio/uioX/portio/</filename>. |
| 367 | </para> | 381 | </para> |
| 368 | <para> | 382 | <para> |
| 369 | Each <filename>portX/</filename> directory contains three read-only | 383 | Each <filename>portX/</filename> directory contains four read-only |
| 370 | files that show start, size, and type of the port region: | 384 | files that show name, start, size, and type of the port region: |
| 371 | </para> | 385 | </para> |
| 372 | <itemizedlist> | 386 | <itemizedlist> |
| 373 | <listitem> | 387 | <listitem> |
| 374 | <para> | 388 | <para> |
| 389 | <filename>name</filename>: A string identifier for this port region. | ||
| 390 | The string is optional and can be empty. Drivers can set it to make it | ||
| 391 | easier for userspace to find a certain port region. | ||
| 392 | </para> | ||
| 393 | </listitem> | ||
| 394 | <listitem> | ||
| 395 | <para> | ||
| 375 | <filename>start</filename>: The first port of this region. | 396 | <filename>start</filename>: The first port of this region. |
| 376 | </para> | 397 | </para> |
| 377 | </listitem> | 398 | </listitem> |
diff --git a/Documentation/dynamic-debug-howto.txt b/Documentation/dynamic-debug-howto.txt new file mode 100644 index 000000000000..674c5663d346 --- /dev/null +++ b/Documentation/dynamic-debug-howto.txt | |||
| @@ -0,0 +1,240 @@ | |||
| 1 | |||
| 2 | Introduction | ||
| 3 | ============ | ||
| 4 | |||
| 5 | This document describes how to use the dynamic debug (ddebug) feature. | ||
| 6 | |||
| 7 | Dynamic debug is designed to allow you to dynamically enable/disable kernel | ||
| 8 | code to obtain additional kernel information. Currently, if | ||
| 9 | CONFIG_DYNAMIC_DEBUG is set, then all pr_debug()/dev_debug() calls can be | ||
| 10 | dynamically enabled per-callsite. | ||
| 11 | |||
| 12 | Dynamic debug has even more useful features: | ||
| 13 | |||
| 14 | * Simple query language allows turning on and off debugging statements by | ||
| 15 | matching any combination of: | ||
| 16 | |||
| 17 | - source filename | ||
| 18 | - function name | ||
| 19 | - line number (including ranges of line numbers) | ||
| 20 | - module name | ||
| 21 | - format string | ||
| 22 | |||
| 23 | * Provides a debugfs control file: <debugfs>/dynamic_debug/control which can be | ||
| 24 | read to display the complete list of known debug statements, to help guide you | ||
| 25 | |||
| 26 | Controlling dynamic debug Behaviour | ||
| 27 | =============================== | ||
| 28 | |||
| 29 | The behaviour of pr_debug()/dev_debug()s are controlled via writing to a | ||
| 30 | control file in the 'debugfs' filesystem. Thus, you must first mount the debugfs | ||
| 31 | filesystem, in order to make use of this feature. Subsequently, we refer to the | ||
| 32 | control file as: <debugfs>/dynamic_debug/control. For example, if you want to | ||
| 33 | enable printing from source file 'svcsock.c', line 1603 you simply do: | ||
| 34 | |||
| 35 | nullarbor:~ # echo 'file svcsock.c line 1603 +p' > | ||
| 36 | <debugfs>/dynamic_debug/control | ||
| 37 | |||
| 38 | If you make a mistake with the syntax, the write will fail thus: | ||
| 39 | |||
| 40 | nullarbor:~ # echo 'file svcsock.c wtf 1 +p' > | ||
| 41 | <debugfs>/dynamic_debug/control | ||
| 42 | -bash: echo: write error: Invalid argument | ||
| 43 | |||
| 44 | Viewing Dynamic Debug Behaviour | ||
| 45 | =========================== | ||
| 46 | |||
| 47 | You can view the currently configured behaviour of all the debug statements | ||
| 48 | via: | ||
| 49 | |||
| 50 | nullarbor:~ # cat <debugfs>/dynamic_debug/control | ||
| 51 | # filename:lineno [module]function flags format | ||
| 52 | /usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svc_rdma.c:323 [svcxprt_rdma]svc_rdma_cleanup - "SVCRDMA Module Removed, deregister RPC RDMA transport\012" | ||
| 53 | /usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svc_rdma.c:341 [svcxprt_rdma]svc_rdma_init - "\011max_inline : %d\012" | ||
| 54 | /usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svc_rdma.c:340 [svcxprt_rdma]svc_rdma_init - "\011sq_depth : %d\012" | ||
| 55 | /usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svc_rdma.c:338 [svcxprt_rdma]svc_rdma_init - "\011max_requests : %d\012" | ||
| 56 | ... | ||
| 57 | |||
| 58 | |||
| 59 | You can also apply standard Unix text manipulation filters to this | ||
| 60 | data, e.g. | ||
| 61 | |||
| 62 | nullarbor:~ # grep -i rdma <debugfs>/dynamic_debug/control | wc -l | ||
| 63 | 62 | ||
| 64 | |||
| 65 | nullarbor:~ # grep -i tcp <debugfs>/dynamic_debug/control | wc -l | ||
| 66 | 42 | ||
| 67 | |||
| 68 | Note in particular that the third column shows the enabled behaviour | ||
| 69 | flags for each debug statement callsite (see below for definitions of the | ||
| 70 | flags). The default value, no extra behaviour enabled, is "-". So | ||
| 71 | you can view all the debug statement callsites with any non-default flags: | ||
| 72 | |||
| 73 | nullarbor:~ # awk '$3 != "-"' <debugfs>/dynamic_debug/control | ||
| 74 | # filename:lineno [module]function flags format | ||
| 75 | /usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svcsock.c:1603 [sunrpc]svc_send p "svc_process: st_sendto returned %d\012" | ||
| 76 | |||
| 77 | |||
| 78 | Command Language Reference | ||
| 79 | ========================== | ||
| 80 | |||
| 81 | At the lexical level, a command comprises a sequence of words separated | ||
| 82 | by whitespace characters. Note that newlines are treated as word | ||
| 83 | separators and do *not* end a command or allow multiple commands to | ||
| 84 | be done together. So these are all equivalent: | ||
| 85 | |||
| 86 | nullarbor:~ # echo -c 'file svcsock.c line 1603 +p' > | ||
| 87 | <debugfs>/dynamic_debug/control | ||
| 88 | nullarbor:~ # echo -c ' file svcsock.c line 1603 +p ' > | ||
| 89 | <debugfs>/dynamic_debug/control | ||
| 90 | nullarbor:~ # echo -c 'file svcsock.c\nline 1603 +p' > | ||
| 91 | <debugfs>/dynamic_debug/control | ||
| 92 | nullarbor:~ # echo -n 'file svcsock.c line 1603 +p' > | ||
| 93 | <debugfs>/dynamic_debug/control | ||
| 94 | |||
| 95 | Commands are bounded by a write() system call. If you want to do | ||
| 96 | multiple commands you need to do a separate "echo" for each, like: | ||
| 97 | |||
| 98 | nullarbor:~ # echo 'file svcsock.c line 1603 +p' > /proc/dprintk ;\ | ||
| 99 | > echo 'file svcsock.c line 1563 +p' > /proc/dprintk | ||
| 100 | |||
| 101 | or even like: | ||
| 102 | |||
| 103 | nullarbor:~ # ( | ||
| 104 | > echo 'file svcsock.c line 1603 +p' ;\ | ||
| 105 | > echo 'file svcsock.c line 1563 +p' ;\ | ||
| 106 | > ) > /proc/dprintk | ||
| 107 | |||
| 108 | At the syntactical level, a command comprises a sequence of match | ||
| 109 | specifications, followed by a flags change specification. | ||
| 110 | |||
| 111 | command ::= match-spec* flags-spec | ||
| 112 | |||
| 113 | The match-spec's are used to choose a subset of the known dprintk() | ||
| 114 | callsites to which to apply the flags-spec. Think of them as a query | ||
| 115 | with implicit ANDs between each pair. Note that an empty list of | ||
| 116 | match-specs is possible, but is not very useful because it will not | ||
| 117 | match any debug statement callsites. | ||
| 118 | |||
| 119 | A match specification comprises a keyword, which controls the attribute | ||
| 120 | of the callsite to be compared, and a value to compare against. Possible | ||
| 121 | keywords are: | ||
| 122 | |||
| 123 | match-spec ::= 'func' string | | ||
| 124 | 'file' string | | ||
| 125 | 'module' string | | ||
| 126 | 'format' string | | ||
| 127 | 'line' line-range | ||
| 128 | |||
| 129 | line-range ::= lineno | | ||
| 130 | '-'lineno | | ||
| 131 | lineno'-' | | ||
| 132 | lineno'-'lineno | ||
| 133 | // Note: line-range cannot contain space, e.g. | ||
| 134 | // "1-30" is valid range but "1 - 30" is not. | ||
| 135 | |||
| 136 | lineno ::= unsigned-int | ||
| 137 | |||
| 138 | The meanings of each keyword are: | ||
| 139 | |||
| 140 | func | ||
| 141 | The given string is compared against the function name | ||
| 142 | of each callsite. Example: | ||
| 143 | |||
| 144 | func svc_tcp_accept | ||
| 145 | |||
| 146 | file | ||
| 147 | The given string is compared against either the full | ||
| 148 | pathname or the basename of the source file of each | ||
| 149 | callsite. Examples: | ||
| 150 | |||
| 151 | file svcsock.c | ||
| 152 | file /usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svcsock.c | ||
| 153 | |||
| 154 | module | ||
| 155 | The given string is compared against the module name | ||
| 156 | of each callsite. The module name is the string as | ||
| 157 | seen in "lsmod", i.e. without the directory or the .ko | ||
| 158 | suffix and with '-' changed to '_'. Examples: | ||
| 159 | |||
| 160 | module sunrpc | ||
| 161 | module nfsd | ||
| 162 | |||
| 163 | format | ||
| 164 | The given string is searched for in the dynamic debug format | ||
| 165 | string. Note that the string does not need to match the | ||
| 166 | entire format, only some part. Whitespace and other | ||
| 167 | special characters can be escaped using C octal character | ||
| 168 | escape \ooo notation, e.g. the space character is \040. | ||
| 169 | Alternatively, the string can be enclosed in double quote | ||
| 170 | characters (") or single quote characters ('). | ||
| 171 | Examples: | ||
| 172 | |||
| 173 | format svcrdma: // many of the NFS/RDMA server dprintks | ||
| 174 | format readahead // some dprintks in the readahead cache | ||
| 175 | format nfsd:\040SETATTR // one way to match a format with whitespace | ||
| 176 | format "nfsd: SETATTR" // a neater way to match a format with whitespace | ||
| 177 | format 'nfsd: SETATTR' // yet another way to match a format with whitespace | ||
| 178 | |||
| 179 | line | ||
| 180 | The given line number or range of line numbers is compared | ||
| 181 | against the line number of each dprintk() callsite. A single | ||
| 182 | line number matches the callsite line number exactly. A | ||
| 183 | range of line numbers matches any callsite between the first | ||
| 184 | and last line number inclusive. An empty first number means | ||
| 185 | the first line in the file, an empty line number means the | ||
| 186 | last number in the file. Examples: | ||
| 187 | |||
| 188 | line 1603 // exactly line 1603 | ||
| 189 | line 1600-1605 // the six lines from line 1600 to line 1605 | ||
| 190 | line -1605 // the 1605 lines from line 1 to line 1605 | ||
| 191 | line 1600- // all lines from line 1600 to the end of the file | ||
| 192 | |||
| 193 | The flags specification comprises a change operation followed | ||
| 194 | by one or more flag characters. The change operation is one | ||
| 195 | of the characters: | ||
| 196 | |||
| 197 | - | ||
| 198 | remove the given flags | ||
| 199 | |||
| 200 | + | ||
| 201 | add the given flags | ||
| 202 | |||
| 203 | = | ||
| 204 | set the flags to the given flags | ||
| 205 | |||
| 206 | The flags are: | ||
| 207 | |||
| 208 | p | ||
| 209 | Causes a printk() message to be emitted to dmesg | ||
| 210 | |||
| 211 | Note the regexp ^[-+=][scp]+$ matches a flags specification. | ||
| 212 | Note also that there is no convenient syntax to remove all | ||
| 213 | the flags at once, you need to use "-psc". | ||
| 214 | |||
| 215 | Examples | ||
| 216 | ======== | ||
| 217 | |||
| 218 | // enable the message at line 1603 of file svcsock.c | ||
| 219 | nullarbor:~ # echo -n 'file svcsock.c line 1603 +p' > | ||
| 220 | <debugfs>/dynamic_debug/control | ||
| 221 | |||
| 222 | // enable all the messages in file svcsock.c | ||
| 223 | nullarbor:~ # echo -n 'file svcsock.c +p' > | ||
| 224 | <debugfs>/dynamic_debug/control | ||
| 225 | |||
| 226 | // enable all the messages in the NFS server module | ||
| 227 | nullarbor:~ # echo -n 'module nfsd +p' > | ||
| 228 | <debugfs>/dynamic_debug/control | ||
| 229 | |||
| 230 | // enable all 12 messages in the function svc_process() | ||
| 231 | nullarbor:~ # echo -n 'func svc_process +p' > | ||
| 232 | <debugfs>/dynamic_debug/control | ||
| 233 | |||
| 234 | // disable all 12 messages in the function svc_process() | ||
| 235 | nullarbor:~ # echo -n 'func svc_process -p' > | ||
| 236 | <debugfs>/dynamic_debug/control | ||
| 237 | |||
| 238 | // enable messages for NFS calls READ, READLINK, READDIR and READDIR+. | ||
| 239 | nullarbor:~ # echo -n 'format "nfsd: READ" +p' > | ||
| 240 | <debugfs>/dynamic_debug/control | ||
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 224263e7711f..1a29ff3df3c5 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
| @@ -1826,11 +1826,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
| 1826 | autoconfiguration. | 1826 | autoconfiguration. |
| 1827 | Ranges are in pairs (memory base and size). | 1827 | Ranges are in pairs (memory base and size). |
| 1828 | 1828 | ||
| 1829 | dynamic_printk Enables pr_debug()/dev_dbg() calls if | ||
| 1830 | CONFIG_DYNAMIC_PRINTK_DEBUG has been enabled. | ||
| 1831 | These can also be switched on/off via | ||
| 1832 | <debugfs>/dynamic_printk/modules | ||
| 1833 | |||
| 1834 | print-fatal-signals= | 1829 | print-fatal-signals= |
| 1835 | [KNL] debug: print fatal signals | 1830 | [KNL] debug: print fatal signals |
| 1836 | print-fatal-signals=1: print segfault info to | 1831 | print-fatal-signals=1: print segfault info to |
