summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeiko Carstens <hca@linux.ibm.com>2026-05-08 18:02:48 +0300
committerAlexander Gordeev <agordeev@linux.ibm.com>2026-05-20 10:48:04 +0300
commit44e5edace5a0d79afa75db09b64746345d26d435 (patch)
tree763670c647b0fd6b3d6d45d201d000acbaa5791a
parent24b3afcff416ff502042c49101e83e6e7e29e989 (diff)
downloadlinux-44e5edace5a0d79afa75db09b64746345d26d435.tar.xz
s390/processor: Implement cpu_relax() with cpu serialization
There are many loops in the form of while (READ_ONCE(*somelocation)) cpu_relax(); Strictly speaking the architecture requires serialization instead of only a compiler barrier in the loop so the READ_ONCE() will see an updated value. However real hardware does not require this (see IBM z Systems Processor Optimization Primer - FAQ [1]), but it is still recommended to add serialization. Given that cpu_relax() is doing nothing useful, it does not hurt to add the single and fast instruction which makes sure that serialization happens, and such loops may be left a bit faster. [1] https://community.ibm.com/community/user/viewdocument/microprocessor-optimization-primer Reviewed-by: Alexander Gordeev <agordeev@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
-rw-r--r--arch/s390/include/asm/vdso/processor.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/s390/include/asm/vdso/processor.h b/arch/s390/include/asm/vdso/processor.h
index cfcc3e117c4c..6775621e5a5a 100644
--- a/arch/s390/include/asm/vdso/processor.h
+++ b/arch/s390/include/asm/vdso/processor.h
@@ -2,6 +2,8 @@
#ifndef __ASM_VDSO_PROCESSOR_H
#define __ASM_VDSO_PROCESSOR_H
-#define cpu_relax() barrier()
+#include <asm/barrier.h>
+
+#define cpu_relax() bcr_serialize()
#endif /* __ASM_VDSO_PROCESSOR_H */