]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
s390/processor: Implement cpu_relax() with cpu serialization
authorHeiko Carstens <hca@linux.ibm.com>
Fri, 8 May 2026 15:02:48 +0000 (17:02 +0200)
committerAlexander Gordeev <agordeev@linux.ibm.com>
Wed, 20 May 2026 07:48:04 +0000 (09:48 +0200)
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>
arch/s390/include/asm/vdso/processor.h

index cfcc3e117c4c96ffa89511f51cb072a62650a36d..6775621e5a5a31fceb255436722ef2341523bab1 100644 (file)
@@ -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 */