arm64: futex: Bound number of LDXR/STXR loops in FUTEX_WAKE_OP
authorWill Deacon <will.deacon@arm.com>
Mon, 8 Apr 2019 13:23:17 +0000 (14:23 +0100)
committerWill Deacon <will.deacon@arm.com>
Fri, 26 Apr 2019 12:57:43 +0000 (13:57 +0100)
commit03110a5cb2161690ae5ac04994d47ed0cd6cef75
tree9e228d9efb081b69dfb85f31b5ac314d75b39893
parent6b4f4bc9cb22875f97023984a625386f0c7cc1c0
arm64: futex: Bound number of LDXR/STXR loops in FUTEX_WAKE_OP

Our futex implementation makes use of LDXR/STXR loops to perform atomic
updates to user memory from atomic context. This can lead to latency
problems if we end up spinning around the LL/SC sequence at the expense
of doing something useful.

Rework our futex atomic operations so that we return -EAGAIN if we fail
to update the futex word after 128 attempts. The core futex code will
reschedule if necessary and we'll try again later.

Cc: <stable@kernel.org>
Fixes: 6170a97460db ("arm64: Atomic operations")
Signed-off-by: Will Deacon <will.deacon@arm.com>
arch/arm64/include/asm/futex.h