summaryrefslogtreecommitdiff
path: root/arch/arm/lib/testclearbit.S
diff options
context:
space:
mode:
authorMark Rutland <mark.rutland@arm.com>2023-06-05 10:00:58 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2023-07-19 17:21:02 +0300
commitea1432a402ab5d401ea66372a4438ad55061143c (patch)
treec23fc4d6e0327042a569b8eae30fef3a74a9e1e3 /arch/arm/lib/testclearbit.S
parent6b54f5c68474edc241434ab50bae4a08ce45f835 (diff)
downloadlinux-ea1432a402ab5d401ea66372a4438ad55061143c.tar.xz
locking/atomic: arm: fix sync ops
[ Upstream commit dda5f312bb09e56e7a1c3e3851f2000eb2e9c879 ] The sync_*() ops on arch/arm are defined in terms of the regular bitops with no special handling. This is not correct, as UP kernels elide barriers for the fully-ordered operations, and so the required ordering is lost when such UP kernels are run under a hypervsior on an SMP system. Fix this by defining sync ops with the required barriers. Note: On 32-bit arm, the sync_*() ops are currently only used by Xen, which requires ARMv7, but the semantics can be implemented for ARMv6+. Fixes: e54d2f61528165bb ("xen/arm: sync_bitops") Signed-off-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Kees Cook <keescook@chromium.org> Link: https://lore.kernel.org/r/20230605070124.3741859-2-mark.rutland@arm.com Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'arch/arm/lib/testclearbit.S')
-rw-r--r--arch/arm/lib/testclearbit.S4
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/arm/lib/testclearbit.S b/arch/arm/lib/testclearbit.S
index 009afa0f5b4a..4d2c5ca620eb 100644
--- a/arch/arm/lib/testclearbit.S
+++ b/arch/arm/lib/testclearbit.S
@@ -10,3 +10,7 @@
.text
testop _test_and_clear_bit, bicne, strne
+
+#if __LINUX_ARM_ARCH__ >= 6
+sync_testop _sync_test_and_clear_bit, bicne, strne
+#endif