lkml.org 
[lkml]   [2020]   [Jun]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH] arm64: smp call when task currently running on other cpu
Date
We cannot get FP and PC when the task is running on another CPU,
task->thread.cpu_context is the last time the task was switched out,
we can use smp call to print backtrace itself.

Signed-off-by: Wang Qing <wangqing@vivo.com>
---
arch/arm64/kernel/traps.c | 11 +++++++++++
1 file changed, 11 insertions(+)
mode change 100644 => 100755 arch/arm64/kernel/traps.c

diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c
index 50cc30a..17a07b9
--- a/arch/arm64/kernel/traps.c
+++ b/arch/arm64/kernel/traps.c
@@ -83,6 +83,11 @@ static void dump_kernel_instr(const char *lvl, struct pt_regs *regs)
printk("%sCode: %s\n", lvl, str);
}

+static void dump_backtrace_smp_fun(struct task_struct *tsk)
+{
+ dump_backtrace(NULL, tsk, KERN_DEFAULT);
+}
+
void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk,
const char *loglvl)
{
@@ -107,6 +112,12 @@ void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk,
start_backtrace(&frame,
(unsigned long)__builtin_frame_address(0),
(unsigned long)dump_backtrace);
+ } else if (task_curr(tsk)) {
+ /*
+ * The task is currently running on other cpu
+ */
+ smp_call_function_single(tsk->cpu, dump_backtrace_fun, tsk, 0);
+ return;
} else {
/*
* task blocked in __switch_to
--
2.7.4
\
 
 \ /
  Last update: 2020-06-12 09:43    [W:0.029 / U:0.624 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site