Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH] fault injection: split up stacktrace filter Kconfig option

There is no prompt for CONFIG_STACKTRACE, so FAULT_INJECTION cannot be
selected without LOCKDEP enabled. (found by Paolo 'Blaisorblade'
Giarrusso)

In order to fix such broken Kconfig dependency, this patch splits up the
stacktrace filter support for fault injection by new Kconfig option, which
enables to use fault injection on the architecture which doesn't have
general stacktrace support.

Cc: "Paolo 'Blaisorblade' Giarrusso" <blaisorblade@yahoo.it>
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Akinobu Mita and committed by
Linus Torvalds
1df49008 94412a96

+29 -22
+8 -2
lib/Kconfig.debug
··· 411 411 config FAULT_INJECTION 412 412 bool "Fault-injection framework" 413 413 depends on DEBUG_KERNEL 414 - depends on STACKTRACE 415 - select FRAME_POINTER 416 414 help 417 415 Provide fault-injection framework. 418 416 For more details, see Documentation/fault-injection/. ··· 438 440 depends on FAULT_INJECTION && SYSFS && DEBUG_FS 439 441 help 440 442 Enable configuration of fault-injection capabilities via debugfs. 443 + 444 + config FAULT_INJECTION_STACKTRACE_FILTER 445 + bool "stacktrace filter for fault-injection capabilities" 446 + depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT 447 + select STACKTRACE 448 + select FRAME_POINTER 449 + help 450 + Provide stacktrace filter for fault-injection capabilities
+21 -20
lib/fault-inject.c
··· 55 55 56 56 #define MAX_STACK_TRACE_DEPTH 32 57 57 58 - #if defined(CONFIG_STACKTRACE) 58 + #ifdef CONFIG_FAULT_INJECTION_STACKTRACE_FILTER 59 59 60 60 static bool fail_stacktrace(struct fault_attr *attr) 61 61 { ··· 90 90 91 91 static inline bool fail_stacktrace(struct fault_attr *attr) 92 92 { 93 - static bool firsttime = true; 94 - 95 - if (firsttime) { 96 - printk(KERN_WARNING 97 - "This architecture does not implement save_stack_trace()\n"); 98 - firsttime = false; 99 - } 100 - return false; 93 + return true; 101 94 } 102 95 103 - #endif 96 + #endif /* CONFIG_FAULT_INJECTION_STACKTRACE_FILTER */ 104 97 105 98 /* 106 99 * This code is stolen from failmalloc-1.0 ··· 210 217 debugfs_remove(attr->dentries.task_filter_file); 211 218 attr->dentries.task_filter_file = NULL; 212 219 220 + #ifdef CONFIG_FAULT_INJECTION_STACKTRACE_FILTER 221 + 213 222 debugfs_remove(attr->dentries.stacktrace_depth_file); 214 223 attr->dentries.stacktrace_depth_file = NULL; 215 224 ··· 226 231 227 232 debugfs_remove(attr->dentries.reject_end_file); 228 233 attr->dentries.reject_end_file = NULL; 234 + 235 + #endif /* CONFIG_FAULT_INJECTION_STACKTRACE_FILTER */ 229 236 230 237 if (attr->dentries.dir) 231 238 WARN_ON(!simple_empty(attr->dentries.dir)); ··· 266 269 attr->dentries.task_filter_file = debugfs_create_bool("task-filter", 267 270 mode, dir, &attr->task_filter); 268 271 272 + if (!attr->dentries.probability_file || !attr->dentries.interval_file || 273 + !attr->dentries.times_file || !attr->dentries.space_file || 274 + !attr->dentries.verbose_file || !attr->dentries.task_filter_file) 275 + goto fail; 276 + 277 + #ifdef CONFIG_FAULT_INJECTION_STACKTRACE_FILTER 278 + 269 279 attr->dentries.stacktrace_depth_file = 270 280 debugfs_create_ul_MAX_STACK_TRACE_DEPTH( 271 281 "stacktrace-depth", mode, dir, &attr->stacktrace_depth); ··· 289 285 attr->dentries.reject_end_file = 290 286 debugfs_create_ul("reject-end", mode, dir, &attr->reject_end); 291 287 292 - 293 - if (!attr->dentries.probability_file || !attr->dentries.interval_file 294 - || !attr->dentries.times_file || !attr->dentries.space_file 295 - || !attr->dentries.verbose_file || !attr->dentries.task_filter_file 296 - || !attr->dentries.stacktrace_depth_file 297 - || !attr->dentries.require_start_file 298 - || !attr->dentries.require_end_file 299 - || !attr->dentries.reject_start_file 300 - || !attr->dentries.reject_end_file 301 - ) 288 + if (!attr->dentries.stacktrace_depth_file || 289 + !attr->dentries.require_start_file || 290 + !attr->dentries.require_end_file || 291 + !attr->dentries.reject_start_file || 292 + !attr->dentries.reject_end_file) 302 293 goto fail; 294 + 295 + #endif /* CONFIG_FAULT_INJECTION_STACKTRACE_FILTER */ 303 296 304 297 return 0; 305 298 fail: