diff options
-rw-r--r-- | arch/sparc64/kernel/kstack.h | 38 | ||||
-rw-r--r-- | arch/sparc64/kernel/stacktrace.c | 3 |
2 files changed, 21 insertions, 20 deletions
diff --git a/arch/sparc64/kernel/kstack.h b/arch/sparc64/kernel/kstack.h index 43909d5680ea..4248d969272f 100644 --- a/arch/sparc64/kernel/kstack.h +++ b/arch/sparc64/kernel/kstack.h | |||
@@ -15,15 +15,16 @@ static inline bool kstack_valid(struct thread_info *tp, unsigned long sp) | |||
15 | sp <= (base + THREAD_SIZE - sizeof(struct sparc_stackf))) | 15 | sp <= (base + THREAD_SIZE - sizeof(struct sparc_stackf))) |
16 | return true; | 16 | return true; |
17 | 17 | ||
18 | base = (unsigned long) hardirq_stack[tp->cpu]; | 18 | if (hardirq_stack[tp->cpu]) { |
19 | if (sp >= base && | 19 | base = (unsigned long) hardirq_stack[tp->cpu]; |
20 | sp <= (base + THREAD_SIZE - sizeof(struct sparc_stackf))) | 20 | if (sp >= base && |
21 | return true; | 21 | sp <= (base + THREAD_SIZE - sizeof(struct sparc_stackf))) |
22 | base = (unsigned long) softirq_stack[tp->cpu]; | 22 | return true; |
23 | if (sp >= base && | 23 | base = (unsigned long) softirq_stack[tp->cpu]; |
24 | sp <= (base + THREAD_SIZE - sizeof(struct sparc_stackf))) | 24 | if (sp >= base && |
25 | return true; | 25 | sp <= (base + THREAD_SIZE - sizeof(struct sparc_stackf))) |
26 | 26 | return true; | |
27 | } | ||
27 | return false; | 28 | return false; |
28 | } | 29 | } |
29 | 30 | ||
@@ -37,15 +38,16 @@ static inline bool kstack_is_trap_frame(struct thread_info *tp, struct pt_regs * | |||
37 | addr <= (base + THREAD_SIZE - sizeof(*regs))) | 38 | addr <= (base + THREAD_SIZE - sizeof(*regs))) |
38 | goto check_magic; | 39 | goto check_magic; |
39 | 40 | ||
40 | base = (unsigned long) hardirq_stack[tp->cpu]; | 41 | if (hardirq_stack[tp->cpu]) { |
41 | if (addr >= base && | 42 | base = (unsigned long) hardirq_stack[tp->cpu]; |
42 | addr <= (base + THREAD_SIZE - sizeof(*regs))) | 43 | if (addr >= base && |
43 | goto check_magic; | 44 | addr <= (base + THREAD_SIZE - sizeof(*regs))) |
44 | base = (unsigned long) softirq_stack[tp->cpu]; | 45 | goto check_magic; |
45 | if (addr >= base && | 46 | base = (unsigned long) softirq_stack[tp->cpu]; |
46 | addr <= (base + THREAD_SIZE - sizeof(*regs))) | 47 | if (addr >= base && |
47 | goto check_magic; | 48 | addr <= (base + THREAD_SIZE - sizeof(*regs))) |
48 | 49 | goto check_magic; | |
50 | } | ||
49 | return false; | 51 | return false; |
50 | 52 | ||
51 | check_magic: | 53 | check_magic: |
diff --git a/arch/sparc64/kernel/stacktrace.c b/arch/sparc64/kernel/stacktrace.c index 237e7f8a40ac..4e21d4a57d3b 100644 --- a/arch/sparc64/kernel/stacktrace.c +++ b/arch/sparc64/kernel/stacktrace.c | |||
@@ -9,8 +9,8 @@ | |||
9 | 9 | ||
10 | void save_stack_trace(struct stack_trace *trace) | 10 | void save_stack_trace(struct stack_trace *trace) |
11 | { | 11 | { |
12 | unsigned long ksp, fp, thread_base; | ||
13 | struct thread_info *tp = task_thread_info(current); | 12 | struct thread_info *tp = task_thread_info(current); |
13 | unsigned long ksp, fp; | ||
14 | 14 | ||
15 | stack_trace_flush(); | 15 | stack_trace_flush(); |
16 | 16 | ||
@@ -20,7 +20,6 @@ void save_stack_trace(struct stack_trace *trace) | |||
20 | ); | 20 | ); |
21 | 21 | ||
22 | fp = ksp + STACK_BIAS; | 22 | fp = ksp + STACK_BIAS; |
23 | thread_base = (unsigned long) tp; | ||
24 | do { | 23 | do { |
25 | struct sparc_stackf *sf; | 24 | struct sparc_stackf *sf; |
26 | struct pt_regs *regs; | 25 | struct pt_regs *regs; |