diff options
Diffstat (limited to 'debian/patches-rt/task_work-make-TWA_NMI_CURRENT-handling-conditional-.patch')
-rw-r--r-- | debian/patches-rt/task_work-make-TWA_NMI_CURRENT-handling-conditional-.patch | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/debian/patches-rt/task_work-make-TWA_NMI_CURRENT-handling-conditional-.patch b/debian/patches-rt/task_work-make-TWA_NMI_CURRENT-handling-conditional-.patch new file mode 100644 index 0000000000..957e92705a --- /dev/null +++ b/debian/patches-rt/task_work-make-TWA_NMI_CURRENT-handling-conditional-.patch @@ -0,0 +1,68 @@ +From: Linus Torvalds <torvalds@linux-foundation.org> +Date: Mon, 29 Jul 2024 12:05:06 -0700 +Subject: [PATCH] task_work: make TWA_NMI_CURRENT handling conditional on + IRQ_WORK +Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.10/older/patches-6.10.2-rt14.tar.xz + +The TWA_NMI_CURRENT handling very much depends on IRQ_WORK, but that +isn't universally enabled everywhere. + +Maybe the IRQ_WORK infrastructure should just be unconditional - x86 +ends up indirectly enabling it through unconditionally enabling +PERF_EVENTS, for example. But it also gets enabled by having SMP +support, or even if you just have PRINTK enabled. + +But in the meantime TWA_NMI_CURRENT causes tons of build failures on +various odd minimal configs. Which did show up in linux-next, but +despite that nobody bothered to fix it or even inform me until -rc1 was +out. + +Fixes: 466e4d801cd4 ("task_work: Add TWA_NMI_CURRENT as an additional notify mode") +Reported-by: Naresh Kamboju <naresh.kamboju@linaro.org> +Reported-by: kernelci.org bot <bot@kernelci.org> +Reported-by: Guenter Roeck <linux@roeck-us.net> +Cc: Peter Zijlstra <peterz@infradead.org> +Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> +--- + kernel/task_work.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- a/kernel/task_work.c ++++ b/kernel/task_work.c +@@ -7,12 +7,14 @@ + + static struct callback_head work_exited; /* all we need is ->next == NULL */ + ++#ifdef CONFIG_IRQ_WORK + static void task_work_set_notify_irq(struct irq_work *entry) + { + test_and_set_tsk_thread_flag(current, TIF_NOTIFY_RESUME); + } + static DEFINE_PER_CPU(struct irq_work, irq_work_NMI_resume) = + IRQ_WORK_INIT_HARD(task_work_set_notify_irq); ++#endif + + /** + * task_work_add - ask the @task to execute @work->func() +@@ -58,6 +60,8 @@ int task_work_add(struct task_struct *ta + if (notify == TWA_NMI_CURRENT) { + if (WARN_ON_ONCE(task != current)) + return -EINVAL; ++ if (!IS_ENABLED(CONFIG_IRQ_WORK)) ++ return -EINVAL; + } else { + /* record the work call stack in order to print it in KASAN reports */ + kasan_record_aux_stack(work); +@@ -82,9 +86,11 @@ int task_work_add(struct task_struct *ta + case TWA_SIGNAL_NO_IPI: + __set_notify_signal(task); + break; ++#ifdef CONFIG_IRQ_WORK + case TWA_NMI_CURRENT: + irq_work_queue(this_cpu_ptr(&irq_work_NMI_resume)); + break; ++#endif + default: + WARN_ON_ONCE(1); + break; |