Commit f448dda8 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'asm-generic-fixes-6.0-rc4' of...

Merge tag 'asm-generic-fixes-6.0-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic

Pull SOFTIRQ_ON_OWN_STACK rework from Arnd Bergmann:
 "Just one fixup patch, reworking the softirq_on_own_stack logic for
  preempt-rt kernels as discussed in

    https://lore.kernel.org/all/CAHk-=wgZSD3W2y6yczad2Am=EfHYyiPzTn3CfXxrriJf9i5W5w@mail.gmail.com/"

* tag 'asm-generic-fixes-6.0-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic:
  asm-generic: Conditionally enable do_softirq_own_stack() via Kconfig.
parents 50635787 8cbb2b50
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