arm64: spinlock: fix ll/sc unlock on big-endian systems
authorWill Deacon <will.deacon@arm.com>
Tue, 28 Jul 2015 13:48:00 +0000 (14:48 +0100)
committerWill Deacon <will.deacon@arm.com>
Tue, 28 Jul 2015 13:48:00 +0000 (14:48 +0100)
commitc1d7cd228b4b46eca1dbd9bb2c6053f477a1a6ff
tree9a1fc2624b65b7a1a44a167d5b2e856cf7e1b1b6
parent4150e50bf5f2171fbe7dfdbc7f2cdf44676b79a4
arm64: spinlock: fix ll/sc unlock on big-endian systems

When unlocking a spinlock, we perform a read-modify-write on the owner
ticket in order to increment it and store it back with release
semantics.

In the LL/SC case, we load the 16-bit ticket using a 32-bit load and
therefore store back the wrong halfword on a big-endian system,
corrupting the lock after the first unlock and killing the system dead.

This patch fixes the unlock code to use 16-bit accessors consistently.

Signed-off-by: Will Deacon <will.deacon@arm.com>
arch/arm64/include/asm/spinlock.h