aboutsummaryrefslogtreecommitdiffstats
path: root/arch/riscv/kernel/stacktrace.c
diff options
context:
space:
mode:
authorTony Lindgren <tony@atomide.com>2020-04-21 09:36:03 -0700
committerTony Lindgren <tony@atomide.com>2020-04-21 09:36:03 -0700
commit175ae3ad59ab3459652bd2ae3bbc1785aeba1bf3 (patch)
treec7fd682de61e3c2a6cc3ba0e8881b99fafdf969c /arch/riscv/kernel/stacktrace.c
parentARM: dts: OMAP3: disable RNG on N950/N9 (diff)
parentARM: dts: dra7: Fix bus_dma_limit for PCIe (diff)
Merge branch 'fixes-v5.7' into fixes
Diffstat (limited to 'arch/riscv/kernel/stacktrace.c')
-rw-r--r--arch/riscv/kernel/stacktrace.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/arch/riscv/kernel/stacktrace.c b/arch/riscv/kernel/stacktrace.c
index 0940681d2f68..02087fe539c6 100644
--- a/arch/riscv/kernel/stacktrace.c
+++ b/arch/riscv/kernel/stacktrace.c
@@ -19,6 +19,8 @@ struct stackframe {
unsigned long ra;
};
+register unsigned long sp_in_global __asm__("sp");
+
void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs,
bool (*fn)(unsigned long, void *), void *arg)
{
@@ -29,7 +31,7 @@ void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs,
sp = user_stack_pointer(regs);
pc = instruction_pointer(regs);
} else if (task == NULL || task == current) {
- const register unsigned long current_sp __asm__ ("sp");
+ const register unsigned long current_sp = sp_in_global;
fp = (unsigned long)__builtin_frame_address(0);
sp = current_sp;
pc = (unsigned long)walk_stackframe;
@@ -73,8 +75,7 @@ static void notrace walk_stackframe(struct task_struct *task,
sp = user_stack_pointer(regs);
pc = instruction_pointer(regs);
} else if (task == NULL || task == current) {
- const register unsigned long current_sp __asm__ ("sp");
- sp = current_sp;
+ sp = sp_in_global;
pc = (unsigned long)walk_stackframe;
} else {
/* task blocked in __switch_to */