]> git.baikalelectronics.ru Git - kernel.git/commit
locking/lockdep: Remove more raw_cpu_read() usage
authorPeter Zijlstra <peterz@infradead.org>
Mon, 26 Oct 2020 15:22:56 +0000 (16:22 +0100)
committerPeter Zijlstra <peterz@infradead.org>
Fri, 30 Oct 2020 16:07:18 +0000 (17:07 +0100)
commitb1c8b3626a3ac8c85a6d38732e3f3d0db261b65d
treeb9d2defd6d11c36f2298e7555adaad40e4ca1364
parentd54cbd25213f0a5a3534bc8be38f4235d7d86668
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:

  37b9e03bb625 ("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
kernel/locking/lockdep.c