Skip to content

Commit d48e385

Browse files
author
Peter Zijlstra
committed
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: baffd72 ("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
1 parent 921c7eb commit d48e385

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

kernel/locking/lockdep.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ static inline bool lockdep_enabled(void)
8484
if (!debug_locks)
8585
return false;
8686

87-
if (raw_cpu_read(lockdep_recursion))
87+
if (this_cpu_read(lockdep_recursion))
8888
return false;
8989

9090
if (current->lockdep_recursion)

0 commit comments

Comments
 (0)