Commit 8cbb2b50 authored by Sebastian Andrzej Siewior's avatar Sebastian Andrzej Siewior Committed by Arnd Bergmann
Browse files

asm-generic: Conditionally enable do_softirq_own_stack() via Kconfig.

Remove the CONFIG_PREEMPT_RT symbol from the ifdef around
do_softirq_own_stack() and move it to Kconfig instead.

Enable softirq stacks based on SOFTIRQ_ON_OWN_STACK which depends on
HAVE_SOFTIRQ_ON_OWN_STACK and its default value is set to !PREEMPT_RT.
This ensures that softirq stacks are not used on PREEMPT_RT and avoids
a 'select' statement on an option which has a 'depends' statement.

Link: https://lore.kernel.org/YvN5E%2FPrHfUhggr7@linutronix.de


Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parent b90cb105
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -923,6 +923,9 @@ config HAVE_SOFTIRQ_ON_OWN_STACK
	  Architecture provides a function to run __do_softirq() on a
	  separate stack.

config SOFTIRQ_ON_OWN_STACK
	def_bool HAVE_SOFTIRQ_ON_OWN_STACK && !PREEMPT_RT

config ALTERNATE_USER_ADDRESS_SPACE
	bool
	help
+1 −1
Original line number Diff line number Diff line
@@ -70,7 +70,7 @@ static void __init init_irq_stacks(void)
	}
}

#ifndef CONFIG_PREEMPT_RT
#ifdef CONFIG_SOFTIRQ_ON_OWN_STACK
static void ____do_softirq(void *arg)
{
	__do_softirq();
+1 −1
Original line number Diff line number Diff line
@@ -480,7 +480,7 @@ static void execute_on_irq_stack(void *func, unsigned long param1)
	*irq_stack_in_use = 1;
}

#ifndef CONFIG_PREEMPT_RT
#ifdef CONFIG_SOFTIRQ_ON_OWN_STACK
void do_softirq_own_stack(void)
{
	execute_on_irq_stack(__do_softirq, 0);
+2 −2
Original line number Diff line number Diff line
@@ -199,7 +199,7 @@ static inline void check_stack_overflow(unsigned long sp)
	}
}

#ifndef CONFIG_PREEMPT_RT
#ifdef CONFIG_SOFTIRQ_ON_OWN_STACK
static __always_inline void call_do_softirq(const void *sp)
{
	/* Temporarily switch r1 to sp, call __do_softirq() then restore r1. */
@@ -335,7 +335,7 @@ void *mcheckirq_ctx[NR_CPUS] __read_mostly;
void *softirq_ctx[NR_CPUS] __read_mostly;
void *hardirq_ctx[NR_CPUS] __read_mostly;

#ifndef CONFIG_PREEMPT_RT
#ifdef CONFIG_SOFTIRQ_ON_OWN_STACK
void do_softirq_own_stack(void)
{
	call_do_softirq(softirq_ctx[smp_processor_id()]);
+1 −1
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@
#include <asm/lowcore.h>
#include <asm/stacktrace.h>

#ifndef CONFIG_PREEMPT_RT
#ifdef CONFIG_SOFTIRQ_ON_OWN_STACK
static inline void do_softirq_own_stack(void)
{
	call_on_stack(0, S390_lowcore.async_stack, void, __do_softirq);
Loading