[PW_SID:1149425] [v2] riscv: Add native this_cpu_cmpxchg() support - #2510
Closed
linux-riscv-bot wants to merge 1 commit into
Closed
[PW_SID:1149425] [v2] riscv: Add native this_cpu_cmpxchg() support#2510linux-riscv-bot wants to merge 1 commit into
linux-riscv-bot wants to merge 1 commit into
Conversation
RISC-V falls back to the generic this_cpu_cmpxchg() implementation, which serializes the operation by disabling local interrupts. Consequently, HAVE_CMPXCHG_LOCAL is unset and users such as percpu_counter cannot use their cmpxchg-based fast paths. Implement the 4-byte this_cpu_cmpxchg() operation with cmpxchg_local(), and provide the 8-byte operation on RV64. Pin execution while resolving the current CPU pointer so the LR/SC loop operates on one per-CPU instance, while allowing interrupt-context updates to race through the atomic operation. Provide this_cpu_cmpxchg128() on RV64 when the kernel and toolchain support the Zacas extension, using cmpxchg128_local(). Changes in v2: - Add the RV64 Zacas-gated this_cpu_cmpxchg128() implementation. - Rebase and test against latest upstream. Copy the old and new values to private temporaries before invoking cmpxchg_local(). This avoids collisions between local variable names in nested statement-expression macros. The 1- and 2-byte operations continue to use the generic fallback. Select HAVE_CMPXCHG_LOCAL and update the architecture feature matrix. Tested on latest upstream commit 7f063b2 with GCC 15.2: RV32 and RV64 builds of arch/riscv/kernel/ and lib/percpu_counter.o pass, and an RV64 compile probe emits amocas.q for this_cpu_cmpxchg128(). Signed-off-by: Xie Bo <xb@ultrarisc.com> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR for series 1149425 applied to workflow__riscv__fixes
Name: [v2] riscv: Add native this_cpu_cmpxchg() support
URL: https://patchwork.kernel.org/project/linux-riscv/list/?series=1149425
Version: 2