diff options
Diffstat (limited to 'arch/tile/kernel/stack.c')
-rw-r--r-- | arch/tile/kernel/stack.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/arch/tile/kernel/stack.c b/arch/tile/kernel/stack.c index a9db923bb9eb..24fd223df65d 100644 --- a/arch/tile/kernel/stack.c +++ b/arch/tile/kernel/stack.c | |||
@@ -197,19 +197,19 @@ static void validate_stack(struct pt_regs *regs) | |||
197 | { | 197 | { |
198 | int cpu = raw_smp_processor_id(); | 198 | int cpu = raw_smp_processor_id(); |
199 | unsigned long ksp0 = get_current_ksp0(); | 199 | unsigned long ksp0 = get_current_ksp0(); |
200 | unsigned long ksp0_base = ksp0 - THREAD_SIZE; | 200 | unsigned long ksp0_base = ksp0 & -THREAD_SIZE; |
201 | unsigned long sp = stack_pointer; | 201 | unsigned long sp = stack_pointer; |
202 | 202 | ||
203 | if (EX1_PL(regs->ex1) == KERNEL_PL && regs->sp >= ksp0) { | 203 | if (EX1_PL(regs->ex1) == KERNEL_PL && regs->sp >= ksp0) { |
204 | pr_err("WARNING: cpu %d: kernel stack page %#lx underrun!\n" | 204 | pr_err("WARNING: cpu %d: kernel stack %#lx..%#lx underrun!\n" |
205 | " sp %#lx (%#lx in caller), caller pc %#lx, lr %#lx\n", | 205 | " sp %#lx (%#lx in caller), caller pc %#lx, lr %#lx\n", |
206 | cpu, ksp0_base, sp, regs->sp, regs->pc, regs->lr); | 206 | cpu, ksp0_base, ksp0, sp, regs->sp, regs->pc, regs->lr); |
207 | } | 207 | } |
208 | 208 | ||
209 | else if (sp < ksp0_base + sizeof(struct thread_info)) { | 209 | else if (sp < ksp0_base + sizeof(struct thread_info)) { |
210 | pr_err("WARNING: cpu %d: kernel stack page %#lx overrun!\n" | 210 | pr_err("WARNING: cpu %d: kernel stack %#lx..%#lx overrun!\n" |
211 | " sp %#lx (%#lx in caller), caller pc %#lx, lr %#lx\n", | 211 | " sp %#lx (%#lx in caller), caller pc %#lx, lr %#lx\n", |
212 | cpu, ksp0_base, sp, regs->sp, regs->pc, regs->lr); | 212 | cpu, ksp0_base, ksp0, sp, regs->sp, regs->pc, regs->lr); |
213 | } | 213 | } |
214 | } | 214 | } |
215 | 215 | ||