Merge tag 'irq-urgent-2024-05-05' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq fix from Ingo Molnar: "Fix suspicious RCU usage in __do_softirq()" * tag 'irq-urgent-2024-05-05' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: softirq: Fix suspicious RCU usage in __do_softirq()
This commit is contained in:
@ -508,7 +508,7 @@ static inline bool lockdep_softirq_start(void) { return false; }
|
||||
static inline void lockdep_softirq_end(bool in_hardirq) { }
|
||||
#endif
|
||||
|
||||
asmlinkage __visible void __softirq_entry __do_softirq(void)
|
||||
static void handle_softirqs(bool ksirqd)
|
||||
{
|
||||
unsigned long end = jiffies + MAX_SOFTIRQ_TIME;
|
||||
unsigned long old_flags = current->flags;
|
||||
@ -563,8 +563,7 @@ restart:
|
||||
pending >>= softirq_bit;
|
||||
}
|
||||
|
||||
if (!IS_ENABLED(CONFIG_PREEMPT_RT) &&
|
||||
__this_cpu_read(ksoftirqd) == current)
|
||||
if (!IS_ENABLED(CONFIG_PREEMPT_RT) && ksirqd)
|
||||
rcu_softirq_qs();
|
||||
|
||||
local_irq_disable();
|
||||
@ -584,6 +583,11 @@ restart:
|
||||
current_restore_flags(old_flags, PF_MEMALLOC);
|
||||
}
|
||||
|
||||
asmlinkage __visible void __softirq_entry __do_softirq(void)
|
||||
{
|
||||
handle_softirqs(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* irq_enter_rcu - Enter an interrupt context with RCU watching
|
||||
*/
|
||||
@ -921,7 +925,7 @@ static void run_ksoftirqd(unsigned int cpu)
|
||||
* We can safely run softirq on inline stack, as we are not deep
|
||||
* in the task stack here.
|
||||
*/
|
||||
__do_softirq();
|
||||
handle_softirqs(true);
|
||||
ksoftirqd_run_end();
|
||||
cond_resched();
|
||||
return;
|
||||
|
Reference in New Issue
Block a user