Skip to content

Commit 8d0be64

Browse files
guoren83palmer-dabbelt
authored andcommitted
riscv: stack: Fixup independent irq stack for CONFIG_FRAME_POINTER=n
The independent irq stack uses s0 to save & restore sp, but s0 would be corrupted when CONFIG_FRAME_POINTER=n. So add s0 in the clobber list to fix the problem. Fixes: 163e76c ("riscv: stack: Support HAVE_IRQ_EXIT_ON_IRQ_STACK") Cc: stable@vger.kernel.org Reported-by: Zhangjin Wu <falcon@tinylab.org> Signed-off-by: Guo Ren <guoren@linux.alibaba.com> Signed-off-by: Guo Ren <guoren@kernel.org> Tested-by: Drew Fustini <dfustini@baylibre.com> Link: https://lore.kernel.org/r/20230716001506.3506041-2-guoren@kernel.org Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
1 parent 79bc3f8 commit 8d0be64

File tree

1 file changed

+3
-0
lines changed

1 file changed

+3
-0
lines changed

arch/riscv/kernel/traps.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,9 @@ asmlinkage void noinstr do_irq(struct pt_regs *regs)
372372
: [sp] "r" (sp), [regs] "r" (regs)
373373
: "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7",
374374
"t0", "t1", "t2", "t3", "t4", "t5", "t6",
375+
#ifndef CONFIG_FRAME_POINTER
376+
"s0",
377+
#endif
375378
"memory");
376379
} else
377380
#endif

0 commit comments

Comments
 (0)