diff options
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.patch | 47 |
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) |