summaryrefslogtreecommitdiffstats
path: root/arch/arm64/include/asm/smp.h
diff options
context:
space:
mode:
authorWill Deacon <will.deacon@arm.com>2016-06-08 15:10:57 +0100
committerWill Deacon <will.deacon@arm.com>2016-06-15 09:51:36 +0100
commit3a5facd09da848193f5bcb0dea098a298bc1a29d (patch)
tree179c031fe6a5e8d9ce4b27ea966a2e09356bf847 /arch/arm64/include/asm/smp.h
parent38b850a73034f075c4088e7511b36ebbef9dce00 (diff)
downloadop-kernel-dev-3a5facd09da848193f5bcb0dea098a298bc1a29d.zip
op-kernel-dev-3a5facd09da848193f5bcb0dea098a298bc1a29d.tar.gz
arm64: spinlock: fix spin_unlock_wait for LSE atomics
Commit d86b8da04dfa ("arm64: spinlock: serialise spin_unlock_wait against concurrent lockers") fixed spin_unlock_wait for LL/SC-based atomics under the premise that the LSE atomics (in particular, the LDADDA instruction) are indivisible. Unfortunately, these instructions are only indivisible when used with the -AL (full ordering) suffix and, consequently, the same issue can theoretically be observed with LSE atomics, where a later (in program order) load can be speculated before the write portion of the atomic operation. This patch fixes the issue by performing a CAS of the lock once we've established that it's unlocked, in much the same way as the LL/SC code. Fixes: d86b8da04dfa ("arm64: spinlock: serialise spin_unlock_wait against concurrent lockers") Signed-off-by: Will Deacon <will.deacon@arm.com>
Diffstat (limited to 'arch/arm64/include/asm/smp.h')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud