提交 d48e3850 编写于 作者: P Peter Zijlstra

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:

  baffd723 ("lockdep: Revert "lockdep: Use raw_cpu_*() for per-cpu variables"")
Signed-off-by: NPeter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20201026152256.GB2651@hirez.programming.kicks-ass.net
上级 921c7ebd
...@@ -84,7 +84,7 @@ static inline bool lockdep_enabled(void) ...@@ -84,7 +84,7 @@ static inline bool lockdep_enabled(void)
if (!debug_locks) if (!debug_locks)
return false; return false;
if (raw_cpu_read(lockdep_recursion)) if (this_cpu_read(lockdep_recursion))
return false; return false;
if (current->lockdep_recursion) if (current->lockdep_recursion)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册