diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2021-09-23 18:54:43 +0200 |
---|---|---|
committer | Peter Zijlstra <peterz@infradead.org> | 2021-10-01 13:57:51 +0200 |
commit | 50e081b96e35e43b65591f40f7376204decd1cb5 (patch) | |
tree | ca4532d6008097e6e5b81ba564e67460a945dc37 /include/linux/sched.h | |
parent | 8d713b699e84aade6b64e241a35f22e166fc8174 (diff) | |
download | linux-stable-50e081b96e35e43b65591f40f7376204decd1cb5.tar.gz linux-stable-50e081b96e35e43b65591f40f7376204decd1cb5.tar.bz2 linux-stable-50e081b96e35e43b65591f40f7376204decd1cb5.zip |
sched: Make RCU nest depth distinct in __might_resched()
For !RT kernels RCU nest depth in __might_resched() is always expected to
be 0, but on RT kernels it can be non zero while the preempt count is
expected to be always 0.
Instead of playing magic games in interpreting the 'preempt_offset'
argument, rename it to 'offsets' and use the lower 8 bits for the expected
preempt count, allow to hand in the expected RCU nest depth in the upper
bits and adopt the __might_resched() code and related checks and printks.
The affected call sites are updated in subsequent steps.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20210923165358.243232823@linutronix.de
Diffstat (limited to 'include/linux/sched.h')
-rw-r--r-- | include/linux/sched.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h index 7a989f2487f8..b448c7460577 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -2046,6 +2046,9 @@ extern int __cond_resched_lock(spinlock_t *lock); extern int __cond_resched_rwlock_read(rwlock_t *lock); extern int __cond_resched_rwlock_write(rwlock_t *lock); +#define MIGHT_RESCHED_RCU_SHIFT 8 +#define MIGHT_RESCHED_PREEMPT_MASK ((1U << MIGHT_RESCHED_RCU_SHIFT) - 1) + #define cond_resched_lock(lock) ({ \ __might_resched(__FILE__, __LINE__, PREEMPT_LOCK_OFFSET); \ __cond_resched_lock(lock); \ |