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

Commit 7845f52

Browse files
Merge patch series "riscv: enable lockless lockref implementation"
Jisheng Zhang <jszhang@kernel.org> says: This series selects ARCH_USE_CMPXCHG_LOCKREF to enable the cmpxchg-based lockless lockref implementation for riscv. Then, implement arch_cmpxchg64_{relaxed|acquire|release}. After patch1: Using Linus' test case[1] on TH1520 platform, I see a 11.2% improvement. On JH7110 platform, I see 12.0% improvement. After patch2: 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. * b4-shazam-merge: riscv: cmpxchg: implement arch_cmpxchg64_{relaxed|acquire|release} riscv: select ARCH_USE_CMPXCHG_LOCKREF Link: http://marc.info/?l=linux-fsdevel&m=137782380714721&w=4 [1] Link: https://lore.kernel.org/r/20240325111038.1700-1-jszhang@kernel.org Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
2 parents dcb2743 + 79d6e4e commit 7845f52

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

arch/riscv/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ config RISCV
5757
select ARCH_SUPPORTS_PAGE_TABLE_CHECK if MMU
5858
select ARCH_SUPPORTS_PER_VMA_LOCK if MMU
5959
select ARCH_SUPPORTS_SHADOW_CALL_STACK if HAVE_SHADOW_CALL_STACK
60+
select ARCH_USE_CMPXCHG_LOCKREF if 64BIT
6061
select ARCH_USE_MEMTEST
6162
select ARCH_USE_QUEUED_RWLOCKS
6263
select ARCH_USES_CFI_TRAPS if CFI_CLANG

arch/riscv/include/asm/cmpxchg.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,4 +203,22 @@
203203
arch_cmpxchg_relaxed((ptr), (o), (n)); \
204204
})
205205

206+
#define arch_cmpxchg64_relaxed(ptr, o, n) \
207+
({ \
208+
BUILD_BUG_ON(sizeof(*(ptr)) != 8); \
209+
arch_cmpxchg_relaxed((ptr), (o), (n)); \
210+
})
211+
212+
#define arch_cmpxchg64_acquire(ptr, o, n) \
213+
({ \
214+
BUILD_BUG_ON(sizeof(*(ptr)) != 8); \
215+
arch_cmpxchg_acquire((ptr), (o), (n)); \
216+
})
217+
218+
#define arch_cmpxchg64_release(ptr, o, n) \
219+
({ \
220+
BUILD_BUG_ON(sizeof(*(ptr)) != 8); \
221+
arch_cmpxchg_release((ptr), (o), (n)); \
222+
})
223+
206224
#endif /* _ASM_RISCV_CMPXCHG_H */

0 commit comments

Comments
 (0)