aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/stacktrace.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/stacktrace.c')
-rw-r--r--arch/x86/kernel/stacktrace.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/arch/x86/kernel/stacktrace.c b/arch/x86/kernel/stacktrace.c
index fdd0c6430e5a..9ee98eefc44d 100644
--- a/arch/x86/kernel/stacktrace.c
+++ b/arch/x86/kernel/stacktrace.c
@@ -14,30 +14,34 @@ static int save_stack_stack(void *data, char *name)
14 return 0; 14 return 0;
15} 15}
16 16
17static void 17static int
18__save_stack_address(void *data, unsigned long addr, bool reliable, bool nosched) 18__save_stack_address(void *data, unsigned long addr, bool reliable, bool nosched)
19{ 19{
20 struct stack_trace *trace = data; 20 struct stack_trace *trace = data;
21#ifdef CONFIG_FRAME_POINTER 21#ifdef CONFIG_FRAME_POINTER
22 if (!reliable) 22 if (!reliable)
23 return; 23 return 0;
24#endif 24#endif
25 if (nosched && in_sched_functions(addr)) 25 if (nosched && in_sched_functions(addr))
26 return; 26 return 0;
27 if (trace->skip > 0) { 27 if (trace->skip > 0) {
28 trace->skip--; 28 trace->skip--;
29 return; 29 return 0;
30 } 30 }
31 if (trace->nr_entries < trace->max_entries) 31 if (trace->nr_entries < trace->max_entries) {
32 trace->entries[trace->nr_entries++] = addr; 32 trace->entries[trace->nr_entries++] = addr;
33 return 0;
34 } else {
35 return -1; /* no more room, stop walking the stack */
36 }
33} 37}
34 38
35static void save_stack_address(void *data, unsigned long addr, int reliable) 39static int save_stack_address(void *data, unsigned long addr, int reliable)
36{ 40{
37 return __save_stack_address(data, addr, reliable, false); 41 return __save_stack_address(data, addr, reliable, false);
38} 42}
39 43
40static void 44static int
41save_stack_address_nosched(void *data, unsigned long addr, int reliable) 45save_stack_address_nosched(void *data, unsigned long addr, int reliable)
42{ 46{
43 return __save_stack_address(data, addr, reliable, true); 47 return __save_stack_address(data, addr, reliable, true);