Commit 441e9036 authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Borislav Petkov
Browse files

x86/softirq: Disable softirq stacks on PREEMPT_RT



PREEMPT_RT preempts softirqs and the current implementation avoids
do_softirq_own_stack() and only uses __do_softirq().

Disable the unused softirqs stacks on PREEMPT_RT to safe some memory and
ensure that do_softirq_own_stack() is not used which is not expected.

 [ bigeasy: commit description. ]

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
Link: https://lkml.kernel.org/r/20210924161245.2357247-1-bigeasy@linutronix.de
parent b70e1388
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -185,6 +185,7 @@
			      IRQ_CONSTRAINTS, regs, vector);		\
}

#ifndef CONFIG_PREEMPT_RT
#define ASM_CALL_SOFTIRQ						\
	"call %P[__func]				\n"

@@ -201,6 +202,8 @@
	__this_cpu_write(hardirq_stack_inuse, false);			\
}

#endif

#else /* CONFIG_X86_64 */
/* System vector handlers always run on the stack they interrupted. */
#define run_sysvec_on_irqstack_cond(func, regs)				\
+2 −0
Original line number Diff line number Diff line
@@ -132,6 +132,7 @@ int irq_init_percpu_irqstack(unsigned int cpu)
	return 0;
}

#ifndef CONFIG_PREEMPT_RT
void do_softirq_own_stack(void)
{
	struct irq_stack *irqstk;
@@ -148,6 +149,7 @@ void do_softirq_own_stack(void)

	call_on_stack(__do_softirq, isp);
}
#endif

void __handle_irq(struct irq_desc *desc, struct pt_regs *regs)
{