x86/entry/64: Move do_softirq_own_stack() to C
authorThomas Gleixner <tglx@linutronix.de>
Thu, 21 May 2020 20:05:24 +0000 (22:05 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 11 Jun 2020 13:15:07 +0000 (15:15 +0200)
The first step to get rid of the ENTER/LEAVE_IRQ_STACK ASM macro maze.  Use
the new C code helpers to move do_softirq_own_stack() out of ASM code.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Andy Lutomirski <luto@kernel.org>
Link: https://lore.kernel.org/r/20200521202117.870911120@linutronix.de
arch/x86/entry/entry_64.S
arch/x86/kernel/irq_64.c

index 1597370..6b518be 100644 (file)
@@ -1145,19 +1145,6 @@ SYM_FUNC_START(asm_call_on_stack)
        ret
 SYM_FUNC_END(asm_call_on_stack)
 
-/* Call softirq on interrupt stack. Interrupts are off. */
-.pushsection .text, "ax"
-SYM_FUNC_START(do_softirq_own_stack)
-       pushq   %rbp
-       mov     %rsp, %rbp
-       ENTER_IRQ_STACK regs=0 old_rsp=%r11
-       call    __do_softirq
-       LEAVE_IRQ_STACK regs=0
-       leaveq
-       ret
-SYM_FUNC_END(do_softirq_own_stack)
-.popsection
-
 #ifdef CONFIG_XEN_PV
 /*
  * A note on the "critical region" in our callback handler.
index 6b32ab0..1b4fe93 100644 (file)
@@ -20,6 +20,7 @@
 #include <linux/sched/task_stack.h>
 
 #include <asm/cpu_entry_area.h>
+#include <asm/irq_stack.h>
 #include <asm/io_apic.h>
 #include <asm/apic.h>
 
@@ -70,3 +71,8 @@ int irq_init_percpu_irqstack(unsigned int cpu)
                return 0;
        return map_irq_stack(cpu);
 }
+
+void do_softirq_own_stack(void)
+{
+       run_on_irqstack_cond(__do_softirq, NULL, NULL);
+}