powerpc: Make /proc/self/stack always print the current stack
authorThadeu Lima de Souza Cascardo <cascardo@canonical.com>
Mon, 27 Mar 2017 19:32:33 +0000 (16:32 -0300)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 28 Mar 2017 03:43:59 +0000 (14:43 +1100)
For the current task, the kernel stack would only tell the last time the
process was rescheduled, if ever. Use the current stack pointer for the
current task.

Otherwise, every once in a while, the stacktrace printed when reading
/proc/self/stack would look like the process is running in userspace,
while it's not, which some may consider as a bug.

This is also consistent with some other architectures, like x86 and arm,
at least.

Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/kernel/stacktrace.c

index 66711958493cd3fe731bff0aa324ed6c5ff92214..d534ed90153840802e9db8a44e9fe11db6728c3e 100644 (file)
@@ -59,7 +59,14 @@ EXPORT_SYMBOL_GPL(save_stack_trace);
 
 void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
 {
-       save_context_stack(trace, tsk->thread.ksp, tsk, 0);
+       unsigned long sp;
+
+       if (tsk == current)
+               sp = current_stack_pointer();
+       else
+               sp = tsk->thread.ksp;
+
+       save_context_stack(trace, sp, tsk, 0);
 }
 EXPORT_SYMBOL_GPL(save_stack_trace_tsk);