|
@@ -53,6 +53,8 @@ static bool fail_task(struct fault_attr *attr, struct task_struct *task)
|
|
|
return !in_interrupt() && task->make_it_fail;
|
|
|
}
|
|
|
|
|
|
+#define MAX_STACK_TRACE_DEPTH 32
|
|
|
+
|
|
|
#ifdef CONFIG_STACK_UNWIND
|
|
|
|
|
|
static asmlinkage int fail_stacktrace_callback(struct unwind_frame_info *info,
|
|
@@ -98,8 +100,7 @@ static bool fail_stacktrace(struct fault_attr *attr)
|
|
|
|
|
|
trace.nr_entries = 0;
|
|
|
trace.entries = entries;
|
|
|
- trace.max_entries = (depth < MAX_STACK_TRACE_DEPTH) ?
|
|
|
- depth : MAX_STACK_TRACE_DEPTH;
|
|
|
+ trace.max_entries = depth;
|
|
|
trace.skip = 1;
|
|
|
trace.all_contexts = 0;
|
|
|
|
|
@@ -179,6 +180,13 @@ static void debugfs_ul_set(void *data, u64 val)
|
|
|
*(unsigned long *)data = val;
|
|
|
}
|
|
|
|
|
|
+static void debugfs_ul_set_MAX_STACK_TRACE_DEPTH(void *data, u64 val)
|
|
|
+{
|
|
|
+ *(unsigned long *)data =
|
|
|
+ val < MAX_STACK_TRACE_DEPTH ?
|
|
|
+ val : MAX_STACK_TRACE_DEPTH;
|
|
|
+}
|
|
|
+
|
|
|
static u64 debugfs_ul_get(void *data)
|
|
|
{
|
|
|
return *(unsigned long *)data;
|
|
@@ -192,6 +200,17 @@ static struct dentry *debugfs_create_ul(const char *name, mode_t mode,
|
|
|
return debugfs_create_file(name, mode, parent, value, &fops_ul);
|
|
|
}
|
|
|
|
|
|
+DEFINE_SIMPLE_ATTRIBUTE(fops_ul_MAX_STACK_TRACE_DEPTH, debugfs_ul_get,
|
|
|
+ debugfs_ul_set_MAX_STACK_TRACE_DEPTH, "%llu\n");
|
|
|
+
|
|
|
+static struct dentry *debugfs_create_ul_MAX_STACK_TRACE_DEPTH(
|
|
|
+ const char *name, mode_t mode,
|
|
|
+ struct dentry *parent, unsigned long *value)
|
|
|
+{
|
|
|
+ return debugfs_create_file(name, mode, parent, value,
|
|
|
+ &fops_ul_MAX_STACK_TRACE_DEPTH);
|
|
|
+}
|
|
|
+
|
|
|
static void debugfs_atomic_t_set(void *data, u64 val)
|
|
|
{
|
|
|
atomic_set((atomic_t *)data, val);
|
|
@@ -284,8 +303,8 @@ int init_fault_attr_dentries(struct fault_attr *attr, const char *name)
|
|
|
mode, dir, &attr->task_filter);
|
|
|
|
|
|
attr->dentries.stacktrace_depth_file =
|
|
|
- debugfs_create_ul("stacktrace-depth", mode, dir,
|
|
|
- &attr->stacktrace_depth);
|
|
|
+ debugfs_create_ul_MAX_STACK_TRACE_DEPTH(
|
|
|
+ "stacktrace-depth", mode, dir, &attr->stacktrace_depth);
|
|
|
|
|
|
attr->dentries.require_start_file =
|
|
|
debugfs_create_ul("require-start", mode, dir, &attr->require_start);
|