Skip to content
This repository was archived by the owner on Nov 8, 2023. It is now read-only.

Commit 79d6e4e

Browse files
xhackerustcpalmer-dabbelt
authored andcommitted
riscv: cmpxchg: implement arch_cmpxchg64_{relaxed|acquire|release}
After selecting ARCH_USE_CMPXCHG_LOCKREF, one straight futher optimization is implementing the arch_cmpxchg64_relaxed() because the lockref code does not need the cmpxchg to have barrier semantics. At the same time, implement arch_cmpxchg64_acquire and arch_cmpxchg64_release as well. However, on both TH1520 and JH7110 platforms, I didn't see obvious performance improvement with Linus' test case [1]. IMHO, this may be related with the fence and lr.d/sc.d hw implementations. In theory, lr/sc without fence could give performance improvement over lr/sc plus fence, so add the code here to leave performance improvement room on newer HW platforms. Link: http://marc.info/?l=linux-fsdevel&m=137782380714721&w=4 [1] Signed-off-by: Jisheng Zhang <jszhang@kernel.org> Reviewed-by: Andrea Parri <parri.andrea@gmail.com> Link: https://lore.kernel.org/r/20240325111038.1700-3-jszhang@kernel.org Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
1 parent eb1e503 commit 79d6e4e

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

arch/riscv/include/asm/cmpxchg.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,4 +360,22 @@
360360
arch_cmpxchg_relaxed((ptr), (o), (n)); \
361361
})
362362

363+
#define arch_cmpxchg64_relaxed(ptr, o, n) \
364+
({ \
365+
BUILD_BUG_ON(sizeof(*(ptr)) != 8); \
366+
arch_cmpxchg_relaxed((ptr), (o), (n)); \
367+
})
368+
369+
#define arch_cmpxchg64_acquire(ptr, o, n) \
370+
({ \
371+
BUILD_BUG_ON(sizeof(*(ptr)) != 8); \
372+
arch_cmpxchg_acquire((ptr), (o), (n)); \
373+
})
374+
375+
#define arch_cmpxchg64_release(ptr, o, n) \
376+
({ \
377+
BUILD_BUG_ON(sizeof(*(ptr)) != 8); \
378+
arch_cmpxchg_release((ptr), (o), (n)); \
379+
})
380+
363381
#endif /* _ASM_RISCV_CMPXCHG_H */

0 commit comments

Comments
 (0)