Commit e2852ae825dba5ebc159788720baec1a28a57125
Committed by
Linus Torvalds
1 parent
066a9be6c0
Exists in
master
and in
39 other branches
percpu_counter: add debugobj support
All percpu counters are linked to a global list on initialization and removed from it on destruction. The list is walked during CPU up/down. If a percpu counter is freed without being properly destroyed, the system will oops only on the next CPU up/down making it pretty nasty to track down. This patch adds debugobj support for percpu counters so that such problems can be found easily. As percpu counters don't make sense on stack and can't be statically initialized, debugobj support is pretty simple. It's initialized and activated on counter initialization, and deactivatd and destroyed on counter destruction. With this patch applied, the bug fixed by commit 602586a83b719df0fbd94196a1359ed35aeb2df3 (shmem: put_super must percpu_counter_destroy) triggers the following warning on tmpfs unmount and the system won't oops on the next cpu up/down operation. ------------[ cut here ]------------ WARNING: at lib/debugobjects.c:259 debug_print_object+0x5c/0x70() Hardware name: Bochs ODEBUG: free active (active state 0) object type: percpu_counter Modules linked in: Pid: 3999, comm: umount Not tainted 2.6.36-rc2-work+ #5 Call Trace: [<ffffffff81083f7f>] warn_slowpath_common+0x7f/0xc0 [<ffffffff81084076>] warn_slowpath_fmt+0x46/0x50 [<ffffffff813b45cc>] debug_print_object+0x5c/0x70 [<ffffffff813b50e5>] debug_check_no_obj_freed+0x125/0x210 [<ffffffff811577d3>] kfree+0xb3/0x2f0 [<ffffffff81132edd>] shmem_put_super+0x1d/0x30 [<ffffffff81162e96>] generic_shutdown_super+0x56/0xe0 [<ffffffff81162f86>] kill_anon_super+0x16/0x60 [<ffffffff81162ff7>] kill_litter_super+0x27/0x30 [<ffffffff81163295>] deactivate_locked_super+0x45/0x60 [<ffffffff81163cfa>] deactivate_super+0x4a/0x70 [<ffffffff8117d446>] mntput_no_expire+0x86/0xe0 [<ffffffff8117df7f>] sys_umount+0x6f/0x360 [<ffffffff8103f01b>] system_call_fastpath+0x16/0x1b ---[ end trace cce2a341ba3611a7 ]--- Signed-off-by: Tejun Heo <tj@kernel.org> Acked-by: Thomas Gleixner <tglxlinutronix.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 2 changed files with 56 additions and 0 deletions Inline Diff
lib/Kconfig.debug
1 | 1 | ||
2 | config PRINTK_TIME | 2 | config PRINTK_TIME |
3 | bool "Show timing information on printks" | 3 | bool "Show timing information on printks" |
4 | depends on PRINTK | 4 | depends on PRINTK |
5 | help | 5 | help |
6 | Selecting this option causes timing information to be | 6 | Selecting this option causes timing information to be |
7 | included in printk output. This allows you to measure | 7 | included in printk output. This allows you to measure |
8 | the interval between kernel operations, including bootup | 8 | the interval between kernel operations, including bootup |
9 | operations. This is useful for identifying long delays | 9 | operations. This is useful for identifying long delays |
10 | in kernel startup. | 10 | in kernel startup. |
11 | 11 | ||
12 | config ENABLE_WARN_DEPRECATED | 12 | config ENABLE_WARN_DEPRECATED |
13 | bool "Enable __deprecated logic" | 13 | bool "Enable __deprecated logic" |
14 | default y | 14 | default y |
15 | help | 15 | help |
16 | Enable the __deprecated logic in the kernel build. | 16 | Enable the __deprecated logic in the kernel build. |
17 | Disable this to suppress the "warning: 'foo' is deprecated | 17 | Disable this to suppress the "warning: 'foo' is deprecated |
18 | (declared at kernel/power/somefile.c:1234)" messages. | 18 | (declared at kernel/power/somefile.c:1234)" messages. |
19 | 19 | ||
20 | config ENABLE_MUST_CHECK | 20 | config ENABLE_MUST_CHECK |
21 | bool "Enable __must_check logic" | 21 | bool "Enable __must_check logic" |
22 | default y | 22 | default y |
23 | help | 23 | help |
24 | Enable the __must_check logic in the kernel build. Disable this to | 24 | Enable the __must_check logic in the kernel build. Disable this to |
25 | suppress the "warning: ignoring return value of 'foo', declared with | 25 | suppress the "warning: ignoring return value of 'foo', declared with |
26 | attribute warn_unused_result" messages. | 26 | attribute warn_unused_result" messages. |
27 | 27 | ||
28 | config FRAME_WARN | 28 | config FRAME_WARN |
29 | int "Warn for stack frames larger than (needs gcc 4.4)" | 29 | int "Warn for stack frames larger than (needs gcc 4.4)" |
30 | range 0 8192 | 30 | range 0 8192 |
31 | default 1024 if !64BIT | 31 | default 1024 if !64BIT |
32 | default 2048 if 64BIT | 32 | default 2048 if 64BIT |
33 | help | 33 | help |
34 | Tell gcc to warn at build time for stack frames larger than this. | 34 | Tell gcc to warn at build time for stack frames larger than this. |
35 | Setting this too low will cause a lot of warnings. | 35 | Setting this too low will cause a lot of warnings. |
36 | Setting it to 0 disables the warning. | 36 | Setting it to 0 disables the warning. |
37 | Requires gcc 4.4 | 37 | Requires gcc 4.4 |
38 | 38 | ||
39 | config MAGIC_SYSRQ | 39 | config MAGIC_SYSRQ |
40 | bool "Magic SysRq key" | 40 | bool "Magic SysRq key" |
41 | depends on !UML | 41 | depends on !UML |
42 | help | 42 | help |
43 | If you say Y here, you will have some control over the system even | 43 | If you say Y here, you will have some control over the system even |
44 | if the system crashes for example during kernel debugging (e.g., you | 44 | if the system crashes for example during kernel debugging (e.g., you |
45 | will be able to flush the buffer cache to disk, reboot the system | 45 | will be able to flush the buffer cache to disk, reboot the system |
46 | immediately or dump some status information). This is accomplished | 46 | immediately or dump some status information). This is accomplished |
47 | by pressing various keys while holding SysRq (Alt+PrintScreen). It | 47 | by pressing various keys while holding SysRq (Alt+PrintScreen). It |
48 | also works on a serial console (on PC hardware at least), if you | 48 | also works on a serial console (on PC hardware at least), if you |
49 | send a BREAK and then within 5 seconds a command keypress. The | 49 | send a BREAK and then within 5 seconds a command keypress. The |
50 | keys are documented in <file:Documentation/sysrq.txt>. Don't say Y | 50 | keys are documented in <file:Documentation/sysrq.txt>. Don't say Y |
51 | unless you really know what this hack does. | 51 | unless you really know what this hack does. |
52 | 52 | ||
53 | config STRIP_ASM_SYMS | 53 | config STRIP_ASM_SYMS |
54 | bool "Strip assembler-generated symbols during link" | 54 | bool "Strip assembler-generated symbols during link" |
55 | default n | 55 | default n |
56 | help | 56 | help |
57 | Strip internal assembler-generated symbols during a link (symbols | 57 | Strip internal assembler-generated symbols during a link (symbols |
58 | that look like '.Lxxx') so they don't pollute the output of | 58 | that look like '.Lxxx') so they don't pollute the output of |
59 | get_wchan() and suchlike. | 59 | get_wchan() and suchlike. |
60 | 60 | ||
61 | config UNUSED_SYMBOLS | 61 | config UNUSED_SYMBOLS |
62 | bool "Enable unused/obsolete exported symbols" | 62 | bool "Enable unused/obsolete exported symbols" |
63 | default y if X86 | 63 | default y if X86 |
64 | help | 64 | help |
65 | Unused but exported symbols make the kernel needlessly bigger. For | 65 | Unused but exported symbols make the kernel needlessly bigger. For |
66 | that reason most of these unused exports will soon be removed. This | 66 | that reason most of these unused exports will soon be removed. This |
67 | option is provided temporarily to provide a transition period in case | 67 | option is provided temporarily to provide a transition period in case |
68 | some external kernel module needs one of these symbols anyway. If you | 68 | some external kernel module needs one of these symbols anyway. If you |
69 | encounter such a case in your module, consider if you are actually | 69 | encounter such a case in your module, consider if you are actually |
70 | using the right API. (rationale: since nobody in the kernel is using | 70 | using the right API. (rationale: since nobody in the kernel is using |
71 | this in a module, there is a pretty good chance it's actually the | 71 | this in a module, there is a pretty good chance it's actually the |
72 | wrong interface to use). If you really need the symbol, please send a | 72 | wrong interface to use). If you really need the symbol, please send a |
73 | mail to the linux kernel mailing list mentioning the symbol and why | 73 | mail to the linux kernel mailing list mentioning the symbol and why |
74 | you really need it, and what the merge plan to the mainline kernel for | 74 | you really need it, and what the merge plan to the mainline kernel for |
75 | your module is. | 75 | your module is. |
76 | 76 | ||
77 | config DEBUG_FS | 77 | config DEBUG_FS |
78 | bool "Debug Filesystem" | 78 | bool "Debug Filesystem" |
79 | help | 79 | help |
80 | debugfs is a virtual file system that kernel developers use to put | 80 | debugfs is a virtual file system that kernel developers use to put |
81 | debugging files into. Enable this option to be able to read and | 81 | debugging files into. Enable this option to be able to read and |
82 | write to these files. | 82 | write to these files. |
83 | 83 | ||
84 | For detailed documentation on the debugfs API, see | 84 | For detailed documentation on the debugfs API, see |
85 | Documentation/DocBook/filesystems. | 85 | Documentation/DocBook/filesystems. |
86 | 86 | ||
87 | If unsure, say N. | 87 | If unsure, say N. |
88 | 88 | ||
89 | config HEADERS_CHECK | 89 | config HEADERS_CHECK |
90 | bool "Run 'make headers_check' when building vmlinux" | 90 | bool "Run 'make headers_check' when building vmlinux" |
91 | depends on !UML | 91 | depends on !UML |
92 | help | 92 | help |
93 | This option will extract the user-visible kernel headers whenever | 93 | This option will extract the user-visible kernel headers whenever |
94 | building the kernel, and will run basic sanity checks on them to | 94 | building the kernel, and will run basic sanity checks on them to |
95 | ensure that exported files do not attempt to include files which | 95 | ensure that exported files do not attempt to include files which |
96 | were not exported, etc. | 96 | were not exported, etc. |
97 | 97 | ||
98 | If you're making modifications to header files which are | 98 | If you're making modifications to header files which are |
99 | relevant for userspace, say 'Y', and check the headers | 99 | relevant for userspace, say 'Y', and check the headers |
100 | exported to $(INSTALL_HDR_PATH) (usually 'usr/include' in | 100 | exported to $(INSTALL_HDR_PATH) (usually 'usr/include' in |
101 | your build tree), to make sure they're suitable. | 101 | your build tree), to make sure they're suitable. |
102 | 102 | ||
103 | config DEBUG_SECTION_MISMATCH | 103 | config DEBUG_SECTION_MISMATCH |
104 | bool "Enable full Section mismatch analysis" | 104 | bool "Enable full Section mismatch analysis" |
105 | depends on UNDEFINED || (BLACKFIN) | 105 | depends on UNDEFINED || (BLACKFIN) |
106 | default y | 106 | default y |
107 | # This option is on purpose disabled for now. | 107 | # This option is on purpose disabled for now. |
108 | # It will be enabled when we are down to a reasonable number | 108 | # It will be enabled when we are down to a reasonable number |
109 | # of section mismatch warnings (< 10 for an allyesconfig build) | 109 | # of section mismatch warnings (< 10 for an allyesconfig build) |
110 | help | 110 | help |
111 | The section mismatch analysis checks if there are illegal | 111 | The section mismatch analysis checks if there are illegal |
112 | references from one section to another section. | 112 | references from one section to another section. |
113 | Linux will during link or during runtime drop some sections | 113 | Linux will during link or during runtime drop some sections |
114 | and any use of code/data previously in these sections will | 114 | and any use of code/data previously in these sections will |
115 | most likely result in an oops. | 115 | most likely result in an oops. |
116 | In the code functions and variables are annotated with | 116 | In the code functions and variables are annotated with |
117 | __init, __devinit etc. (see full list in include/linux/init.h) | 117 | __init, __devinit etc. (see full list in include/linux/init.h) |
118 | which results in the code/data being placed in specific sections. | 118 | which results in the code/data being placed in specific sections. |
119 | The section mismatch analysis is always done after a full | 119 | The section mismatch analysis is always done after a full |
120 | kernel build but enabling this option will in addition | 120 | kernel build but enabling this option will in addition |
121 | do the following: | 121 | do the following: |
122 | - Add the option -fno-inline-functions-called-once to gcc | 122 | - Add the option -fno-inline-functions-called-once to gcc |
123 | When inlining a function annotated __init in a non-init | 123 | When inlining a function annotated __init in a non-init |
124 | function we would lose the section information and thus | 124 | function we would lose the section information and thus |
125 | the analysis would not catch the illegal reference. | 125 | the analysis would not catch the illegal reference. |
126 | This option tells gcc to inline less but will also | 126 | This option tells gcc to inline less but will also |
127 | result in a larger kernel. | 127 | result in a larger kernel. |
128 | - Run the section mismatch analysis for each module/built-in.o | 128 | - Run the section mismatch analysis for each module/built-in.o |
129 | When we run the section mismatch analysis on vmlinux.o we | 129 | When we run the section mismatch analysis on vmlinux.o we |
130 | lose valueble information about where the mismatch was | 130 | lose valueble information about where the mismatch was |
131 | introduced. | 131 | introduced. |
132 | Running the analysis for each module/built-in.o file | 132 | Running the analysis for each module/built-in.o file |
133 | will tell where the mismatch happens much closer to the | 133 | will tell where the mismatch happens much closer to the |
134 | source. The drawback is that we will report the same | 134 | source. The drawback is that we will report the same |
135 | mismatch at least twice. | 135 | mismatch at least twice. |
136 | - Enable verbose reporting from modpost to help solving | 136 | - Enable verbose reporting from modpost to help solving |
137 | the section mismatches reported. | 137 | the section mismatches reported. |
138 | 138 | ||
139 | config DEBUG_KERNEL | 139 | config DEBUG_KERNEL |
140 | bool "Kernel debugging" | 140 | bool "Kernel debugging" |
141 | help | 141 | help |
142 | Say Y here if you are developing drivers or trying to debug and | 142 | Say Y here if you are developing drivers or trying to debug and |
143 | identify kernel problems. | 143 | identify kernel problems. |
144 | 144 | ||
145 | config DEBUG_SHIRQ | 145 | config DEBUG_SHIRQ |
146 | bool "Debug shared IRQ handlers" | 146 | bool "Debug shared IRQ handlers" |
147 | depends on DEBUG_KERNEL && GENERIC_HARDIRQS | 147 | depends on DEBUG_KERNEL && GENERIC_HARDIRQS |
148 | help | 148 | help |
149 | Enable this to generate a spurious interrupt as soon as a shared | 149 | Enable this to generate a spurious interrupt as soon as a shared |
150 | interrupt handler is registered, and just before one is deregistered. | 150 | interrupt handler is registered, and just before one is deregistered. |
151 | Drivers ought to be able to handle interrupts coming in at those | 151 | Drivers ought to be able to handle interrupts coming in at those |
152 | points; some don't and need to be caught. | 152 | points; some don't and need to be caught. |
153 | 153 | ||
154 | config LOCKUP_DETECTOR | 154 | config LOCKUP_DETECTOR |
155 | bool "Detect Hard and Soft Lockups" | 155 | bool "Detect Hard and Soft Lockups" |
156 | depends on DEBUG_KERNEL && !S390 | 156 | depends on DEBUG_KERNEL && !S390 |
157 | help | 157 | help |
158 | Say Y here to enable the kernel to act as a watchdog to detect | 158 | Say Y here to enable the kernel to act as a watchdog to detect |
159 | hard and soft lockups. | 159 | hard and soft lockups. |
160 | 160 | ||
161 | Softlockups are bugs that cause the kernel to loop in kernel | 161 | Softlockups are bugs that cause the kernel to loop in kernel |
162 | mode for more than 60 seconds, without giving other tasks a | 162 | mode for more than 60 seconds, without giving other tasks a |
163 | chance to run. The current stack trace is displayed upon | 163 | chance to run. The current stack trace is displayed upon |
164 | detection and the system will stay locked up. | 164 | detection and the system will stay locked up. |
165 | 165 | ||
166 | Hardlockups are bugs that cause the CPU to loop in kernel mode | 166 | Hardlockups are bugs that cause the CPU to loop in kernel mode |
167 | for more than 60 seconds, without letting other interrupts have a | 167 | for more than 60 seconds, without letting other interrupts have a |
168 | chance to run. The current stack trace is displayed upon detection | 168 | chance to run. The current stack trace is displayed upon detection |
169 | and the system will stay locked up. | 169 | and the system will stay locked up. |
170 | 170 | ||
171 | The overhead should be minimal. A periodic hrtimer runs to | 171 | The overhead should be minimal. A periodic hrtimer runs to |
172 | generate interrupts and kick the watchdog task every 10-12 seconds. | 172 | generate interrupts and kick the watchdog task every 10-12 seconds. |
173 | An NMI is generated every 60 seconds or so to check for hardlockups. | 173 | An NMI is generated every 60 seconds or so to check for hardlockups. |
174 | 174 | ||
175 | config HARDLOCKUP_DETECTOR | 175 | config HARDLOCKUP_DETECTOR |
176 | def_bool LOCKUP_DETECTOR && PERF_EVENTS && HAVE_PERF_EVENTS_NMI | 176 | def_bool LOCKUP_DETECTOR && PERF_EVENTS && HAVE_PERF_EVENTS_NMI |
177 | 177 | ||
178 | config BOOTPARAM_SOFTLOCKUP_PANIC | 178 | config BOOTPARAM_SOFTLOCKUP_PANIC |
179 | bool "Panic (Reboot) On Soft Lockups" | 179 | bool "Panic (Reboot) On Soft Lockups" |
180 | depends on LOCKUP_DETECTOR | 180 | depends on LOCKUP_DETECTOR |
181 | help | 181 | help |
182 | Say Y here to enable the kernel to panic on "soft lockups", | 182 | Say Y here to enable the kernel to panic on "soft lockups", |
183 | which are bugs that cause the kernel to loop in kernel | 183 | which are bugs that cause the kernel to loop in kernel |
184 | mode for more than 60 seconds, without giving other tasks a | 184 | mode for more than 60 seconds, without giving other tasks a |
185 | chance to run. | 185 | chance to run. |
186 | 186 | ||
187 | The panic can be used in combination with panic_timeout, | 187 | The panic can be used in combination with panic_timeout, |
188 | to cause the system to reboot automatically after a | 188 | to cause the system to reboot automatically after a |
189 | lockup has been detected. This feature is useful for | 189 | lockup has been detected. This feature is useful for |
190 | high-availability systems that have uptime guarantees and | 190 | high-availability systems that have uptime guarantees and |
191 | where a lockup must be resolved ASAP. | 191 | where a lockup must be resolved ASAP. |
192 | 192 | ||
193 | Say N if unsure. | 193 | Say N if unsure. |
194 | 194 | ||
195 | config BOOTPARAM_SOFTLOCKUP_PANIC_VALUE | 195 | config BOOTPARAM_SOFTLOCKUP_PANIC_VALUE |
196 | int | 196 | int |
197 | depends on LOCKUP_DETECTOR | 197 | depends on LOCKUP_DETECTOR |
198 | range 0 1 | 198 | range 0 1 |
199 | default 0 if !BOOTPARAM_SOFTLOCKUP_PANIC | 199 | default 0 if !BOOTPARAM_SOFTLOCKUP_PANIC |
200 | default 1 if BOOTPARAM_SOFTLOCKUP_PANIC | 200 | default 1 if BOOTPARAM_SOFTLOCKUP_PANIC |
201 | 201 | ||
202 | config DETECT_HUNG_TASK | 202 | config DETECT_HUNG_TASK |
203 | bool "Detect Hung Tasks" | 203 | bool "Detect Hung Tasks" |
204 | depends on DEBUG_KERNEL | 204 | depends on DEBUG_KERNEL |
205 | default DETECT_SOFTLOCKUP | 205 | default DETECT_SOFTLOCKUP |
206 | help | 206 | help |
207 | Say Y here to enable the kernel to detect "hung tasks", | 207 | Say Y here to enable the kernel to detect "hung tasks", |
208 | which are bugs that cause the task to be stuck in | 208 | which are bugs that cause the task to be stuck in |
209 | uninterruptible "D" state indefinitiley. | 209 | uninterruptible "D" state indefinitiley. |
210 | 210 | ||
211 | When a hung task is detected, the kernel will print the | 211 | When a hung task is detected, the kernel will print the |
212 | current stack trace (which you should report), but the | 212 | current stack trace (which you should report), but the |
213 | task will stay in uninterruptible state. If lockdep is | 213 | task will stay in uninterruptible state. If lockdep is |
214 | enabled then all held locks will also be reported. This | 214 | enabled then all held locks will also be reported. This |
215 | feature has negligible overhead. | 215 | feature has negligible overhead. |
216 | 216 | ||
217 | config BOOTPARAM_HUNG_TASK_PANIC | 217 | config BOOTPARAM_HUNG_TASK_PANIC |
218 | bool "Panic (Reboot) On Hung Tasks" | 218 | bool "Panic (Reboot) On Hung Tasks" |
219 | depends on DETECT_HUNG_TASK | 219 | depends on DETECT_HUNG_TASK |
220 | help | 220 | help |
221 | Say Y here to enable the kernel to panic on "hung tasks", | 221 | Say Y here to enable the kernel to panic on "hung tasks", |
222 | which are bugs that cause the kernel to leave a task stuck | 222 | which are bugs that cause the kernel to leave a task stuck |
223 | in uninterruptible "D" state. | 223 | in uninterruptible "D" state. |
224 | 224 | ||
225 | The panic can be used in combination with panic_timeout, | 225 | The panic can be used in combination with panic_timeout, |
226 | to cause the system to reboot automatically after a | 226 | to cause the system to reboot automatically after a |
227 | hung task has been detected. This feature is useful for | 227 | hung task has been detected. This feature is useful for |
228 | high-availability systems that have uptime guarantees and | 228 | high-availability systems that have uptime guarantees and |
229 | where a hung tasks must be resolved ASAP. | 229 | where a hung tasks must be resolved ASAP. |
230 | 230 | ||
231 | Say N if unsure. | 231 | Say N if unsure. |
232 | 232 | ||
233 | config BOOTPARAM_HUNG_TASK_PANIC_VALUE | 233 | config BOOTPARAM_HUNG_TASK_PANIC_VALUE |
234 | int | 234 | int |
235 | depends on DETECT_HUNG_TASK | 235 | depends on DETECT_HUNG_TASK |
236 | range 0 1 | 236 | range 0 1 |
237 | default 0 if !BOOTPARAM_HUNG_TASK_PANIC | 237 | default 0 if !BOOTPARAM_HUNG_TASK_PANIC |
238 | default 1 if BOOTPARAM_HUNG_TASK_PANIC | 238 | default 1 if BOOTPARAM_HUNG_TASK_PANIC |
239 | 239 | ||
240 | config SCHED_DEBUG | 240 | config SCHED_DEBUG |
241 | bool "Collect scheduler debugging info" | 241 | bool "Collect scheduler debugging info" |
242 | depends on DEBUG_KERNEL && PROC_FS | 242 | depends on DEBUG_KERNEL && PROC_FS |
243 | default y | 243 | default y |
244 | help | 244 | help |
245 | If you say Y here, the /proc/sched_debug file will be provided | 245 | If you say Y here, the /proc/sched_debug file will be provided |
246 | that can help debug the scheduler. The runtime overhead of this | 246 | that can help debug the scheduler. The runtime overhead of this |
247 | option is minimal. | 247 | option is minimal. |
248 | 248 | ||
249 | config SCHEDSTATS | 249 | config SCHEDSTATS |
250 | bool "Collect scheduler statistics" | 250 | bool "Collect scheduler statistics" |
251 | depends on DEBUG_KERNEL && PROC_FS | 251 | depends on DEBUG_KERNEL && PROC_FS |
252 | help | 252 | help |
253 | If you say Y here, additional code will be inserted into the | 253 | If you say Y here, additional code will be inserted into the |
254 | scheduler and related routines to collect statistics about | 254 | scheduler and related routines to collect statistics about |
255 | scheduler behavior and provide them in /proc/schedstat. These | 255 | scheduler behavior and provide them in /proc/schedstat. These |
256 | stats may be useful for both tuning and debugging the scheduler | 256 | stats may be useful for both tuning and debugging the scheduler |
257 | If you aren't debugging the scheduler or trying to tune a specific | 257 | If you aren't debugging the scheduler or trying to tune a specific |
258 | application, you can say N to avoid the very slight overhead | 258 | application, you can say N to avoid the very slight overhead |
259 | this adds. | 259 | this adds. |
260 | 260 | ||
261 | config TIMER_STATS | 261 | config TIMER_STATS |
262 | bool "Collect kernel timers statistics" | 262 | bool "Collect kernel timers statistics" |
263 | depends on DEBUG_KERNEL && PROC_FS | 263 | depends on DEBUG_KERNEL && PROC_FS |
264 | help | 264 | help |
265 | If you say Y here, additional code will be inserted into the | 265 | If you say Y here, additional code will be inserted into the |
266 | timer routines to collect statistics about kernel timers being | 266 | timer routines to collect statistics about kernel timers being |
267 | reprogrammed. The statistics can be read from /proc/timer_stats. | 267 | reprogrammed. The statistics can be read from /proc/timer_stats. |
268 | The statistics collection is started by writing 1 to /proc/timer_stats, | 268 | The statistics collection is started by writing 1 to /proc/timer_stats, |
269 | writing 0 stops it. This feature is useful to collect information | 269 | writing 0 stops it. This feature is useful to collect information |
270 | about timer usage patterns in kernel and userspace. This feature | 270 | about timer usage patterns in kernel and userspace. This feature |
271 | is lightweight if enabled in the kernel config but not activated | 271 | is lightweight if enabled in the kernel config but not activated |
272 | (it defaults to deactivated on bootup and will only be activated | 272 | (it defaults to deactivated on bootup and will only be activated |
273 | if some application like powertop activates it explicitly). | 273 | if some application like powertop activates it explicitly). |
274 | 274 | ||
275 | config DEBUG_OBJECTS | 275 | config DEBUG_OBJECTS |
276 | bool "Debug object operations" | 276 | bool "Debug object operations" |
277 | depends on DEBUG_KERNEL | 277 | depends on DEBUG_KERNEL |
278 | help | 278 | help |
279 | If you say Y here, additional code will be inserted into the | 279 | If you say Y here, additional code will be inserted into the |
280 | kernel to track the life time of various objects and validate | 280 | kernel to track the life time of various objects and validate |
281 | the operations on those objects. | 281 | the operations on those objects. |
282 | 282 | ||
283 | config DEBUG_OBJECTS_SELFTEST | 283 | config DEBUG_OBJECTS_SELFTEST |
284 | bool "Debug objects selftest" | 284 | bool "Debug objects selftest" |
285 | depends on DEBUG_OBJECTS | 285 | depends on DEBUG_OBJECTS |
286 | help | 286 | help |
287 | This enables the selftest of the object debug code. | 287 | This enables the selftest of the object debug code. |
288 | 288 | ||
289 | config DEBUG_OBJECTS_FREE | 289 | config DEBUG_OBJECTS_FREE |
290 | bool "Debug objects in freed memory" | 290 | bool "Debug objects in freed memory" |
291 | depends on DEBUG_OBJECTS | 291 | depends on DEBUG_OBJECTS |
292 | help | 292 | help |
293 | This enables checks whether a k/v free operation frees an area | 293 | This enables checks whether a k/v free operation frees an area |
294 | which contains an object which has not been deactivated | 294 | which contains an object which has not been deactivated |
295 | properly. This can make kmalloc/kfree-intensive workloads | 295 | properly. This can make kmalloc/kfree-intensive workloads |
296 | much slower. | 296 | much slower. |
297 | 297 | ||
298 | config DEBUG_OBJECTS_TIMERS | 298 | config DEBUG_OBJECTS_TIMERS |
299 | bool "Debug timer objects" | 299 | bool "Debug timer objects" |
300 | depends on DEBUG_OBJECTS | 300 | depends on DEBUG_OBJECTS |
301 | help | 301 | help |
302 | If you say Y here, additional code will be inserted into the | 302 | If you say Y here, additional code will be inserted into the |
303 | timer routines to track the life time of timer objects and | 303 | timer routines to track the life time of timer objects and |
304 | validate the timer operations. | 304 | validate the timer operations. |
305 | 305 | ||
306 | config DEBUG_OBJECTS_WORK | 306 | config DEBUG_OBJECTS_WORK |
307 | bool "Debug work objects" | 307 | bool "Debug work objects" |
308 | depends on DEBUG_OBJECTS | 308 | depends on DEBUG_OBJECTS |
309 | help | 309 | help |
310 | If you say Y here, additional code will be inserted into the | 310 | If you say Y here, additional code will be inserted into the |
311 | work queue routines to track the life time of work objects and | 311 | work queue routines to track the life time of work objects and |
312 | validate the work operations. | 312 | validate the work operations. |
313 | 313 | ||
314 | config DEBUG_OBJECTS_RCU_HEAD | 314 | config DEBUG_OBJECTS_RCU_HEAD |
315 | bool "Debug RCU callbacks objects" | 315 | bool "Debug RCU callbacks objects" |
316 | depends on DEBUG_OBJECTS && PREEMPT | 316 | depends on DEBUG_OBJECTS && PREEMPT |
317 | help | 317 | help |
318 | Enable this to turn on debugging of RCU list heads (call_rcu() usage). | 318 | Enable this to turn on debugging of RCU list heads (call_rcu() usage). |
319 | 319 | ||
320 | config DEBUG_OBJECTS_PERCPU_COUNTER | ||
321 | bool "Debug percpu counter objects" | ||
322 | depends on DEBUG_OBJECTS | ||
323 | help | ||
324 | If you say Y here, additional code will be inserted into the | ||
325 | percpu counter routines to track the life time of percpu counter | ||
326 | objects and validate the percpu counter operations. | ||
327 | |||
320 | config DEBUG_OBJECTS_ENABLE_DEFAULT | 328 | config DEBUG_OBJECTS_ENABLE_DEFAULT |
321 | int "debug_objects bootup default value (0-1)" | 329 | int "debug_objects bootup default value (0-1)" |
322 | range 0 1 | 330 | range 0 1 |
323 | default "1" | 331 | default "1" |
324 | depends on DEBUG_OBJECTS | 332 | depends on DEBUG_OBJECTS |
325 | help | 333 | help |
326 | Debug objects boot parameter default value | 334 | Debug objects boot parameter default value |
327 | 335 | ||
328 | config DEBUG_SLAB | 336 | config DEBUG_SLAB |
329 | bool "Debug slab memory allocations" | 337 | bool "Debug slab memory allocations" |
330 | depends on DEBUG_KERNEL && SLAB && !KMEMCHECK | 338 | depends on DEBUG_KERNEL && SLAB && !KMEMCHECK |
331 | help | 339 | help |
332 | Say Y here to have the kernel do limited verification on memory | 340 | Say Y here to have the kernel do limited verification on memory |
333 | allocation as well as poisoning memory on free to catch use of freed | 341 | allocation as well as poisoning memory on free to catch use of freed |
334 | memory. This can make kmalloc/kfree-intensive workloads much slower. | 342 | memory. This can make kmalloc/kfree-intensive workloads much slower. |
335 | 343 | ||
336 | config DEBUG_SLAB_LEAK | 344 | config DEBUG_SLAB_LEAK |
337 | bool "Memory leak debugging" | 345 | bool "Memory leak debugging" |
338 | depends on DEBUG_SLAB | 346 | depends on DEBUG_SLAB |
339 | 347 | ||
340 | config SLUB_DEBUG_ON | 348 | config SLUB_DEBUG_ON |
341 | bool "SLUB debugging on by default" | 349 | bool "SLUB debugging on by default" |
342 | depends on SLUB && SLUB_DEBUG && !KMEMCHECK | 350 | depends on SLUB && SLUB_DEBUG && !KMEMCHECK |
343 | default n | 351 | default n |
344 | help | 352 | help |
345 | Boot with debugging on by default. SLUB boots by default with | 353 | Boot with debugging on by default. SLUB boots by default with |
346 | the runtime debug capabilities switched off. Enabling this is | 354 | the runtime debug capabilities switched off. Enabling this is |
347 | equivalent to specifying the "slub_debug" parameter on boot. | 355 | equivalent to specifying the "slub_debug" parameter on boot. |
348 | There is no support for more fine grained debug control like | 356 | There is no support for more fine grained debug control like |
349 | possible with slub_debug=xxx. SLUB debugging may be switched | 357 | possible with slub_debug=xxx. SLUB debugging may be switched |
350 | off in a kernel built with CONFIG_SLUB_DEBUG_ON by specifying | 358 | off in a kernel built with CONFIG_SLUB_DEBUG_ON by specifying |
351 | "slub_debug=-". | 359 | "slub_debug=-". |
352 | 360 | ||
353 | config SLUB_STATS | 361 | config SLUB_STATS |
354 | default n | 362 | default n |
355 | bool "Enable SLUB performance statistics" | 363 | bool "Enable SLUB performance statistics" |
356 | depends on SLUB && SYSFS | 364 | depends on SLUB && SYSFS |
357 | help | 365 | help |
358 | SLUB statistics are useful to debug SLUBs allocation behavior in | 366 | SLUB statistics are useful to debug SLUBs allocation behavior in |
359 | order find ways to optimize the allocator. This should never be | 367 | order find ways to optimize the allocator. This should never be |
360 | enabled for production use since keeping statistics slows down | 368 | enabled for production use since keeping statistics slows down |
361 | the allocator by a few percentage points. The slabinfo command | 369 | the allocator by a few percentage points. The slabinfo command |
362 | supports the determination of the most active slabs to figure | 370 | supports the determination of the most active slabs to figure |
363 | out which slabs are relevant to a particular load. | 371 | out which slabs are relevant to a particular load. |
364 | Try running: slabinfo -DA | 372 | Try running: slabinfo -DA |
365 | 373 | ||
366 | config DEBUG_KMEMLEAK | 374 | config DEBUG_KMEMLEAK |
367 | bool "Kernel memory leak detector" | 375 | bool "Kernel memory leak detector" |
368 | depends on DEBUG_KERNEL && EXPERIMENTAL && !MEMORY_HOTPLUG && \ | 376 | depends on DEBUG_KERNEL && EXPERIMENTAL && !MEMORY_HOTPLUG && \ |
369 | (X86 || ARM || PPC || S390 || SPARC64 || SUPERH || MICROBLAZE) | 377 | (X86 || ARM || PPC || S390 || SPARC64 || SUPERH || MICROBLAZE) |
370 | 378 | ||
371 | select DEBUG_FS if SYSFS | 379 | select DEBUG_FS if SYSFS |
372 | select STACKTRACE if STACKTRACE_SUPPORT | 380 | select STACKTRACE if STACKTRACE_SUPPORT |
373 | select KALLSYMS | 381 | select KALLSYMS |
374 | select CRC32 | 382 | select CRC32 |
375 | help | 383 | help |
376 | Say Y here if you want to enable the memory leak | 384 | Say Y here if you want to enable the memory leak |
377 | detector. The memory allocation/freeing is traced in a way | 385 | detector. The memory allocation/freeing is traced in a way |
378 | similar to the Boehm's conservative garbage collector, the | 386 | similar to the Boehm's conservative garbage collector, the |
379 | difference being that the orphan objects are not freed but | 387 | difference being that the orphan objects are not freed but |
380 | only shown in /sys/kernel/debug/kmemleak. Enabling this | 388 | only shown in /sys/kernel/debug/kmemleak. Enabling this |
381 | feature will introduce an overhead to memory | 389 | feature will introduce an overhead to memory |
382 | allocations. See Documentation/kmemleak.txt for more | 390 | allocations. See Documentation/kmemleak.txt for more |
383 | details. | 391 | details. |
384 | 392 | ||
385 | Enabling DEBUG_SLAB or SLUB_DEBUG may increase the chances | 393 | Enabling DEBUG_SLAB or SLUB_DEBUG may increase the chances |
386 | of finding leaks due to the slab objects poisoning. | 394 | of finding leaks due to the slab objects poisoning. |
387 | 395 | ||
388 | In order to access the kmemleak file, debugfs needs to be | 396 | In order to access the kmemleak file, debugfs needs to be |
389 | mounted (usually at /sys/kernel/debug). | 397 | mounted (usually at /sys/kernel/debug). |
390 | 398 | ||
391 | config DEBUG_KMEMLEAK_EARLY_LOG_SIZE | 399 | config DEBUG_KMEMLEAK_EARLY_LOG_SIZE |
392 | int "Maximum kmemleak early log entries" | 400 | int "Maximum kmemleak early log entries" |
393 | depends on DEBUG_KMEMLEAK | 401 | depends on DEBUG_KMEMLEAK |
394 | range 200 40000 | 402 | range 200 40000 |
395 | default 400 | 403 | default 400 |
396 | help | 404 | help |
397 | Kmemleak must track all the memory allocations to avoid | 405 | Kmemleak must track all the memory allocations to avoid |
398 | reporting false positives. Since memory may be allocated or | 406 | reporting false positives. Since memory may be allocated or |
399 | freed before kmemleak is initialised, an early log buffer is | 407 | freed before kmemleak is initialised, an early log buffer is |
400 | used to store these actions. If kmemleak reports "early log | 408 | used to store these actions. If kmemleak reports "early log |
401 | buffer exceeded", please increase this value. | 409 | buffer exceeded", please increase this value. |
402 | 410 | ||
403 | config DEBUG_KMEMLEAK_TEST | 411 | config DEBUG_KMEMLEAK_TEST |
404 | tristate "Simple test for the kernel memory leak detector" | 412 | tristate "Simple test for the kernel memory leak detector" |
405 | depends on DEBUG_KMEMLEAK | 413 | depends on DEBUG_KMEMLEAK |
406 | help | 414 | help |
407 | Say Y or M here to build a test for the kernel memory leak | 415 | Say Y or M here to build a test for the kernel memory leak |
408 | detector. This option enables a module that explicitly leaks | 416 | detector. This option enables a module that explicitly leaks |
409 | memory. | 417 | memory. |
410 | 418 | ||
411 | If unsure, say N. | 419 | If unsure, say N. |
412 | 420 | ||
413 | config DEBUG_KMEMLEAK_DEFAULT_OFF | 421 | config DEBUG_KMEMLEAK_DEFAULT_OFF |
414 | bool "Default kmemleak to off" | 422 | bool "Default kmemleak to off" |
415 | depends on DEBUG_KMEMLEAK | 423 | depends on DEBUG_KMEMLEAK |
416 | help | 424 | help |
417 | Say Y here to disable kmemleak by default. It can then be enabled | 425 | Say Y here to disable kmemleak by default. It can then be enabled |
418 | on the command line via kmemleak=on. | 426 | on the command line via kmemleak=on. |
419 | 427 | ||
420 | config DEBUG_PREEMPT | 428 | config DEBUG_PREEMPT |
421 | bool "Debug preemptible kernel" | 429 | bool "Debug preemptible kernel" |
422 | depends on DEBUG_KERNEL && PREEMPT && TRACE_IRQFLAGS_SUPPORT | 430 | depends on DEBUG_KERNEL && PREEMPT && TRACE_IRQFLAGS_SUPPORT |
423 | default y | 431 | default y |
424 | help | 432 | help |
425 | If you say Y here then the kernel will use a debug variant of the | 433 | If you say Y here then the kernel will use a debug variant of the |
426 | commonly used smp_processor_id() function and will print warnings | 434 | commonly used smp_processor_id() function and will print warnings |
427 | if kernel code uses it in a preemption-unsafe way. Also, the kernel | 435 | if kernel code uses it in a preemption-unsafe way. Also, the kernel |
428 | will detect preemption count underflows. | 436 | will detect preemption count underflows. |
429 | 437 | ||
430 | config DEBUG_RT_MUTEXES | 438 | config DEBUG_RT_MUTEXES |
431 | bool "RT Mutex debugging, deadlock detection" | 439 | bool "RT Mutex debugging, deadlock detection" |
432 | depends on DEBUG_KERNEL && RT_MUTEXES | 440 | depends on DEBUG_KERNEL && RT_MUTEXES |
433 | help | 441 | help |
434 | This allows rt mutex semantics violations and rt mutex related | 442 | This allows rt mutex semantics violations and rt mutex related |
435 | deadlocks (lockups) to be detected and reported automatically. | 443 | deadlocks (lockups) to be detected and reported automatically. |
436 | 444 | ||
437 | config DEBUG_PI_LIST | 445 | config DEBUG_PI_LIST |
438 | bool | 446 | bool |
439 | default y | 447 | default y |
440 | depends on DEBUG_RT_MUTEXES | 448 | depends on DEBUG_RT_MUTEXES |
441 | 449 | ||
442 | config RT_MUTEX_TESTER | 450 | config RT_MUTEX_TESTER |
443 | bool "Built-in scriptable tester for rt-mutexes" | 451 | bool "Built-in scriptable tester for rt-mutexes" |
444 | depends on DEBUG_KERNEL && RT_MUTEXES | 452 | depends on DEBUG_KERNEL && RT_MUTEXES |
445 | help | 453 | help |
446 | This option enables a rt-mutex tester. | 454 | This option enables a rt-mutex tester. |
447 | 455 | ||
448 | config DEBUG_SPINLOCK | 456 | config DEBUG_SPINLOCK |
449 | bool "Spinlock and rw-lock debugging: basic checks" | 457 | bool "Spinlock and rw-lock debugging: basic checks" |
450 | depends on DEBUG_KERNEL | 458 | depends on DEBUG_KERNEL |
451 | help | 459 | help |
452 | Say Y here and build SMP to catch missing spinlock initialization | 460 | Say Y here and build SMP to catch missing spinlock initialization |
453 | and certain other kinds of spinlock errors commonly made. This is | 461 | and certain other kinds of spinlock errors commonly made. This is |
454 | best used in conjunction with the NMI watchdog so that spinlock | 462 | best used in conjunction with the NMI watchdog so that spinlock |
455 | deadlocks are also debuggable. | 463 | deadlocks are also debuggable. |
456 | 464 | ||
457 | config DEBUG_MUTEXES | 465 | config DEBUG_MUTEXES |
458 | bool "Mutex debugging: basic checks" | 466 | bool "Mutex debugging: basic checks" |
459 | depends on DEBUG_KERNEL | 467 | depends on DEBUG_KERNEL |
460 | help | 468 | help |
461 | This feature allows mutex semantics violations to be detected and | 469 | This feature allows mutex semantics violations to be detected and |
462 | reported. | 470 | reported. |
463 | 471 | ||
464 | config BKL | 472 | config BKL |
465 | bool "Big Kernel Lock" if (SMP || PREEMPT) | 473 | bool "Big Kernel Lock" if (SMP || PREEMPT) |
466 | default y | 474 | default y |
467 | help | 475 | help |
468 | This is the traditional lock that is used in old code instead | 476 | This is the traditional lock that is used in old code instead |
469 | of proper locking. All drivers that use the BKL should depend | 477 | of proper locking. All drivers that use the BKL should depend |
470 | on this symbol. | 478 | on this symbol. |
471 | Say Y here unless you are working on removing the BKL. | 479 | Say Y here unless you are working on removing the BKL. |
472 | 480 | ||
473 | config DEBUG_LOCK_ALLOC | 481 | config DEBUG_LOCK_ALLOC |
474 | bool "Lock debugging: detect incorrect freeing of live locks" | 482 | bool "Lock debugging: detect incorrect freeing of live locks" |
475 | depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT | 483 | depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT |
476 | select DEBUG_SPINLOCK | 484 | select DEBUG_SPINLOCK |
477 | select DEBUG_MUTEXES | 485 | select DEBUG_MUTEXES |
478 | select LOCKDEP | 486 | select LOCKDEP |
479 | help | 487 | help |
480 | This feature will check whether any held lock (spinlock, rwlock, | 488 | This feature will check whether any held lock (spinlock, rwlock, |
481 | mutex or rwsem) is incorrectly freed by the kernel, via any of the | 489 | mutex or rwsem) is incorrectly freed by the kernel, via any of the |
482 | memory-freeing routines (kfree(), kmem_cache_free(), free_pages(), | 490 | memory-freeing routines (kfree(), kmem_cache_free(), free_pages(), |
483 | vfree(), etc.), whether a live lock is incorrectly reinitialized via | 491 | vfree(), etc.), whether a live lock is incorrectly reinitialized via |
484 | spin_lock_init()/mutex_init()/etc., or whether there is any lock | 492 | spin_lock_init()/mutex_init()/etc., or whether there is any lock |
485 | held during task exit. | 493 | held during task exit. |
486 | 494 | ||
487 | config PROVE_LOCKING | 495 | config PROVE_LOCKING |
488 | bool "Lock debugging: prove locking correctness" | 496 | bool "Lock debugging: prove locking correctness" |
489 | depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT | 497 | depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT |
490 | select LOCKDEP | 498 | select LOCKDEP |
491 | select DEBUG_SPINLOCK | 499 | select DEBUG_SPINLOCK |
492 | select DEBUG_MUTEXES | 500 | select DEBUG_MUTEXES |
493 | select DEBUG_LOCK_ALLOC | 501 | select DEBUG_LOCK_ALLOC |
494 | select TRACE_IRQFLAGS | 502 | select TRACE_IRQFLAGS |
495 | default n | 503 | default n |
496 | help | 504 | help |
497 | This feature enables the kernel to prove that all locking | 505 | This feature enables the kernel to prove that all locking |
498 | that occurs in the kernel runtime is mathematically | 506 | that occurs in the kernel runtime is mathematically |
499 | correct: that under no circumstance could an arbitrary (and | 507 | correct: that under no circumstance could an arbitrary (and |
500 | not yet triggered) combination of observed locking | 508 | not yet triggered) combination of observed locking |
501 | sequences (on an arbitrary number of CPUs, running an | 509 | sequences (on an arbitrary number of CPUs, running an |
502 | arbitrary number of tasks and interrupt contexts) cause a | 510 | arbitrary number of tasks and interrupt contexts) cause a |
503 | deadlock. | 511 | deadlock. |
504 | 512 | ||
505 | In short, this feature enables the kernel to report locking | 513 | In short, this feature enables the kernel to report locking |
506 | related deadlocks before they actually occur. | 514 | related deadlocks before they actually occur. |
507 | 515 | ||
508 | The proof does not depend on how hard and complex a | 516 | The proof does not depend on how hard and complex a |
509 | deadlock scenario would be to trigger: how many | 517 | deadlock scenario would be to trigger: how many |
510 | participant CPUs, tasks and irq-contexts would be needed | 518 | participant CPUs, tasks and irq-contexts would be needed |
511 | for it to trigger. The proof also does not depend on | 519 | for it to trigger. The proof also does not depend on |
512 | timing: if a race and a resulting deadlock is possible | 520 | timing: if a race and a resulting deadlock is possible |
513 | theoretically (no matter how unlikely the race scenario | 521 | theoretically (no matter how unlikely the race scenario |
514 | is), it will be proven so and will immediately be | 522 | is), it will be proven so and will immediately be |
515 | reported by the kernel (once the event is observed that | 523 | reported by the kernel (once the event is observed that |
516 | makes the deadlock theoretically possible). | 524 | makes the deadlock theoretically possible). |
517 | 525 | ||
518 | If a deadlock is impossible (i.e. the locking rules, as | 526 | If a deadlock is impossible (i.e. the locking rules, as |
519 | observed by the kernel, are mathematically correct), the | 527 | observed by the kernel, are mathematically correct), the |
520 | kernel reports nothing. | 528 | kernel reports nothing. |
521 | 529 | ||
522 | NOTE: this feature can also be enabled for rwlocks, mutexes | 530 | NOTE: this feature can also be enabled for rwlocks, mutexes |
523 | and rwsems - in which case all dependencies between these | 531 | and rwsems - in which case all dependencies between these |
524 | different locking variants are observed and mapped too, and | 532 | different locking variants are observed and mapped too, and |
525 | the proof of observed correctness is also maintained for an | 533 | the proof of observed correctness is also maintained for an |
526 | arbitrary combination of these separate locking variants. | 534 | arbitrary combination of these separate locking variants. |
527 | 535 | ||
528 | For more details, see Documentation/lockdep-design.txt. | 536 | For more details, see Documentation/lockdep-design.txt. |
529 | 537 | ||
530 | config PROVE_RCU | 538 | config PROVE_RCU |
531 | bool "RCU debugging: prove RCU correctness" | 539 | bool "RCU debugging: prove RCU correctness" |
532 | depends on PROVE_LOCKING | 540 | depends on PROVE_LOCKING |
533 | default n | 541 | default n |
534 | help | 542 | help |
535 | This feature enables lockdep extensions that check for correct | 543 | This feature enables lockdep extensions that check for correct |
536 | use of RCU APIs. This is currently under development. Say Y | 544 | use of RCU APIs. This is currently under development. Say Y |
537 | if you want to debug RCU usage or help work on the PROVE_RCU | 545 | if you want to debug RCU usage or help work on the PROVE_RCU |
538 | feature. | 546 | feature. |
539 | 547 | ||
540 | Say N if you are unsure. | 548 | Say N if you are unsure. |
541 | 549 | ||
542 | config PROVE_RCU_REPEATEDLY | 550 | config PROVE_RCU_REPEATEDLY |
543 | bool "RCU debugging: don't disable PROVE_RCU on first splat" | 551 | bool "RCU debugging: don't disable PROVE_RCU on first splat" |
544 | depends on PROVE_RCU | 552 | depends on PROVE_RCU |
545 | default n | 553 | default n |
546 | help | 554 | help |
547 | By itself, PROVE_RCU will disable checking upon issuing the | 555 | By itself, PROVE_RCU will disable checking upon issuing the |
548 | first warning (or "splat"). This feature prevents such | 556 | first warning (or "splat"). This feature prevents such |
549 | disabling, allowing multiple RCU-lockdep warnings to be printed | 557 | disabling, allowing multiple RCU-lockdep warnings to be printed |
550 | on a single reboot. | 558 | on a single reboot. |
551 | 559 | ||
552 | Say Y to allow multiple RCU-lockdep warnings per boot. | 560 | Say Y to allow multiple RCU-lockdep warnings per boot. |
553 | 561 | ||
554 | Say N if you are unsure. | 562 | Say N if you are unsure. |
555 | 563 | ||
556 | config SPARSE_RCU_POINTER | 564 | config SPARSE_RCU_POINTER |
557 | bool "RCU debugging: sparse-based checks for pointer usage" | 565 | bool "RCU debugging: sparse-based checks for pointer usage" |
558 | default n | 566 | default n |
559 | help | 567 | help |
560 | This feature enables the __rcu sparse annotation for | 568 | This feature enables the __rcu sparse annotation for |
561 | RCU-protected pointers. This annotation will cause sparse | 569 | RCU-protected pointers. This annotation will cause sparse |
562 | to flag any non-RCU used of annotated pointers. This can be | 570 | to flag any non-RCU used of annotated pointers. This can be |
563 | helpful when debugging RCU usage. Please note that this feature | 571 | helpful when debugging RCU usage. Please note that this feature |
564 | is not intended to enforce code cleanliness; it is instead merely | 572 | is not intended to enforce code cleanliness; it is instead merely |
565 | a debugging aid. | 573 | a debugging aid. |
566 | 574 | ||
567 | Say Y to make sparse flag questionable use of RCU-protected pointers | 575 | Say Y to make sparse flag questionable use of RCU-protected pointers |
568 | 576 | ||
569 | Say N if you are unsure. | 577 | Say N if you are unsure. |
570 | 578 | ||
571 | config LOCKDEP | 579 | config LOCKDEP |
572 | bool | 580 | bool |
573 | depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT | 581 | depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT |
574 | select STACKTRACE | 582 | select STACKTRACE |
575 | select FRAME_POINTER if !MIPS && !PPC && !ARM_UNWIND && !S390 && !MICROBLAZE | 583 | select FRAME_POINTER if !MIPS && !PPC && !ARM_UNWIND && !S390 && !MICROBLAZE |
576 | select KALLSYMS | 584 | select KALLSYMS |
577 | select KALLSYMS_ALL | 585 | select KALLSYMS_ALL |
578 | 586 | ||
579 | config LOCK_STAT | 587 | config LOCK_STAT |
580 | bool "Lock usage statistics" | 588 | bool "Lock usage statistics" |
581 | depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT | 589 | depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT |
582 | select LOCKDEP | 590 | select LOCKDEP |
583 | select DEBUG_SPINLOCK | 591 | select DEBUG_SPINLOCK |
584 | select DEBUG_MUTEXES | 592 | select DEBUG_MUTEXES |
585 | select DEBUG_LOCK_ALLOC | 593 | select DEBUG_LOCK_ALLOC |
586 | default n | 594 | default n |
587 | help | 595 | help |
588 | This feature enables tracking lock contention points | 596 | This feature enables tracking lock contention points |
589 | 597 | ||
590 | For more details, see Documentation/lockstat.txt | 598 | For more details, see Documentation/lockstat.txt |
591 | 599 | ||
592 | This also enables lock events required by "perf lock", | 600 | This also enables lock events required by "perf lock", |
593 | subcommand of perf. | 601 | subcommand of perf. |
594 | If you want to use "perf lock", you also need to turn on | 602 | If you want to use "perf lock", you also need to turn on |
595 | CONFIG_EVENT_TRACING. | 603 | CONFIG_EVENT_TRACING. |
596 | 604 | ||
597 | CONFIG_LOCK_STAT defines "contended" and "acquired" lock events. | 605 | CONFIG_LOCK_STAT defines "contended" and "acquired" lock events. |
598 | (CONFIG_LOCKDEP defines "acquire" and "release" events.) | 606 | (CONFIG_LOCKDEP defines "acquire" and "release" events.) |
599 | 607 | ||
600 | config DEBUG_LOCKDEP | 608 | config DEBUG_LOCKDEP |
601 | bool "Lock dependency engine debugging" | 609 | bool "Lock dependency engine debugging" |
602 | depends on DEBUG_KERNEL && LOCKDEP | 610 | depends on DEBUG_KERNEL && LOCKDEP |
603 | help | 611 | help |
604 | If you say Y here, the lock dependency engine will do | 612 | If you say Y here, the lock dependency engine will do |
605 | additional runtime checks to debug itself, at the price | 613 | additional runtime checks to debug itself, at the price |
606 | of more runtime overhead. | 614 | of more runtime overhead. |
607 | 615 | ||
608 | config TRACE_IRQFLAGS | 616 | config TRACE_IRQFLAGS |
609 | bool | 617 | bool |
610 | help | 618 | help |
611 | Enables hooks to interrupt enabling and disabling for | 619 | Enables hooks to interrupt enabling and disabling for |
612 | either tracing or lock debugging. | 620 | either tracing or lock debugging. |
613 | 621 | ||
614 | config DEBUG_SPINLOCK_SLEEP | 622 | config DEBUG_SPINLOCK_SLEEP |
615 | bool "Spinlock debugging: sleep-inside-spinlock checking" | 623 | bool "Spinlock debugging: sleep-inside-spinlock checking" |
616 | depends on DEBUG_KERNEL | 624 | depends on DEBUG_KERNEL |
617 | help | 625 | help |
618 | If you say Y here, various routines which may sleep will become very | 626 | If you say Y here, various routines which may sleep will become very |
619 | noisy if they are called with a spinlock held. | 627 | noisy if they are called with a spinlock held. |
620 | 628 | ||
621 | config DEBUG_LOCKING_API_SELFTESTS | 629 | config DEBUG_LOCKING_API_SELFTESTS |
622 | bool "Locking API boot-time self-tests" | 630 | bool "Locking API boot-time self-tests" |
623 | depends on DEBUG_KERNEL | 631 | depends on DEBUG_KERNEL |
624 | help | 632 | help |
625 | Say Y here if you want the kernel to run a short self-test during | 633 | Say Y here if you want the kernel to run a short self-test during |
626 | bootup. The self-test checks whether common types of locking bugs | 634 | bootup. The self-test checks whether common types of locking bugs |
627 | are detected by debugging mechanisms or not. (if you disable | 635 | are detected by debugging mechanisms or not. (if you disable |
628 | lock debugging then those bugs wont be detected of course.) | 636 | lock debugging then those bugs wont be detected of course.) |
629 | The following locking APIs are covered: spinlocks, rwlocks, | 637 | The following locking APIs are covered: spinlocks, rwlocks, |
630 | mutexes and rwsems. | 638 | mutexes and rwsems. |
631 | 639 | ||
632 | config STACKTRACE | 640 | config STACKTRACE |
633 | bool | 641 | bool |
634 | depends on STACKTRACE_SUPPORT | 642 | depends on STACKTRACE_SUPPORT |
635 | 643 | ||
636 | config DEBUG_KOBJECT | 644 | config DEBUG_KOBJECT |
637 | bool "kobject debugging" | 645 | bool "kobject debugging" |
638 | depends on DEBUG_KERNEL | 646 | depends on DEBUG_KERNEL |
639 | help | 647 | help |
640 | If you say Y here, some extra kobject debugging messages will be sent | 648 | If you say Y here, some extra kobject debugging messages will be sent |
641 | to the syslog. | 649 | to the syslog. |
642 | 650 | ||
643 | config DEBUG_HIGHMEM | 651 | config DEBUG_HIGHMEM |
644 | bool "Highmem debugging" | 652 | bool "Highmem debugging" |
645 | depends on DEBUG_KERNEL && HIGHMEM | 653 | depends on DEBUG_KERNEL && HIGHMEM |
646 | help | 654 | help |
647 | This options enables addition error checking for high memory systems. | 655 | This options enables addition error checking for high memory systems. |
648 | Disable for production systems. | 656 | Disable for production systems. |
649 | 657 | ||
650 | config DEBUG_BUGVERBOSE | 658 | config DEBUG_BUGVERBOSE |
651 | bool "Verbose BUG() reporting (adds 70K)" if DEBUG_KERNEL && EMBEDDED | 659 | bool "Verbose BUG() reporting (adds 70K)" if DEBUG_KERNEL && EMBEDDED |
652 | depends on BUG | 660 | depends on BUG |
653 | depends on ARM || AVR32 || M32R || M68K || SPARC32 || SPARC64 || \ | 661 | depends on ARM || AVR32 || M32R || M68K || SPARC32 || SPARC64 || \ |
654 | FRV || SUPERH || GENERIC_BUG || BLACKFIN || MN10300 | 662 | FRV || SUPERH || GENERIC_BUG || BLACKFIN || MN10300 |
655 | default y | 663 | default y |
656 | help | 664 | help |
657 | Say Y here to make BUG() panics output the file name and line number | 665 | Say Y here to make BUG() panics output the file name and line number |
658 | of the BUG call as well as the EIP and oops trace. This aids | 666 | of the BUG call as well as the EIP and oops trace. This aids |
659 | debugging but costs about 70-100K of memory. | 667 | debugging but costs about 70-100K of memory. |
660 | 668 | ||
661 | config DEBUG_INFO | 669 | config DEBUG_INFO |
662 | bool "Compile the kernel with debug info" | 670 | bool "Compile the kernel with debug info" |
663 | depends on DEBUG_KERNEL | 671 | depends on DEBUG_KERNEL |
664 | help | 672 | help |
665 | If you say Y here the resulting kernel image will include | 673 | If you say Y here the resulting kernel image will include |
666 | debugging info resulting in a larger kernel image. | 674 | debugging info resulting in a larger kernel image. |
667 | This adds debug symbols to the kernel and modules (gcc -g), and | 675 | This adds debug symbols to the kernel and modules (gcc -g), and |
668 | is needed if you intend to use kernel crashdump or binary object | 676 | is needed if you intend to use kernel crashdump or binary object |
669 | tools like crash, kgdb, LKCD, gdb, etc on the kernel. | 677 | tools like crash, kgdb, LKCD, gdb, etc on the kernel. |
670 | Say Y here only if you plan to debug the kernel. | 678 | Say Y here only if you plan to debug the kernel. |
671 | 679 | ||
672 | If unsure, say N. | 680 | If unsure, say N. |
673 | 681 | ||
674 | config DEBUG_INFO_REDUCED | 682 | config DEBUG_INFO_REDUCED |
675 | bool "Reduce debugging information" | 683 | bool "Reduce debugging information" |
676 | depends on DEBUG_INFO | 684 | depends on DEBUG_INFO |
677 | help | 685 | help |
678 | If you say Y here gcc is instructed to generate less debugging | 686 | If you say Y here gcc is instructed to generate less debugging |
679 | information for structure types. This means that tools that | 687 | information for structure types. This means that tools that |
680 | need full debugging information (like kgdb or systemtap) won't | 688 | need full debugging information (like kgdb or systemtap) won't |
681 | be happy. But if you merely need debugging information to | 689 | be happy. But if you merely need debugging information to |
682 | resolve line numbers there is no loss. Advantage is that | 690 | resolve line numbers there is no loss. Advantage is that |
683 | build directory object sizes shrink dramatically over a full | 691 | build directory object sizes shrink dramatically over a full |
684 | DEBUG_INFO build and compile times are reduced too. | 692 | DEBUG_INFO build and compile times are reduced too. |
685 | Only works with newer gcc versions. | 693 | Only works with newer gcc versions. |
686 | 694 | ||
687 | config DEBUG_VM | 695 | config DEBUG_VM |
688 | bool "Debug VM" | 696 | bool "Debug VM" |
689 | depends on DEBUG_KERNEL | 697 | depends on DEBUG_KERNEL |
690 | help | 698 | help |
691 | Enable this to turn on extended checks in the virtual-memory system | 699 | Enable this to turn on extended checks in the virtual-memory system |
692 | that may impact performance. | 700 | that may impact performance. |
693 | 701 | ||
694 | If unsure, say N. | 702 | If unsure, say N. |
695 | 703 | ||
696 | config DEBUG_VIRTUAL | 704 | config DEBUG_VIRTUAL |
697 | bool "Debug VM translations" | 705 | bool "Debug VM translations" |
698 | depends on DEBUG_KERNEL && X86 | 706 | depends on DEBUG_KERNEL && X86 |
699 | help | 707 | help |
700 | Enable some costly sanity checks in virtual to page code. This can | 708 | Enable some costly sanity checks in virtual to page code. This can |
701 | catch mistakes with virt_to_page() and friends. | 709 | catch mistakes with virt_to_page() and friends. |
702 | 710 | ||
703 | If unsure, say N. | 711 | If unsure, say N. |
704 | 712 | ||
705 | config DEBUG_NOMMU_REGIONS | 713 | config DEBUG_NOMMU_REGIONS |
706 | bool "Debug the global anon/private NOMMU mapping region tree" | 714 | bool "Debug the global anon/private NOMMU mapping region tree" |
707 | depends on DEBUG_KERNEL && !MMU | 715 | depends on DEBUG_KERNEL && !MMU |
708 | help | 716 | help |
709 | This option causes the global tree of anonymous and private mapping | 717 | This option causes the global tree of anonymous and private mapping |
710 | regions to be regularly checked for invalid topology. | 718 | regions to be regularly checked for invalid topology. |
711 | 719 | ||
712 | config DEBUG_WRITECOUNT | 720 | config DEBUG_WRITECOUNT |
713 | bool "Debug filesystem writers count" | 721 | bool "Debug filesystem writers count" |
714 | depends on DEBUG_KERNEL | 722 | depends on DEBUG_KERNEL |
715 | help | 723 | help |
716 | Enable this to catch wrong use of the writers count in struct | 724 | Enable this to catch wrong use of the writers count in struct |
717 | vfsmount. This will increase the size of each file struct by | 725 | vfsmount. This will increase the size of each file struct by |
718 | 32 bits. | 726 | 32 bits. |
719 | 727 | ||
720 | If unsure, say N. | 728 | If unsure, say N. |
721 | 729 | ||
722 | config DEBUG_MEMORY_INIT | 730 | config DEBUG_MEMORY_INIT |
723 | bool "Debug memory initialisation" if EMBEDDED | 731 | bool "Debug memory initialisation" if EMBEDDED |
724 | default !EMBEDDED | 732 | default !EMBEDDED |
725 | help | 733 | help |
726 | Enable this for additional checks during memory initialisation. | 734 | Enable this for additional checks during memory initialisation. |
727 | The sanity checks verify aspects of the VM such as the memory model | 735 | The sanity checks verify aspects of the VM such as the memory model |
728 | and other information provided by the architecture. Verbose | 736 | and other information provided by the architecture. Verbose |
729 | information will be printed at KERN_DEBUG loglevel depending | 737 | information will be printed at KERN_DEBUG loglevel depending |
730 | on the mminit_loglevel= command-line option. | 738 | on the mminit_loglevel= command-line option. |
731 | 739 | ||
732 | If unsure, say Y | 740 | If unsure, say Y |
733 | 741 | ||
734 | config DEBUG_LIST | 742 | config DEBUG_LIST |
735 | bool "Debug linked list manipulation" | 743 | bool "Debug linked list manipulation" |
736 | depends on DEBUG_KERNEL | 744 | depends on DEBUG_KERNEL |
737 | help | 745 | help |
738 | Enable this to turn on extended checks in the linked-list | 746 | Enable this to turn on extended checks in the linked-list |
739 | walking routines. | 747 | walking routines. |
740 | 748 | ||
741 | If unsure, say N. | 749 | If unsure, say N. |
742 | 750 | ||
743 | config DEBUG_SG | 751 | config DEBUG_SG |
744 | bool "Debug SG table operations" | 752 | bool "Debug SG table operations" |
745 | depends on DEBUG_KERNEL | 753 | depends on DEBUG_KERNEL |
746 | help | 754 | help |
747 | Enable this to turn on checks on scatter-gather tables. This can | 755 | Enable this to turn on checks on scatter-gather tables. This can |
748 | help find problems with drivers that do not properly initialize | 756 | help find problems with drivers that do not properly initialize |
749 | their sg tables. | 757 | their sg tables. |
750 | 758 | ||
751 | If unsure, say N. | 759 | If unsure, say N. |
752 | 760 | ||
753 | config DEBUG_NOTIFIERS | 761 | config DEBUG_NOTIFIERS |
754 | bool "Debug notifier call chains" | 762 | bool "Debug notifier call chains" |
755 | depends on DEBUG_KERNEL | 763 | depends on DEBUG_KERNEL |
756 | help | 764 | help |
757 | Enable this to turn on sanity checking for notifier call chains. | 765 | Enable this to turn on sanity checking for notifier call chains. |
758 | This is most useful for kernel developers to make sure that | 766 | This is most useful for kernel developers to make sure that |
759 | modules properly unregister themselves from notifier chains. | 767 | modules properly unregister themselves from notifier chains. |
760 | This is a relatively cheap check but if you care about maximum | 768 | This is a relatively cheap check but if you care about maximum |
761 | performance, say N. | 769 | performance, say N. |
762 | 770 | ||
763 | config DEBUG_CREDENTIALS | 771 | config DEBUG_CREDENTIALS |
764 | bool "Debug credential management" | 772 | bool "Debug credential management" |
765 | depends on DEBUG_KERNEL | 773 | depends on DEBUG_KERNEL |
766 | help | 774 | help |
767 | Enable this to turn on some debug checking for credential | 775 | Enable this to turn on some debug checking for credential |
768 | management. The additional code keeps track of the number of | 776 | management. The additional code keeps track of the number of |
769 | pointers from task_structs to any given cred struct, and checks to | 777 | pointers from task_structs to any given cred struct, and checks to |
770 | see that this number never exceeds the usage count of the cred | 778 | see that this number never exceeds the usage count of the cred |
771 | struct. | 779 | struct. |
772 | 780 | ||
773 | Furthermore, if SELinux is enabled, this also checks that the | 781 | Furthermore, if SELinux is enabled, this also checks that the |
774 | security pointer in the cred struct is never seen to be invalid. | 782 | security pointer in the cred struct is never seen to be invalid. |
775 | 783 | ||
776 | If unsure, say N. | 784 | If unsure, say N. |
777 | 785 | ||
778 | # | 786 | # |
779 | # Select this config option from the architecture Kconfig, if it | 787 | # Select this config option from the architecture Kconfig, if it |
780 | # it is preferred to always offer frame pointers as a config | 788 | # it is preferred to always offer frame pointers as a config |
781 | # option on the architecture (regardless of KERNEL_DEBUG): | 789 | # option on the architecture (regardless of KERNEL_DEBUG): |
782 | # | 790 | # |
783 | config ARCH_WANT_FRAME_POINTERS | 791 | config ARCH_WANT_FRAME_POINTERS |
784 | bool | 792 | bool |
785 | help | 793 | help |
786 | 794 | ||
787 | config FRAME_POINTER | 795 | config FRAME_POINTER |
788 | bool "Compile the kernel with frame pointers" | 796 | bool "Compile the kernel with frame pointers" |
789 | depends on DEBUG_KERNEL && \ | 797 | depends on DEBUG_KERNEL && \ |
790 | (CRIS || M68K || M68KNOMMU || FRV || UML || \ | 798 | (CRIS || M68K || M68KNOMMU || FRV || UML || \ |
791 | AVR32 || SUPERH || BLACKFIN || MN10300) || \ | 799 | AVR32 || SUPERH || BLACKFIN || MN10300) || \ |
792 | ARCH_WANT_FRAME_POINTERS | 800 | ARCH_WANT_FRAME_POINTERS |
793 | default y if (DEBUG_INFO && UML) || ARCH_WANT_FRAME_POINTERS | 801 | default y if (DEBUG_INFO && UML) || ARCH_WANT_FRAME_POINTERS |
794 | help | 802 | help |
795 | If you say Y here the resulting kernel image will be slightly | 803 | If you say Y here the resulting kernel image will be slightly |
796 | larger and slower, but it gives very useful debugging information | 804 | larger and slower, but it gives very useful debugging information |
797 | in case of kernel bugs. (precise oopses/stacktraces/warnings) | 805 | in case of kernel bugs. (precise oopses/stacktraces/warnings) |
798 | 806 | ||
799 | config BOOT_PRINTK_DELAY | 807 | config BOOT_PRINTK_DELAY |
800 | bool "Delay each boot printk message by N milliseconds" | 808 | bool "Delay each boot printk message by N milliseconds" |
801 | depends on DEBUG_KERNEL && PRINTK && GENERIC_CALIBRATE_DELAY | 809 | depends on DEBUG_KERNEL && PRINTK && GENERIC_CALIBRATE_DELAY |
802 | help | 810 | help |
803 | This build option allows you to read kernel boot messages | 811 | This build option allows you to read kernel boot messages |
804 | by inserting a short delay after each one. The delay is | 812 | by inserting a short delay after each one. The delay is |
805 | specified in milliseconds on the kernel command line, | 813 | specified in milliseconds on the kernel command line, |
806 | using "boot_delay=N". | 814 | using "boot_delay=N". |
807 | 815 | ||
808 | It is likely that you would also need to use "lpj=M" to preset | 816 | It is likely that you would also need to use "lpj=M" to preset |
809 | the "loops per jiffie" value. | 817 | the "loops per jiffie" value. |
810 | See a previous boot log for the "lpj" value to use for your | 818 | See a previous boot log for the "lpj" value to use for your |
811 | system, and then set "lpj=M" before setting "boot_delay=N". | 819 | system, and then set "lpj=M" before setting "boot_delay=N". |
812 | NOTE: Using this option may adversely affect SMP systems. | 820 | NOTE: Using this option may adversely affect SMP systems. |
813 | I.e., processors other than the first one may not boot up. | 821 | I.e., processors other than the first one may not boot up. |
814 | BOOT_PRINTK_DELAY also may cause DETECT_SOFTLOCKUP to detect | 822 | BOOT_PRINTK_DELAY also may cause DETECT_SOFTLOCKUP to detect |
815 | what it believes to be lockup conditions. | 823 | what it believes to be lockup conditions. |
816 | 824 | ||
817 | config RCU_TORTURE_TEST | 825 | config RCU_TORTURE_TEST |
818 | tristate "torture tests for RCU" | 826 | tristate "torture tests for RCU" |
819 | depends on DEBUG_KERNEL | 827 | depends on DEBUG_KERNEL |
820 | default n | 828 | default n |
821 | help | 829 | help |
822 | This option provides a kernel module that runs torture tests | 830 | This option provides a kernel module that runs torture tests |
823 | on the RCU infrastructure. The kernel module may be built | 831 | on the RCU infrastructure. The kernel module may be built |
824 | after the fact on the running kernel to be tested, if desired. | 832 | after the fact on the running kernel to be tested, if desired. |
825 | 833 | ||
826 | Say Y here if you want RCU torture tests to be built into | 834 | Say Y here if you want RCU torture tests to be built into |
827 | the kernel. | 835 | the kernel. |
828 | Say M if you want the RCU torture tests to build as a module. | 836 | Say M if you want the RCU torture tests to build as a module. |
829 | Say N if you are unsure. | 837 | Say N if you are unsure. |
830 | 838 | ||
831 | config RCU_TORTURE_TEST_RUNNABLE | 839 | config RCU_TORTURE_TEST_RUNNABLE |
832 | bool "torture tests for RCU runnable by default" | 840 | bool "torture tests for RCU runnable by default" |
833 | depends on RCU_TORTURE_TEST = y | 841 | depends on RCU_TORTURE_TEST = y |
834 | default n | 842 | default n |
835 | help | 843 | help |
836 | This option provides a way to build the RCU torture tests | 844 | This option provides a way to build the RCU torture tests |
837 | directly into the kernel without them starting up at boot | 845 | directly into the kernel without them starting up at boot |
838 | time. You can use /proc/sys/kernel/rcutorture_runnable | 846 | time. You can use /proc/sys/kernel/rcutorture_runnable |
839 | to manually override this setting. This /proc file is | 847 | to manually override this setting. This /proc file is |
840 | available only when the RCU torture tests have been built | 848 | available only when the RCU torture tests have been built |
841 | into the kernel. | 849 | into the kernel. |
842 | 850 | ||
843 | Say Y here if you want the RCU torture tests to start during | 851 | Say Y here if you want the RCU torture tests to start during |
844 | boot (you probably don't). | 852 | boot (you probably don't). |
845 | Say N here if you want the RCU torture tests to start only | 853 | Say N here if you want the RCU torture tests to start only |
846 | after being manually enabled via /proc. | 854 | after being manually enabled via /proc. |
847 | 855 | ||
848 | config RCU_CPU_STALL_DETECTOR | 856 | config RCU_CPU_STALL_DETECTOR |
849 | bool "Check for stalled CPUs delaying RCU grace periods" | 857 | bool "Check for stalled CPUs delaying RCU grace periods" |
850 | depends on TREE_RCU || TREE_PREEMPT_RCU | 858 | depends on TREE_RCU || TREE_PREEMPT_RCU |
851 | default y | 859 | default y |
852 | help | 860 | help |
853 | This option causes RCU to printk information on which | 861 | This option causes RCU to printk information on which |
854 | CPUs are delaying the current grace period, but only when | 862 | CPUs are delaying the current grace period, but only when |
855 | the grace period extends for excessive time periods. | 863 | the grace period extends for excessive time periods. |
856 | 864 | ||
857 | Say N if you want to disable such checks. | 865 | Say N if you want to disable such checks. |
858 | 866 | ||
859 | Say Y if you are unsure. | 867 | Say Y if you are unsure. |
860 | 868 | ||
861 | config RCU_CPU_STALL_TIMEOUT | 869 | config RCU_CPU_STALL_TIMEOUT |
862 | int "RCU CPU stall timeout in seconds" | 870 | int "RCU CPU stall timeout in seconds" |
863 | depends on RCU_CPU_STALL_DETECTOR | 871 | depends on RCU_CPU_STALL_DETECTOR |
864 | range 3 300 | 872 | range 3 300 |
865 | default 60 | 873 | default 60 |
866 | help | 874 | help |
867 | If a given RCU grace period extends more than the specified | 875 | If a given RCU grace period extends more than the specified |
868 | number of seconds, a CPU stall warning is printed. If the | 876 | number of seconds, a CPU stall warning is printed. If the |
869 | RCU grace period persists, additional CPU stall warnings are | 877 | RCU grace period persists, additional CPU stall warnings are |
870 | printed at more widely spaced intervals. | 878 | printed at more widely spaced intervals. |
871 | 879 | ||
872 | config RCU_CPU_STALL_DETECTOR_RUNNABLE | 880 | config RCU_CPU_STALL_DETECTOR_RUNNABLE |
873 | bool "RCU CPU stall checking starts automatically at boot" | 881 | bool "RCU CPU stall checking starts automatically at boot" |
874 | depends on RCU_CPU_STALL_DETECTOR | 882 | depends on RCU_CPU_STALL_DETECTOR |
875 | default y | 883 | default y |
876 | help | 884 | help |
877 | If set, start checking for RCU CPU stalls immediately on | 885 | If set, start checking for RCU CPU stalls immediately on |
878 | boot. Otherwise, RCU CPU stall checking must be manually | 886 | boot. Otherwise, RCU CPU stall checking must be manually |
879 | enabled. | 887 | enabled. |
880 | 888 | ||
881 | Say Y if you are unsure. | 889 | Say Y if you are unsure. |
882 | 890 | ||
883 | Say N if you wish to suppress RCU CPU stall checking during boot. | 891 | Say N if you wish to suppress RCU CPU stall checking during boot. |
884 | 892 | ||
885 | config RCU_CPU_STALL_VERBOSE | 893 | config RCU_CPU_STALL_VERBOSE |
886 | bool "Print additional per-task information for RCU_CPU_STALL_DETECTOR" | 894 | bool "Print additional per-task information for RCU_CPU_STALL_DETECTOR" |
887 | depends on RCU_CPU_STALL_DETECTOR && TREE_PREEMPT_RCU | 895 | depends on RCU_CPU_STALL_DETECTOR && TREE_PREEMPT_RCU |
888 | default y | 896 | default y |
889 | help | 897 | help |
890 | This option causes RCU to printk detailed per-task information | 898 | This option causes RCU to printk detailed per-task information |
891 | for any tasks that are stalling the current RCU grace period. | 899 | for any tasks that are stalling the current RCU grace period. |
892 | 900 | ||
893 | Say N if you are unsure. | 901 | Say N if you are unsure. |
894 | 902 | ||
895 | Say Y if you want to enable such checks. | 903 | Say Y if you want to enable such checks. |
896 | 904 | ||
897 | config KPROBES_SANITY_TEST | 905 | config KPROBES_SANITY_TEST |
898 | bool "Kprobes sanity tests" | 906 | bool "Kprobes sanity tests" |
899 | depends on DEBUG_KERNEL | 907 | depends on DEBUG_KERNEL |
900 | depends on KPROBES | 908 | depends on KPROBES |
901 | default n | 909 | default n |
902 | help | 910 | help |
903 | This option provides for testing basic kprobes functionality on | 911 | This option provides for testing basic kprobes functionality on |
904 | boot. A sample kprobe, jprobe and kretprobe are inserted and | 912 | boot. A sample kprobe, jprobe and kretprobe are inserted and |
905 | verified for functionality. | 913 | verified for functionality. |
906 | 914 | ||
907 | Say N if you are unsure. | 915 | Say N if you are unsure. |
908 | 916 | ||
909 | config BACKTRACE_SELF_TEST | 917 | config BACKTRACE_SELF_TEST |
910 | tristate "Self test for the backtrace code" | 918 | tristate "Self test for the backtrace code" |
911 | depends on DEBUG_KERNEL | 919 | depends on DEBUG_KERNEL |
912 | default n | 920 | default n |
913 | help | 921 | help |
914 | This option provides a kernel module that can be used to test | 922 | This option provides a kernel module that can be used to test |
915 | the kernel stack backtrace code. This option is not useful | 923 | the kernel stack backtrace code. This option is not useful |
916 | for distributions or general kernels, but only for kernel | 924 | for distributions or general kernels, but only for kernel |
917 | developers working on architecture code. | 925 | developers working on architecture code. |
918 | 926 | ||
919 | Note that if you want to also test saved backtraces, you will | 927 | Note that if you want to also test saved backtraces, you will |
920 | have to enable STACKTRACE as well. | 928 | have to enable STACKTRACE as well. |
921 | 929 | ||
922 | Say N if you are unsure. | 930 | Say N if you are unsure. |
923 | 931 | ||
924 | config DEBUG_BLOCK_EXT_DEVT | 932 | config DEBUG_BLOCK_EXT_DEVT |
925 | bool "Force extended block device numbers and spread them" | 933 | bool "Force extended block device numbers and spread them" |
926 | depends on DEBUG_KERNEL | 934 | depends on DEBUG_KERNEL |
927 | depends on BLOCK | 935 | depends on BLOCK |
928 | default n | 936 | default n |
929 | help | 937 | help |
930 | BIG FAT WARNING: ENABLING THIS OPTION MIGHT BREAK BOOTING ON | 938 | BIG FAT WARNING: ENABLING THIS OPTION MIGHT BREAK BOOTING ON |
931 | SOME DISTRIBUTIONS. DO NOT ENABLE THIS UNLESS YOU KNOW WHAT | 939 | SOME DISTRIBUTIONS. DO NOT ENABLE THIS UNLESS YOU KNOW WHAT |
932 | YOU ARE DOING. Distros, please enable this and fix whatever | 940 | YOU ARE DOING. Distros, please enable this and fix whatever |
933 | is broken. | 941 | is broken. |
934 | 942 | ||
935 | Conventionally, block device numbers are allocated from | 943 | Conventionally, block device numbers are allocated from |
936 | predetermined contiguous area. However, extended block area | 944 | predetermined contiguous area. However, extended block area |
937 | may introduce non-contiguous block device numbers. This | 945 | may introduce non-contiguous block device numbers. This |
938 | option forces most block device numbers to be allocated from | 946 | option forces most block device numbers to be allocated from |
939 | the extended space and spreads them to discover kernel or | 947 | the extended space and spreads them to discover kernel or |
940 | userland code paths which assume predetermined contiguous | 948 | userland code paths which assume predetermined contiguous |
941 | device number allocation. | 949 | device number allocation. |
942 | 950 | ||
943 | Note that turning on this debug option shuffles all the | 951 | Note that turning on this debug option shuffles all the |
944 | device numbers for all IDE and SCSI devices including libata | 952 | device numbers for all IDE and SCSI devices including libata |
945 | ones, so root partition specified using device number | 953 | ones, so root partition specified using device number |
946 | directly (via rdev or root=MAJ:MIN) won't work anymore. | 954 | directly (via rdev or root=MAJ:MIN) won't work anymore. |
947 | Textual device names (root=/dev/sdXn) will continue to work. | 955 | Textual device names (root=/dev/sdXn) will continue to work. |
948 | 956 | ||
949 | Say N if you are unsure. | 957 | Say N if you are unsure. |
950 | 958 | ||
951 | config DEBUG_FORCE_WEAK_PER_CPU | 959 | config DEBUG_FORCE_WEAK_PER_CPU |
952 | bool "Force weak per-cpu definitions" | 960 | bool "Force weak per-cpu definitions" |
953 | depends on DEBUG_KERNEL | 961 | depends on DEBUG_KERNEL |
954 | help | 962 | help |
955 | s390 and alpha require percpu variables in modules to be | 963 | s390 and alpha require percpu variables in modules to be |
956 | defined weak to work around addressing range issue which | 964 | defined weak to work around addressing range issue which |
957 | puts the following two restrictions on percpu variable | 965 | puts the following two restrictions on percpu variable |
958 | definitions. | 966 | definitions. |
959 | 967 | ||
960 | 1. percpu symbols must be unique whether static or not | 968 | 1. percpu symbols must be unique whether static or not |
961 | 2. percpu variables can't be defined inside a function | 969 | 2. percpu variables can't be defined inside a function |
962 | 970 | ||
963 | To ensure that generic code follows the above rules, this | 971 | To ensure that generic code follows the above rules, this |
964 | option forces all percpu variables to be defined as weak. | 972 | option forces all percpu variables to be defined as weak. |
965 | 973 | ||
966 | config LKDTM | 974 | config LKDTM |
967 | tristate "Linux Kernel Dump Test Tool Module" | 975 | tristate "Linux Kernel Dump Test Tool Module" |
968 | depends on DEBUG_FS | 976 | depends on DEBUG_FS |
969 | depends on BLOCK | 977 | depends on BLOCK |
970 | default n | 978 | default n |
971 | help | 979 | help |
972 | This module enables testing of the different dumping mechanisms by | 980 | This module enables testing of the different dumping mechanisms by |
973 | inducing system failures at predefined crash points. | 981 | inducing system failures at predefined crash points. |
974 | If you don't need it: say N | 982 | If you don't need it: say N |
975 | Choose M here to compile this code as a module. The module will be | 983 | Choose M here to compile this code as a module. The module will be |
976 | called lkdtm. | 984 | called lkdtm. |
977 | 985 | ||
978 | Documentation on how to use the module can be found in | 986 | Documentation on how to use the module can be found in |
979 | Documentation/fault-injection/provoke-crashes.txt | 987 | Documentation/fault-injection/provoke-crashes.txt |
980 | 988 | ||
981 | config CPU_NOTIFIER_ERROR_INJECT | 989 | config CPU_NOTIFIER_ERROR_INJECT |
982 | tristate "CPU notifier error injection module" | 990 | tristate "CPU notifier error injection module" |
983 | depends on HOTPLUG_CPU && DEBUG_KERNEL | 991 | depends on HOTPLUG_CPU && DEBUG_KERNEL |
984 | help | 992 | help |
985 | This option provides a kernel module that can be used to test | 993 | This option provides a kernel module that can be used to test |
986 | the error handling of the cpu notifiers | 994 | the error handling of the cpu notifiers |
987 | 995 | ||
988 | To compile this code as a module, choose M here: the module will | 996 | To compile this code as a module, choose M here: the module will |
989 | be called cpu-notifier-error-inject. | 997 | be called cpu-notifier-error-inject. |
990 | 998 | ||
991 | If unsure, say N. | 999 | If unsure, say N. |
992 | 1000 | ||
993 | config FAULT_INJECTION | 1001 | config FAULT_INJECTION |
994 | bool "Fault-injection framework" | 1002 | bool "Fault-injection framework" |
995 | depends on DEBUG_KERNEL | 1003 | depends on DEBUG_KERNEL |
996 | help | 1004 | help |
997 | Provide fault-injection framework. | 1005 | Provide fault-injection framework. |
998 | For more details, see Documentation/fault-injection/. | 1006 | For more details, see Documentation/fault-injection/. |
999 | 1007 | ||
1000 | config FAILSLAB | 1008 | config FAILSLAB |
1001 | bool "Fault-injection capability for kmalloc" | 1009 | bool "Fault-injection capability for kmalloc" |
1002 | depends on FAULT_INJECTION | 1010 | depends on FAULT_INJECTION |
1003 | depends on SLAB || SLUB | 1011 | depends on SLAB || SLUB |
1004 | help | 1012 | help |
1005 | Provide fault-injection capability for kmalloc. | 1013 | Provide fault-injection capability for kmalloc. |
1006 | 1014 | ||
1007 | config FAIL_PAGE_ALLOC | 1015 | config FAIL_PAGE_ALLOC |
1008 | bool "Fault-injection capabilitiy for alloc_pages()" | 1016 | bool "Fault-injection capabilitiy for alloc_pages()" |
1009 | depends on FAULT_INJECTION | 1017 | depends on FAULT_INJECTION |
1010 | help | 1018 | help |
1011 | Provide fault-injection capability for alloc_pages(). | 1019 | Provide fault-injection capability for alloc_pages(). |
1012 | 1020 | ||
1013 | config FAIL_MAKE_REQUEST | 1021 | config FAIL_MAKE_REQUEST |
1014 | bool "Fault-injection capability for disk IO" | 1022 | bool "Fault-injection capability for disk IO" |
1015 | depends on FAULT_INJECTION && BLOCK | 1023 | depends on FAULT_INJECTION && BLOCK |
1016 | help | 1024 | help |
1017 | Provide fault-injection capability for disk IO. | 1025 | Provide fault-injection capability for disk IO. |
1018 | 1026 | ||
1019 | config FAIL_IO_TIMEOUT | 1027 | config FAIL_IO_TIMEOUT |
1020 | bool "Fault-injection capability for faking disk interrupts" | 1028 | bool "Fault-injection capability for faking disk interrupts" |
1021 | depends on FAULT_INJECTION && BLOCK | 1029 | depends on FAULT_INJECTION && BLOCK |
1022 | help | 1030 | help |
1023 | Provide fault-injection capability on end IO handling. This | 1031 | Provide fault-injection capability on end IO handling. This |
1024 | will make the block layer "forget" an interrupt as configured, | 1032 | will make the block layer "forget" an interrupt as configured, |
1025 | thus exercising the error handling. | 1033 | thus exercising the error handling. |
1026 | 1034 | ||
1027 | Only works with drivers that use the generic timeout handling, | 1035 | Only works with drivers that use the generic timeout handling, |
1028 | for others it wont do anything. | 1036 | for others it wont do anything. |
1029 | 1037 | ||
1030 | config FAULT_INJECTION_DEBUG_FS | 1038 | config FAULT_INJECTION_DEBUG_FS |
1031 | bool "Debugfs entries for fault-injection capabilities" | 1039 | bool "Debugfs entries for fault-injection capabilities" |
1032 | depends on FAULT_INJECTION && SYSFS && DEBUG_FS | 1040 | depends on FAULT_INJECTION && SYSFS && DEBUG_FS |
1033 | help | 1041 | help |
1034 | Enable configuration of fault-injection capabilities via debugfs. | 1042 | Enable configuration of fault-injection capabilities via debugfs. |
1035 | 1043 | ||
1036 | config FAULT_INJECTION_STACKTRACE_FILTER | 1044 | config FAULT_INJECTION_STACKTRACE_FILTER |
1037 | bool "stacktrace filter for fault-injection capabilities" | 1045 | bool "stacktrace filter for fault-injection capabilities" |
1038 | depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT | 1046 | depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT |
1039 | depends on !X86_64 | 1047 | depends on !X86_64 |
1040 | select STACKTRACE | 1048 | select STACKTRACE |
1041 | select FRAME_POINTER if !PPC && !S390 && !MICROBLAZE | 1049 | select FRAME_POINTER if !PPC && !S390 && !MICROBLAZE |
1042 | help | 1050 | help |
1043 | Provide stacktrace filter for fault-injection capabilities | 1051 | Provide stacktrace filter for fault-injection capabilities |
1044 | 1052 | ||
1045 | config LATENCYTOP | 1053 | config LATENCYTOP |
1046 | bool "Latency measuring infrastructure" | 1054 | bool "Latency measuring infrastructure" |
1047 | depends on HAVE_LATENCYTOP_SUPPORT | 1055 | depends on HAVE_LATENCYTOP_SUPPORT |
1048 | depends on DEBUG_KERNEL | 1056 | depends on DEBUG_KERNEL |
1049 | depends on STACKTRACE_SUPPORT | 1057 | depends on STACKTRACE_SUPPORT |
1050 | depends on PROC_FS | 1058 | depends on PROC_FS |
1051 | select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE | 1059 | select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE |
1052 | select KALLSYMS | 1060 | select KALLSYMS |
1053 | select KALLSYMS_ALL | 1061 | select KALLSYMS_ALL |
1054 | select STACKTRACE | 1062 | select STACKTRACE |
1055 | select SCHEDSTATS | 1063 | select SCHEDSTATS |
1056 | select SCHED_DEBUG | 1064 | select SCHED_DEBUG |
1057 | help | 1065 | help |
1058 | Enable this option if you want to use the LatencyTOP tool | 1066 | Enable this option if you want to use the LatencyTOP tool |
1059 | to find out which userspace is blocking on what kernel operations. | 1067 | to find out which userspace is blocking on what kernel operations. |
1060 | 1068 | ||
1061 | config SYSCTL_SYSCALL_CHECK | 1069 | config SYSCTL_SYSCALL_CHECK |
1062 | bool "Sysctl checks" | 1070 | bool "Sysctl checks" |
1063 | depends on SYSCTL | 1071 | depends on SYSCTL |
1064 | ---help--- | 1072 | ---help--- |
1065 | sys_sysctl uses binary paths that have been found challenging | 1073 | sys_sysctl uses binary paths that have been found challenging |
1066 | to properly maintain and use. This enables checks that help | 1074 | to properly maintain and use. This enables checks that help |
1067 | you to keep things correct. | 1075 | you to keep things correct. |
1068 | 1076 | ||
1069 | source mm/Kconfig.debug | 1077 | source mm/Kconfig.debug |
1070 | source kernel/trace/Kconfig | 1078 | source kernel/trace/Kconfig |
1071 | 1079 | ||
1072 | config PROVIDE_OHCI1394_DMA_INIT | 1080 | config PROVIDE_OHCI1394_DMA_INIT |
1073 | bool "Remote debugging over FireWire early on boot" | 1081 | bool "Remote debugging over FireWire early on boot" |
1074 | depends on PCI && X86 | 1082 | depends on PCI && X86 |
1075 | help | 1083 | help |
1076 | If you want to debug problems which hang or crash the kernel early | 1084 | If you want to debug problems which hang or crash the kernel early |
1077 | on boot and the crashing machine has a FireWire port, you can use | 1085 | on boot and the crashing machine has a FireWire port, you can use |
1078 | this feature to remotely access the memory of the crashed machine | 1086 | this feature to remotely access the memory of the crashed machine |
1079 | over FireWire. This employs remote DMA as part of the OHCI1394 | 1087 | over FireWire. This employs remote DMA as part of the OHCI1394 |
1080 | specification which is now the standard for FireWire controllers. | 1088 | specification which is now the standard for FireWire controllers. |
1081 | 1089 | ||
1082 | With remote DMA, you can monitor the printk buffer remotely using | 1090 | With remote DMA, you can monitor the printk buffer remotely using |
1083 | firescope and access all memory below 4GB using fireproxy from gdb. | 1091 | firescope and access all memory below 4GB using fireproxy from gdb. |
1084 | Even controlling a kernel debugger is possible using remote DMA. | 1092 | Even controlling a kernel debugger is possible using remote DMA. |
1085 | 1093 | ||
1086 | Usage: | 1094 | Usage: |
1087 | 1095 | ||
1088 | If ohci1394_dma=early is used as boot parameter, it will initialize | 1096 | If ohci1394_dma=early is used as boot parameter, it will initialize |
1089 | all OHCI1394 controllers which are found in the PCI config space. | 1097 | all OHCI1394 controllers which are found in the PCI config space. |
1090 | 1098 | ||
1091 | As all changes to the FireWire bus such as enabling and disabling | 1099 | As all changes to the FireWire bus such as enabling and disabling |
1092 | devices cause a bus reset and thereby disable remote DMA for all | 1100 | devices cause a bus reset and thereby disable remote DMA for all |
1093 | devices, be sure to have the cable plugged and FireWire enabled on | 1101 | devices, be sure to have the cable plugged and FireWire enabled on |
1094 | the debugging host before booting the debug target for debugging. | 1102 | the debugging host before booting the debug target for debugging. |
1095 | 1103 | ||
1096 | This code (~1k) is freed after boot. By then, the firewire stack | 1104 | This code (~1k) is freed after boot. By then, the firewire stack |
1097 | in charge of the OHCI-1394 controllers should be used instead. | 1105 | in charge of the OHCI-1394 controllers should be used instead. |
1098 | 1106 | ||
1099 | See Documentation/debugging-via-ohci1394.txt for more information. | 1107 | See Documentation/debugging-via-ohci1394.txt for more information. |
1100 | 1108 | ||
1101 | config FIREWIRE_OHCI_REMOTE_DMA | 1109 | config FIREWIRE_OHCI_REMOTE_DMA |
1102 | bool "Remote debugging over FireWire with firewire-ohci" | 1110 | bool "Remote debugging over FireWire with firewire-ohci" |
1103 | depends on FIREWIRE_OHCI | 1111 | depends on FIREWIRE_OHCI |
1104 | help | 1112 | help |
1105 | This option lets you use the FireWire bus for remote debugging | 1113 | This option lets you use the FireWire bus for remote debugging |
1106 | with help of the firewire-ohci driver. It enables unfiltered | 1114 | with help of the firewire-ohci driver. It enables unfiltered |
1107 | remote DMA in firewire-ohci. | 1115 | remote DMA in firewire-ohci. |
1108 | See Documentation/debugging-via-ohci1394.txt for more information. | 1116 | See Documentation/debugging-via-ohci1394.txt for more information. |
1109 | 1117 | ||
1110 | If unsure, say N. | 1118 | If unsure, say N. |
1111 | 1119 | ||
1112 | config BUILD_DOCSRC | 1120 | config BUILD_DOCSRC |
1113 | bool "Build targets in Documentation/ tree" | 1121 | bool "Build targets in Documentation/ tree" |
1114 | depends on HEADERS_CHECK | 1122 | depends on HEADERS_CHECK |
1115 | help | 1123 | help |
1116 | This option attempts to build objects from the source files in the | 1124 | This option attempts to build objects from the source files in the |
1117 | kernel Documentation/ tree. | 1125 | kernel Documentation/ tree. |
1118 | 1126 | ||
1119 | Say N if you are unsure. | 1127 | Say N if you are unsure. |
1120 | 1128 | ||
1121 | config DYNAMIC_DEBUG | 1129 | config DYNAMIC_DEBUG |
1122 | bool "Enable dynamic printk() support" | 1130 | bool "Enable dynamic printk() support" |
1123 | default n | 1131 | default n |
1124 | depends on PRINTK | 1132 | depends on PRINTK |
1125 | depends on DEBUG_FS | 1133 | depends on DEBUG_FS |
1126 | help | 1134 | help |
1127 | 1135 | ||
1128 | Compiles debug level messages into the kernel, which would not | 1136 | Compiles debug level messages into the kernel, which would not |
1129 | otherwise be available at runtime. These messages can then be | 1137 | otherwise be available at runtime. These messages can then be |
1130 | enabled/disabled based on various levels of scope - per source file, | 1138 | enabled/disabled based on various levels of scope - per source file, |
1131 | function, module, format string, and line number. This mechanism | 1139 | function, module, format string, and line number. This mechanism |
1132 | implicitly enables all pr_debug() and dev_dbg() calls. The impact of | 1140 | implicitly enables all pr_debug() and dev_dbg() calls. The impact of |
1133 | this compile option is a larger kernel text size of about 2%. | 1141 | this compile option is a larger kernel text size of about 2%. |
1134 | 1142 | ||
1135 | Usage: | 1143 | Usage: |
1136 | 1144 | ||
1137 | Dynamic debugging is controlled via the 'dynamic_debug/control' file, | 1145 | Dynamic debugging is controlled via the 'dynamic_debug/control' file, |
1138 | which is contained in the 'debugfs' filesystem. Thus, the debugfs | 1146 | which is contained in the 'debugfs' filesystem. Thus, the debugfs |
1139 | filesystem must first be mounted before making use of this feature. | 1147 | filesystem must first be mounted before making use of this feature. |
1140 | We refer the control file as: <debugfs>/dynamic_debug/control. This | 1148 | We refer the control file as: <debugfs>/dynamic_debug/control. This |
1141 | file contains a list of the debug statements that can be enabled. The | 1149 | file contains a list of the debug statements that can be enabled. The |
1142 | format for each line of the file is: | 1150 | format for each line of the file is: |
1143 | 1151 | ||
1144 | filename:lineno [module]function flags format | 1152 | filename:lineno [module]function flags format |
1145 | 1153 | ||
1146 | filename : source file of the debug statement | 1154 | filename : source file of the debug statement |
1147 | lineno : line number of the debug statement | 1155 | lineno : line number of the debug statement |
1148 | module : module that contains the debug statement | 1156 | module : module that contains the debug statement |
1149 | function : function that contains the debug statement | 1157 | function : function that contains the debug statement |
1150 | flags : 'p' means the line is turned 'on' for printing | 1158 | flags : 'p' means the line is turned 'on' for printing |
1151 | format : the format used for the debug statement | 1159 | format : the format used for the debug statement |
1152 | 1160 | ||
1153 | From a live system: | 1161 | From a live system: |
1154 | 1162 | ||
1155 | nullarbor:~ # cat <debugfs>/dynamic_debug/control | 1163 | nullarbor:~ # cat <debugfs>/dynamic_debug/control |
1156 | # filename:lineno [module]function flags format | 1164 | # filename:lineno [module]function flags format |
1157 | fs/aio.c:222 [aio]__put_ioctx - "__put_ioctx:\040freeing\040%p\012" | 1165 | fs/aio.c:222 [aio]__put_ioctx - "__put_ioctx:\040freeing\040%p\012" |
1158 | fs/aio.c:248 [aio]ioctx_alloc - "ENOMEM:\040nr_events\040too\040high\012" | 1166 | fs/aio.c:248 [aio]ioctx_alloc - "ENOMEM:\040nr_events\040too\040high\012" |
1159 | fs/aio.c:1770 [aio]sys_io_cancel - "calling\040cancel\012" | 1167 | fs/aio.c:1770 [aio]sys_io_cancel - "calling\040cancel\012" |
1160 | 1168 | ||
1161 | Example usage: | 1169 | Example usage: |
1162 | 1170 | ||
1163 | // enable the message at line 1603 of file svcsock.c | 1171 | // enable the message at line 1603 of file svcsock.c |
1164 | nullarbor:~ # echo -n 'file svcsock.c line 1603 +p' > | 1172 | nullarbor:~ # echo -n 'file svcsock.c line 1603 +p' > |
1165 | <debugfs>/dynamic_debug/control | 1173 | <debugfs>/dynamic_debug/control |
1166 | 1174 | ||
1167 | // enable all the messages in file svcsock.c | 1175 | // enable all the messages in file svcsock.c |
1168 | nullarbor:~ # echo -n 'file svcsock.c +p' > | 1176 | nullarbor:~ # echo -n 'file svcsock.c +p' > |
1169 | <debugfs>/dynamic_debug/control | 1177 | <debugfs>/dynamic_debug/control |
1170 | 1178 | ||
1171 | // enable all the messages in the NFS server module | 1179 | // enable all the messages in the NFS server module |
1172 | nullarbor:~ # echo -n 'module nfsd +p' > | 1180 | nullarbor:~ # echo -n 'module nfsd +p' > |
1173 | <debugfs>/dynamic_debug/control | 1181 | <debugfs>/dynamic_debug/control |
1174 | 1182 | ||
1175 | // enable all 12 messages in the function svc_process() | 1183 | // enable all 12 messages in the function svc_process() |
1176 | nullarbor:~ # echo -n 'func svc_process +p' > | 1184 | nullarbor:~ # echo -n 'func svc_process +p' > |
1177 | <debugfs>/dynamic_debug/control | 1185 | <debugfs>/dynamic_debug/control |
1178 | 1186 | ||
1179 | // disable all 12 messages in the function svc_process() | 1187 | // disable all 12 messages in the function svc_process() |
1180 | nullarbor:~ # echo -n 'func svc_process -p' > | 1188 | nullarbor:~ # echo -n 'func svc_process -p' > |
1181 | <debugfs>/dynamic_debug/control | 1189 | <debugfs>/dynamic_debug/control |
1182 | 1190 | ||
1183 | See Documentation/dynamic-debug-howto.txt for additional information. | 1191 | See Documentation/dynamic-debug-howto.txt for additional information. |
1184 | 1192 | ||
1185 | config DMA_API_DEBUG | 1193 | config DMA_API_DEBUG |
1186 | bool "Enable debugging of DMA-API usage" | 1194 | bool "Enable debugging of DMA-API usage" |
1187 | depends on HAVE_DMA_API_DEBUG | 1195 | depends on HAVE_DMA_API_DEBUG |
1188 | help | 1196 | help |
1189 | Enable this option to debug the use of the DMA API by device drivers. | 1197 | Enable this option to debug the use of the DMA API by device drivers. |
1190 | With this option you will be able to detect common bugs in device | 1198 | With this option you will be able to detect common bugs in device |
1191 | drivers like double-freeing of DMA mappings or freeing mappings that | 1199 | drivers like double-freeing of DMA mappings or freeing mappings that |
1192 | were never allocated. | 1200 | were never allocated. |
1193 | This option causes a performance degredation. Use only if you want | 1201 | This option causes a performance degredation. Use only if you want |
1194 | to debug device drivers. If unsure, say N. | 1202 | to debug device drivers. If unsure, say N. |
1195 | 1203 | ||
1196 | config ATOMIC64_SELFTEST | 1204 | config ATOMIC64_SELFTEST |
1197 | bool "Perform an atomic64_t self-test at boot" | 1205 | bool "Perform an atomic64_t self-test at boot" |
1198 | help | 1206 | help |
1199 | Enable this option to test the atomic64_t functions at boot. | 1207 | Enable this option to test the atomic64_t functions at boot. |
1200 | 1208 | ||
1201 | If unsure, say N. | 1209 | If unsure, say N. |
1202 | 1210 | ||
1203 | source "samples/Kconfig" | 1211 | source "samples/Kconfig" |
1204 | 1212 | ||
1205 | source "lib/Kconfig.kgdb" | 1213 | source "lib/Kconfig.kgdb" |
1206 | 1214 | ||
1207 | source "lib/Kconfig.kmemcheck" | 1215 | source "lib/Kconfig.kmemcheck" |
1208 | 1216 |
lib/percpu_counter.c
1 | /* | 1 | /* |
2 | * Fast batching percpu counters. | 2 | * Fast batching percpu counters. |
3 | */ | 3 | */ |
4 | 4 | ||
5 | #include <linux/percpu_counter.h> | 5 | #include <linux/percpu_counter.h> |
6 | #include <linux/notifier.h> | 6 | #include <linux/notifier.h> |
7 | #include <linux/mutex.h> | 7 | #include <linux/mutex.h> |
8 | #include <linux/init.h> | 8 | #include <linux/init.h> |
9 | #include <linux/cpu.h> | 9 | #include <linux/cpu.h> |
10 | #include <linux/module.h> | 10 | #include <linux/module.h> |
11 | #include <linux/debugobjects.h> | ||
11 | 12 | ||
12 | static LIST_HEAD(percpu_counters); | 13 | static LIST_HEAD(percpu_counters); |
13 | static DEFINE_MUTEX(percpu_counters_lock); | 14 | static DEFINE_MUTEX(percpu_counters_lock); |
14 | 15 | ||
16 | #ifdef CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER | ||
17 | |||
18 | static struct debug_obj_descr percpu_counter_debug_descr; | ||
19 | |||
20 | static int percpu_counter_fixup_free(void *addr, enum debug_obj_state state) | ||
21 | { | ||
22 | struct percpu_counter *fbc = addr; | ||
23 | |||
24 | switch (state) { | ||
25 | case ODEBUG_STATE_ACTIVE: | ||
26 | percpu_counter_destroy(fbc); | ||
27 | debug_object_free(fbc, &percpu_counter_debug_descr); | ||
28 | return 1; | ||
29 | default: | ||
30 | return 0; | ||
31 | } | ||
32 | } | ||
33 | |||
34 | static struct debug_obj_descr percpu_counter_debug_descr = { | ||
35 | .name = "percpu_counter", | ||
36 | .fixup_free = percpu_counter_fixup_free, | ||
37 | }; | ||
38 | |||
39 | static inline void debug_percpu_counter_activate(struct percpu_counter *fbc) | ||
40 | { | ||
41 | debug_object_init(fbc, &percpu_counter_debug_descr); | ||
42 | debug_object_activate(fbc, &percpu_counter_debug_descr); | ||
43 | } | ||
44 | |||
45 | static inline void debug_percpu_counter_deactivate(struct percpu_counter *fbc) | ||
46 | { | ||
47 | debug_object_deactivate(fbc, &percpu_counter_debug_descr); | ||
48 | debug_object_free(fbc, &percpu_counter_debug_descr); | ||
49 | } | ||
50 | |||
51 | #else /* CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER */ | ||
52 | static inline void debug_percpu_counter_activate(struct percpu_counter *fbc) | ||
53 | { } | ||
54 | static inline void debug_percpu_counter_deactivate(struct percpu_counter *fbc) | ||
55 | { } | ||
56 | #endif /* CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER */ | ||
57 | |||
15 | void percpu_counter_set(struct percpu_counter *fbc, s64 amount) | 58 | void percpu_counter_set(struct percpu_counter *fbc, s64 amount) |
16 | { | 59 | { |
17 | int cpu; | 60 | int cpu; |
18 | 61 | ||
19 | spin_lock(&fbc->lock); | 62 | spin_lock(&fbc->lock); |
20 | for_each_possible_cpu(cpu) { | 63 | for_each_possible_cpu(cpu) { |
21 | s32 *pcount = per_cpu_ptr(fbc->counters, cpu); | 64 | s32 *pcount = per_cpu_ptr(fbc->counters, cpu); |
22 | *pcount = 0; | 65 | *pcount = 0; |
23 | } | 66 | } |
24 | fbc->count = amount; | 67 | fbc->count = amount; |
25 | spin_unlock(&fbc->lock); | 68 | spin_unlock(&fbc->lock); |
26 | } | 69 | } |
27 | EXPORT_SYMBOL(percpu_counter_set); | 70 | EXPORT_SYMBOL(percpu_counter_set); |
28 | 71 | ||
29 | void __percpu_counter_add(struct percpu_counter *fbc, s64 amount, s32 batch) | 72 | void __percpu_counter_add(struct percpu_counter *fbc, s64 amount, s32 batch) |
30 | { | 73 | { |
31 | s64 count; | 74 | s64 count; |
32 | s32 *pcount; | 75 | s32 *pcount; |
33 | int cpu = get_cpu(); | 76 | int cpu = get_cpu(); |
34 | 77 | ||
35 | pcount = per_cpu_ptr(fbc->counters, cpu); | 78 | pcount = per_cpu_ptr(fbc->counters, cpu); |
36 | count = *pcount + amount; | 79 | count = *pcount + amount; |
37 | if (count >= batch || count <= -batch) { | 80 | if (count >= batch || count <= -batch) { |
38 | spin_lock(&fbc->lock); | 81 | spin_lock(&fbc->lock); |
39 | fbc->count += count; | 82 | fbc->count += count; |
40 | *pcount = 0; | 83 | *pcount = 0; |
41 | spin_unlock(&fbc->lock); | 84 | spin_unlock(&fbc->lock); |
42 | } else { | 85 | } else { |
43 | *pcount = count; | 86 | *pcount = count; |
44 | } | 87 | } |
45 | put_cpu(); | 88 | put_cpu(); |
46 | } | 89 | } |
47 | EXPORT_SYMBOL(__percpu_counter_add); | 90 | EXPORT_SYMBOL(__percpu_counter_add); |
48 | 91 | ||
49 | /* | 92 | /* |
50 | * Add up all the per-cpu counts, return the result. This is a more accurate | 93 | * Add up all the per-cpu counts, return the result. This is a more accurate |
51 | * but much slower version of percpu_counter_read_positive() | 94 | * but much slower version of percpu_counter_read_positive() |
52 | */ | 95 | */ |
53 | s64 __percpu_counter_sum(struct percpu_counter *fbc) | 96 | s64 __percpu_counter_sum(struct percpu_counter *fbc) |
54 | { | 97 | { |
55 | s64 ret; | 98 | s64 ret; |
56 | int cpu; | 99 | int cpu; |
57 | 100 | ||
58 | spin_lock(&fbc->lock); | 101 | spin_lock(&fbc->lock); |
59 | ret = fbc->count; | 102 | ret = fbc->count; |
60 | for_each_online_cpu(cpu) { | 103 | for_each_online_cpu(cpu) { |
61 | s32 *pcount = per_cpu_ptr(fbc->counters, cpu); | 104 | s32 *pcount = per_cpu_ptr(fbc->counters, cpu); |
62 | ret += *pcount; | 105 | ret += *pcount; |
63 | } | 106 | } |
64 | spin_unlock(&fbc->lock); | 107 | spin_unlock(&fbc->lock); |
65 | return ret; | 108 | return ret; |
66 | } | 109 | } |
67 | EXPORT_SYMBOL(__percpu_counter_sum); | 110 | EXPORT_SYMBOL(__percpu_counter_sum); |
68 | 111 | ||
69 | int __percpu_counter_init(struct percpu_counter *fbc, s64 amount, | 112 | int __percpu_counter_init(struct percpu_counter *fbc, s64 amount, |
70 | struct lock_class_key *key) | 113 | struct lock_class_key *key) |
71 | { | 114 | { |
72 | spin_lock_init(&fbc->lock); | 115 | spin_lock_init(&fbc->lock); |
73 | lockdep_set_class(&fbc->lock, key); | 116 | lockdep_set_class(&fbc->lock, key); |
74 | fbc->count = amount; | 117 | fbc->count = amount; |
75 | fbc->counters = alloc_percpu(s32); | 118 | fbc->counters = alloc_percpu(s32); |
76 | if (!fbc->counters) | 119 | if (!fbc->counters) |
77 | return -ENOMEM; | 120 | return -ENOMEM; |
121 | |||
122 | debug_percpu_counter_activate(fbc); | ||
123 | |||
78 | #ifdef CONFIG_HOTPLUG_CPU | 124 | #ifdef CONFIG_HOTPLUG_CPU |
79 | INIT_LIST_HEAD(&fbc->list); | 125 | INIT_LIST_HEAD(&fbc->list); |
80 | mutex_lock(&percpu_counters_lock); | 126 | mutex_lock(&percpu_counters_lock); |
81 | list_add(&fbc->list, &percpu_counters); | 127 | list_add(&fbc->list, &percpu_counters); |
82 | mutex_unlock(&percpu_counters_lock); | 128 | mutex_unlock(&percpu_counters_lock); |
83 | #endif | 129 | #endif |
84 | return 0; | 130 | return 0; |
85 | } | 131 | } |
86 | EXPORT_SYMBOL(__percpu_counter_init); | 132 | EXPORT_SYMBOL(__percpu_counter_init); |
87 | 133 | ||
88 | void percpu_counter_destroy(struct percpu_counter *fbc) | 134 | void percpu_counter_destroy(struct percpu_counter *fbc) |
89 | { | 135 | { |
90 | if (!fbc->counters) | 136 | if (!fbc->counters) |
91 | return; | 137 | return; |
138 | |||
139 | debug_percpu_counter_deactivate(fbc); | ||
92 | 140 | ||
93 | #ifdef CONFIG_HOTPLUG_CPU | 141 | #ifdef CONFIG_HOTPLUG_CPU |
94 | mutex_lock(&percpu_counters_lock); | 142 | mutex_lock(&percpu_counters_lock); |
95 | list_del(&fbc->list); | 143 | list_del(&fbc->list); |
96 | mutex_unlock(&percpu_counters_lock); | 144 | mutex_unlock(&percpu_counters_lock); |
97 | #endif | 145 | #endif |
98 | free_percpu(fbc->counters); | 146 | free_percpu(fbc->counters); |
99 | fbc->counters = NULL; | 147 | fbc->counters = NULL; |
100 | } | 148 | } |
101 | EXPORT_SYMBOL(percpu_counter_destroy); | 149 | EXPORT_SYMBOL(percpu_counter_destroy); |
102 | 150 | ||
103 | int percpu_counter_batch __read_mostly = 32; | 151 | int percpu_counter_batch __read_mostly = 32; |
104 | EXPORT_SYMBOL(percpu_counter_batch); | 152 | EXPORT_SYMBOL(percpu_counter_batch); |
105 | 153 | ||
106 | static void compute_batch_value(void) | 154 | static void compute_batch_value(void) |
107 | { | 155 | { |
108 | int nr = num_online_cpus(); | 156 | int nr = num_online_cpus(); |
109 | 157 | ||
110 | percpu_counter_batch = max(32, nr*2); | 158 | percpu_counter_batch = max(32, nr*2); |
111 | } | 159 | } |
112 | 160 | ||
113 | static int __cpuinit percpu_counter_hotcpu_callback(struct notifier_block *nb, | 161 | static int __cpuinit percpu_counter_hotcpu_callback(struct notifier_block *nb, |
114 | unsigned long action, void *hcpu) | 162 | unsigned long action, void *hcpu) |
115 | { | 163 | { |
116 | #ifdef CONFIG_HOTPLUG_CPU | 164 | #ifdef CONFIG_HOTPLUG_CPU |
117 | unsigned int cpu; | 165 | unsigned int cpu; |
118 | struct percpu_counter *fbc; | 166 | struct percpu_counter *fbc; |
119 | 167 | ||
120 | compute_batch_value(); | 168 | compute_batch_value(); |
121 | if (action != CPU_DEAD) | 169 | if (action != CPU_DEAD) |
122 | return NOTIFY_OK; | 170 | return NOTIFY_OK; |
123 | 171 | ||
124 | cpu = (unsigned long)hcpu; | 172 | cpu = (unsigned long)hcpu; |
125 | mutex_lock(&percpu_counters_lock); | 173 | mutex_lock(&percpu_counters_lock); |
126 | list_for_each_entry(fbc, &percpu_counters, list) { | 174 | list_for_each_entry(fbc, &percpu_counters, list) { |
127 | s32 *pcount; | 175 | s32 *pcount; |
128 | unsigned long flags; | 176 | unsigned long flags; |
129 | 177 | ||
130 | spin_lock_irqsave(&fbc->lock, flags); | 178 | spin_lock_irqsave(&fbc->lock, flags); |
131 | pcount = per_cpu_ptr(fbc->counters, cpu); | 179 | pcount = per_cpu_ptr(fbc->counters, cpu); |
132 | fbc->count += *pcount; | 180 | fbc->count += *pcount; |
133 | *pcount = 0; | 181 | *pcount = 0; |
134 | spin_unlock_irqrestore(&fbc->lock, flags); | 182 | spin_unlock_irqrestore(&fbc->lock, flags); |
135 | } | 183 | } |
136 | mutex_unlock(&percpu_counters_lock); | 184 | mutex_unlock(&percpu_counters_lock); |
137 | #endif | 185 | #endif |
138 | return NOTIFY_OK; | 186 | return NOTIFY_OK; |
139 | } | 187 | } |
140 | 188 | ||
141 | /* | 189 | /* |
142 | * Compare counter against given value. | 190 | * Compare counter against given value. |
143 | * Return 1 if greater, 0 if equal and -1 if less | 191 | * Return 1 if greater, 0 if equal and -1 if less |
144 | */ | 192 | */ |
145 | int percpu_counter_compare(struct percpu_counter *fbc, s64 rhs) | 193 | int percpu_counter_compare(struct percpu_counter *fbc, s64 rhs) |
146 | { | 194 | { |
147 | s64 count; | 195 | s64 count; |
148 | 196 | ||
149 | count = percpu_counter_read(fbc); | 197 | count = percpu_counter_read(fbc); |
150 | /* Check to see if rough count will be sufficient for comparison */ | 198 | /* Check to see if rough count will be sufficient for comparison */ |
151 | if (abs(count - rhs) > (percpu_counter_batch*num_online_cpus())) { | 199 | if (abs(count - rhs) > (percpu_counter_batch*num_online_cpus())) { |
152 | if (count > rhs) | 200 | if (count > rhs) |
153 | return 1; | 201 | return 1; |
154 | else | 202 | else |
155 | return -1; | 203 | return -1; |
156 | } | 204 | } |
157 | /* Need to use precise count */ | 205 | /* Need to use precise count */ |
158 | count = percpu_counter_sum(fbc); | 206 | count = percpu_counter_sum(fbc); |
159 | if (count > rhs) | 207 | if (count > rhs) |
160 | return 1; | 208 | return 1; |
161 | else if (count < rhs) | 209 | else if (count < rhs) |
162 | return -1; | 210 | return -1; |
163 | else | 211 | else |
164 | return 0; | 212 | return 0; |
165 | } | 213 | } |
166 | EXPORT_SYMBOL(percpu_counter_compare); | 214 | EXPORT_SYMBOL(percpu_counter_compare); |
167 | 215 | ||
168 | static int __init percpu_counter_startup(void) | 216 | static int __init percpu_counter_startup(void) |
169 | { | 217 | { |
170 | compute_batch_value(); | 218 | compute_batch_value(); |
171 | hotcpu_notifier(percpu_counter_hotcpu_callback, 0); | 219 | hotcpu_notifier(percpu_counter_hotcpu_callback, 0); |
172 | return 0; | 220 | return 0; |
173 | } | 221 | } |
174 | module_init(percpu_counter_startup); | 222 | module_init(percpu_counter_startup); |
175 | 223 |