diff options
Diffstat (limited to 'libre/linux-libre-pae/0006-lib-irq_poll-Declare-IRQ_POLL-softirq-vector-as-ksof.patch')
-rw-r--r-- | libre/linux-libre-pae/0006-lib-irq_poll-Declare-IRQ_POLL-softirq-vector-as-ksof.patch | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/libre/linux-libre-pae/0006-lib-irq_poll-Declare-IRQ_POLL-softirq-vector-as-ksof.patch b/libre/linux-libre-pae/0006-lib-irq_poll-Declare-IRQ_POLL-softirq-vector-as-ksof.patch new file mode 100644 index 000000000..a7798188a --- /dev/null +++ b/libre/linux-libre-pae/0006-lib-irq_poll-Declare-IRQ_POLL-softirq-vector-as-ksof.patch @@ -0,0 +1,55 @@ +From c4d817dfd4c11840db24143aa39e9e437f05bc33 Mon Sep 17 00:00:00 2001 +From: Frederic Weisbecker <frederic@kernel.org> +Date: Tue, 8 Feb 2022 17:16:35 +0100 +Subject: [PATCH 6/7] lib/irq_poll: Declare IRQ_POLL softirq vector as + ksoftirqd-parking safe + +The following warning may appear while setting a CPU down: + + NOHZ tick-stop error: Non-RCU local softirq work is pending, handler #20!!! + +The IRQ_POLL_SOFTIRQ vector can be raised during the hotplug cpu_down() +path after ksoftirqd is parked and before the CPU actually dies. However +this is handled afterward at the CPUHP_IRQ_POLL_DEAD stage where the +queue gets migrated. + +Hence this warning can be considered spurious and the vector can join +the "hotplug-safe" list. + +Reported-and-tested-by: Paul Menzel <pmenzel@molgen.mpg.de> +Signed-off-by: Frederic Weisbecker <frederic@kernel.org> +Cc: Thomas Gleixner <tglx@linutronix.de> +Cc: Peter Zijlstra <peterz@infradead.org> +Cc: Paul E. McKenney <paulmck@kernel.org> +Cc: Paul Menzel <pmenzel@molgen.mpg.de> +--- + include/linux/interrupt.h | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h +index 9613326d2f8a..f40754caaefa 100644 +--- a/include/linux/interrupt.h ++++ b/include/linux/interrupt.h +@@ -580,12 +580,15 @@ enum + }; + + /* +- * Ignoring the RCU vector after ksoftirqd is parked is fine +- * because: +- * 1) rcutree_migrate_callbacks() takes care of the queue. ++ * The following vectors can be safely ignored after ksoftirqd is parked: ++ * ++ * _ RCU: ++ * 1) rcutree_migrate_callbacks() migrates the queue. + * 2) rcu_report_dead() reports the final quiescent states. ++ * ++ * _ IRQ_POLL: irq_poll_cpu_dead() migrates the queue + */ +-#define SOFTIRQ_HOTPLUG_SAFE_MASK (BIT(RCU_SOFTIRQ)) ++#define SOFTIRQ_HOTPLUG_SAFE_MASK (BIT(RCU_SOFTIRQ) | BIT(IRQ_POLL_SOFTIRQ)) + + /* map softirq index to softirq name. update 'softirq_to_name' in + * kernel/softirq.c when adding a new softirq. +-- +2.36.1 + |