RISC-V: selftests: cbo: Ensure asm operands match constraints
PATCH 1/1 RISC-V: selftests: cbo: Ensure asm operands match constraints
The 'i' constraint expects a constant operand, which fn and its constant derivative MK_CBO(fn) are, but passing fn through a function as a parameter and using a local variable for MK_CBO(fn) allow the compiler to lose sight of that when no optimization is done. Use a macro instead of a function and skip the local variable to ensure the compiler uses constants, matching the asm constraints.
--- tools/testing/selftests/riscv/hwprobe/cbo.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-)
tools/testing/selftests/riscv/hwprobe/cbo.c +8 -10
@@ -36,16 +36,14 @@ static void sigill_handler(int sig, siginfo_t *info, void *context) regs[0 ] +=4 ; } -static void cbo_insn (char *base,int fn) -{ -uint32_t insn =MK_CBO (fn); - - asmvolatile ( -"mv a0, %0\n" -"li a1, %1\n" -".4byte %2\n" - : :"r" (base),"i" (fn),"i" (insn) :"a0" ,"a1" ,"memory" ); -} +#define cbo_insn (base, fn) \ +({ \ + asm volatile( \ + "mv a0, %0\n" \ + "li a1, %1\n" \ + ".4byte %2\n" \ + : : "r" (base), "i" (fn), "i" (MK_CBO(fn)) : "a0", "a1", "memory"); \ +})static void cbo_inval (char *base) {cbo_insn (base,0 ); }static void cbo_clean (char *base) {cbo_insn (base,1 ); }
Signature · 7 lines
2.43.0 _______________________________________________ linux-riscv mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-riscv
This patch was applied to riscv/linux.git (fixes) by Palmer Dabbelt <[email protected]>:
Hello:
This patch was applied to riscv/linux.git (fixes)
by Palmer Dabbelt <[email protected]>:
Quoted 8 lines · On Wed, 17 Jan 2024 14:09:34 +0100 you wrote:
The 'i' constraint expects a constant operand, which fn and its constant derivative
MK_CBO(fn)are, but passing fn through a function as a parameter and using a local variable forMK_CBO(fn)allow the compiler to lose sight of that when no optimization is done. Use a macro instead of a function and skip the local variable to ensure the compiler uses constants, matching the asm constraints.[...]
Here is the summary with links:
- RISC-V: selftests: cbo: Ensure asm operands match constraints
https://git.kernel.org/riscv/c/0de65288d75f
You are awesome, thank you!
Signature · 9 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html _______________________________________________ linux-riscv mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-riscv