summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Zijlstra <peterz@infradead.org>2020-10-26 16:22:56 +0100
committerPeter Zijlstra <peterz@infradead.org>2020-10-30 17:07:18 +0100
commitd48e3850030623e1c20785bceaaf78f916d0b1a3 (patch)
treeb9d2defd6d11c36f2298e7555adaad40e4ca1364
parent921c7ebd1337d1a46783d7e15a850e12aed2eaa0 (diff)
downloadlinux-stable-d48e3850030623e1c20785bceaaf78f916d0b1a3.tar.gz
linux-stable-d48e3850030623e1c20785bceaaf78f916d0b1a3.tar.bz2
linux-stable-d48e3850030623e1c20785bceaaf78f916d0b1a3.zip
locking/lockdep: Remove more raw_cpu_read() usage
I initially thought raw_cpu_read() was OK, since if it is !0 we have IRQs disabled and can't get migrated, so if we get migrated both CPUs must have 0 and it doesn't matter which 0 we read. And while that is true; it isn't the whole store, on pretty much all architectures (except x86) this can result in computing the address for one CPU, getting migrated, the old CPU continuing execution with another task (possibly setting recursion) and then the new CPU reading the value of the old CPU, which is no longer 0. Similer to: baffd723e44d ("lockdep: Revert "lockdep: Use raw_cpu_*() for per-cpu variables"") Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lkml.kernel.org/r/20201026152256.GB2651@hirez.programming.kicks-ass.net
-rw-r--r--kernel/locking/lockdep.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
index fc206aefa970..11028497d4df 100644
--- a/kernel/locking/lockdep.c
+++ b/kernel/locking/lockdep.c
@@ -84,7 +84,7 @@ static inline bool lockdep_enabled(void)
if (!debug_locks)
return false;
- if (raw_cpu_read(lockdep_recursion))
+ if (this_cpu_read(lockdep_recursion))
return false;
if (current->lockdep_recursion)