linux-riscv.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V2 0/2] riscv: stack: Fixup independent softirq/irq stack for CONFIG_FRAME_POINTER=n
@ 2023-07-16  0:15 guoren
  2023-07-16  0:15 ` [PATCH V2 1/2] riscv: stack: Fixup independent irq " guoren
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: guoren @ 2023-07-16  0:15 UTC (permalink / raw)
  To: guoren, palmer, paul.walmsley, falcon, bjorn, conor.dooley
  Cc: linux-arch, linux-kernel, linux-riscv, stable, Guo Ren

From: Guo Ren <guoren@linux.alibaba.com>

The independent softirq/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.

<+0>:     addi    sp,sp,-32
<+2>:     sd      s0,16(sp)
<+4>:     sd      s1,8(sp)
<+6>:     sd      ra,24(sp)
<+8>:     sd      s2,0(sp)
<+10>:    mv      s0,a0		--> compiler allocate s0 for a0 when CONFIG_FRAME_POINTER=n
<+12>:    jal     ra,0xffffffff800bc0ce <irqentry_enter>
<+16>:    ld      a5,56(tp) # 0x38
<+20>:    lui     a4,0x4
<+22>:    mv      s1,a0
<+24>:    xor     a5,a5,sp
<+28>:    bgeu    a5,a4,0xffffffff800bc092 <do_irq+88>
<+32>:    auipc   s2,0x5d
<+36>:    ld      s2,1118(s2) # 0xffffffff801194b8 <irq_stack_ptr>
<+40>:    add     s2,s2,a4
<+42>:    addi    sp,sp,-8
<+44>:    sd      ra,0(sp)
<+46>:    addi    sp,sp,-8
<+48>:    sd      s0,0(sp)
<+50>:    addi    s0,sp,16	--> our code clobber the s0
<+52>:    mv      sp,s2
<+54>:    mv      a0,s0		--> a0 got wrong value for handle_riscv_irq 
<+56>:    jal     ra,0xffffffff800bbb3a <handle_riscv_irq>

Changelog:
V2
 - Fixup compile error with CONFIG_FRAME_POINTER=y
 - FIxup stable@vger.kernel.org tag

Guo Ren (2):
  riscv: stack: Fixup independent irq stack for CONFIG_FRAME_POINTER=n
  riscv: stack: Fixup independent softirq stack for
    CONFIG_FRAME_POINTER=n

 arch/riscv/kernel/irq.c   | 3 +++
 arch/riscv/kernel/traps.c | 3 +++
 2 files changed, 6 insertions(+)

-- 
2.36.1


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2023-08-17 15:20 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-16  0:15 [PATCH V2 0/2] riscv: stack: Fixup independent softirq/irq stack for CONFIG_FRAME_POINTER=n guoren
2023-07-16  0:15 ` [PATCH V2 1/2] riscv: stack: Fixup independent irq " guoren
2023-07-16  8:14   ` Rémi Denis-Courmont
2023-07-16  0:15 ` [PATCH V2 2/2] riscv: stack: Fixup independent softirq " guoren
2023-07-29  0:33 ` [PATCH V2 0/2] riscv: stack: Fixup independent softirq/irq " Drew Fustini
2023-08-17 15:20 ` patchwork-bot+linux-riscv

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).