summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/preempt-Put-preempt_enable-within-an-instrumentation.patch
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--debian/patches-rt/preempt-Put-preempt_enable-within-an-instrumentation.patch47
1 files changed, 47 insertions, 0 deletions
diff --git a/debian/patches-rt/preempt-Put-preempt_enable-within-an-instrumentation.patch b/debian/patches-rt/preempt-Put-preempt_enable-within-an-instrumentation.patch
new file mode 100644
index 0000000000..beddd4726f
--- /dev/null
+++ b/debian/patches-rt/preempt-Put-preempt_enable-within-an-instrumentation.patch
@@ -0,0 +1,47 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 8 Mar 2023 16:29:38 +0100
+Subject: [PATCH] preempt: Put preempt_enable() within an instrumentation*()
+ section.
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+
+Callers of preempt_enable() can be within an noinstr section leading to:
+| vmlinux.o: warning: objtool: native_sched_clock+0x97: call to preempt_schedule_notrace_thunk() leaves .noinstr.text section
+| vmlinux.o: warning: objtool: kvm_clock_read+0x22: call to preempt_schedule_notrace_thunk() leaves .noinstr.text section
+| vmlinux.o: warning: objtool: local_clock+0xb4: call to preempt_schedule_notrace_thunk() leaves .noinstr.text section
+| vmlinux.o: warning: objtool: enter_from_user_mode+0xea: call to preempt_schedule_thunk() leaves .noinstr.text section
+| vmlinux.o: warning: objtool: syscall_enter_from_user_mode+0x140: call to preempt_schedule_thunk() leaves .noinstr.text section
+| vmlinux.o: warning: objtool: syscall_enter_from_user_mode_prepare+0xf2: call to preempt_schedule_thunk() leaves .noinstr.text section
+| vmlinux.o: warning: objtool: irqentry_enter_from_user_mode+0xea: call to preempt_schedule_thunk() leaves .noinstr.text section
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Link: https://lore.kernel.org/r/20230309072724.3F6zRkvw@linutronix.de
+---
+ include/linux/preempt.h | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+--- a/include/linux/preempt.h
++++ b/include/linux/preempt.h
+@@ -230,15 +230,21 @@ do { \
+ #define preempt_enable() \
+ do { \
+ barrier(); \
+- if (unlikely(preempt_count_dec_and_test())) \
++ if (unlikely(preempt_count_dec_and_test())) { \
++ instrumentation_begin(); \
+ __preempt_schedule(); \
++ instrumentation_end(); \
++ } \
+ } while (0)
+
+ #define preempt_enable_notrace() \
+ do { \
+ barrier(); \
+- if (unlikely(__preempt_count_dec_and_test())) \
++ if (unlikely(__preempt_count_dec_and_test())) { \
++ instrumentation_begin(); \
+ __preempt_schedule_notrace(); \
++ instrumentation_end(); \
++ } \
+ } while (0)
+
+ #define preempt_check_resched() \