summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0002_sched_make_cond_resched__lock_variants_consistent_vs_might_sleep.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches-rt/0002_sched_make_cond_resched__lock_variants_consistent_vs_might_sleep.patch')
-rw-r--r--debian/patches-rt/0002_sched_make_cond_resched__lock_variants_consistent_vs_might_sleep.patch47
1 files changed, 47 insertions, 0 deletions
diff --git a/debian/patches-rt/0002_sched_make_cond_resched__lock_variants_consistent_vs_might_sleep.patch b/debian/patches-rt/0002_sched_make_cond_resched__lock_variants_consistent_vs_might_sleep.patch
new file mode 100644
index 000000000..9465bebcd
--- /dev/null
+++ b/debian/patches-rt/0002_sched_make_cond_resched__lock_variants_consistent_vs_might_sleep.patch
@@ -0,0 +1,47 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Subject: sched: Make cond_resched_*lock() variants consistent vs. might_sleep()
+Date: Thu, 23 Sep 2021 18:54:37 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.15/older/patches-5.15.3-rt21.tar.xz
+
+Commit 3427445afd26 ("sched: Exclude cond_resched() from nested sleep
+test") removed the task state check of __might_sleep() for
+cond_resched_lock() because cond_resched_lock() is not a voluntary
+scheduling point which blocks. It's a preemption point which requires the
+lock holder to release the spin lock.
+
+The same rationale applies to cond_resched_rwlock_read/write(), but those
+were not touched.
+
+Make it consistent and use the non-state checking __might_resched() there
+as well.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Link: https://lore.kernel.org/r/20210923165357.991262778@linutronix.de
+---
+ include/linux/sched.h | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -2062,14 +2062,14 @@ extern int __cond_resched_rwlock_write(r
+ __cond_resched_lock(lock); \
+ })
+
+-#define cond_resched_rwlock_read(lock) ({ \
+- __might_sleep(__FILE__, __LINE__, PREEMPT_LOCK_OFFSET); \
+- __cond_resched_rwlock_read(lock); \
++#define cond_resched_rwlock_read(lock) ({ \
++ __might_resched(__FILE__, __LINE__, PREEMPT_LOCK_OFFSET); \
++ __cond_resched_rwlock_read(lock); \
+ })
+
+-#define cond_resched_rwlock_write(lock) ({ \
+- __might_sleep(__FILE__, __LINE__, PREEMPT_LOCK_OFFSET); \
+- __cond_resched_rwlock_write(lock); \
++#define cond_resched_rwlock_write(lock) ({ \
++ __might_resched(__FILE__, __LINE__, PREEMPT_LOCK_OFFSET); \
++ __cond_resched_rwlock_write(lock); \
+ })
+
+ static inline void cond_resched_rcu(void)