Subject: linux-next: manual merge of the risc-v tree with Linus' tree

From: Stephen Rothwell <[email-masked]>
Date: Fri, 3 Nov 2023 09:14:36 +1100

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 */