2023-11-02 22:15:48

by Stephen Rothwell

[permalink] [raw]
Subject: linux-next: manual merge of the risc-v tree with Linus' tree

Hi all,

Today's linux-next merge of the risc-v tree got a conflict in:

arch/riscv/kernel/irq.c

between commit:

07a27665754b ("RISC-V: Fix wrong use of CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK")

from Linus' tree and commit:

82982fdd5133 ("riscv: Deduplicate IRQ stack switching")

from the risc-v tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging. You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

--
Cheers,
Stephen Rothwell

diff --cc arch/riscv/kernel/irq.c
index 9cc0a7669271,7bfea97ee7e7..000000000000
--- a/arch/riscv/kernel/irq.c
+++ b/arch/riscv/kernel/irq.c
@@@ -60,41 -79,23 +79,23 @@@ static void init_irq_stacks(void
}
#endif /* CONFIG_VMAP_STACK */

-#ifdef CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK
+#ifdef CONFIG_SOFTIRQ_ON_OWN_STACK
+ static void ___do_softirq(struct pt_regs *regs)
+ {
+ __do_softirq();
+ }
+
void do_softirq_own_stack(void)
{
- #ifdef CONFIG_IRQ_STACKS
- if (on_thread_stack()) {
- ulong *sp = per_cpu(irq_stack_ptr, smp_processor_id())
- + IRQ_STACK_SIZE/sizeof(ulong);
- __asm__ __volatile(
- "addi sp, sp, -"RISCV_SZPTR "\n"
- REG_S" ra, (sp) \n"
- "addi sp, sp, -"RISCV_SZPTR "\n"
- REG_S" s0, (sp) \n"
- "addi s0, sp, 2*"RISCV_SZPTR "\n"
- "move sp, %[sp] \n"
- "call __do_softirq \n"
- "addi sp, s0, -2*"RISCV_SZPTR"\n"
- REG_L" s0, (sp) \n"
- "addi sp, sp, "RISCV_SZPTR "\n"
- REG_L" ra, (sp) \n"
- "addi sp, sp, "RISCV_SZPTR "\n"
- :
- : [sp] "r" (sp)
- : "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7",
- "t0", "t1", "t2", "t3", "t4", "t5", "t6",
- #ifndef CONFIG_FRAME_POINTER
- "s0",
- #endif
- "memory");
- } else
- #endif
+ if (on_thread_stack())
+ call_on_irq_stack(NULL, ___do_softirq);
+ else
__do_softirq();
}
-#endif /* CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK */
+#endif /* CONFIG_SOFTIRQ_ON_OWN_STACK */

#else
+ static void init_irq_scs(void) {}
static void init_irq_stacks(void) {}
#endif /* CONFIG_IRQ_STACKS */


Attachments:
(No filename) (499.00 B)
OpenPGP digital signature