|
@@ -23,13 +23,16 @@ static int save_stack_stack(void *data, char *name)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static void save_stack_address(void *data, unsigned long addr, int reliable)
|
|
|
+static void
|
|
|
+__save_stack_address(void *data, unsigned long addr, bool reliable, bool nosched)
|
|
|
{
|
|
|
struct stack_trace *trace = data;
|
|
|
#ifdef CONFIG_FRAME_POINTER
|
|
|
if (!reliable)
|
|
|
return;
|
|
|
#endif
|
|
|
+ if (nosched && in_sched_functions(addr))
|
|
|
+ return;
|
|
|
if (trace->skip > 0) {
|
|
|
trace->skip--;
|
|
|
return;
|
|
@@ -38,22 +41,15 @@ static void save_stack_address(void *data, unsigned long addr, int reliable)
|
|
|
trace->entries[trace->nr_entries++] = addr;
|
|
|
}
|
|
|
|
|
|
+static void save_stack_address(void *data, unsigned long addr, int reliable)
|
|
|
+{
|
|
|
+ return __save_stack_address(data, addr, reliable, false);
|
|
|
+}
|
|
|
+
|
|
|
static void
|
|
|
save_stack_address_nosched(void *data, unsigned long addr, int reliable)
|
|
|
{
|
|
|
- struct stack_trace *trace = data;
|
|
|
-#ifdef CONFIG_FRAME_POINTER
|
|
|
- if (!reliable)
|
|
|
- return;
|
|
|
-#endif
|
|
|
- if (in_sched_functions(addr))
|
|
|
- return;
|
|
|
- if (trace->skip > 0) {
|
|
|
- trace->skip--;
|
|
|
- return;
|
|
|
- }
|
|
|
- if (trace->nr_entries < trace->max_entries)
|
|
|
- trace->entries[trace->nr_entries++] = addr;
|
|
|
+ return __save_stack_address(data, addr, reliable, true);
|
|
|
}
|
|
|
|
|
|
static const struct stacktrace_ops save_stack_ops = {
|