Skip to content

[PW_SID:1129401] riscv: vdso: Implement __vdso_futex_robust_try_unlock()#2303

Open
linux-riscv-bot wants to merge 6 commits into
workflow__riscv__fixesfrom
pw1129401
Open

[PW_SID:1129401] riscv: vdso: Implement __vdso_futex_robust_try_unlock()#2303
linux-riscv-bot wants to merge 6 commits into
workflow__riscv__fixesfrom
pw1129401

Conversation

@linux-riscv-bot

Copy link
Copy Markdown

PR for series 1129401 applied to workflow__riscv__fixes

Name: riscv: vdso: Implement __vdso_futex_robust_try_unlock()
URL: https://patchwork.kernel.org/project/linux-riscv/list/?series=1129401
Version: 3

Linux RISC-V bot and others added 6 commits July 15, 2026 17:25
The compat_vdso Makefile has a custom build rule for *.S files. This
is unnecessary, and makes it hard to extend this Makefile to support
building *.c files.

Switch to standard kbuild rule instead.

Signed-off-by: Nam Cao <namcao@linutronix.de>
Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
Extend to support building *.c files. This allows adding futex.c in a
follow-up commit.

Signed-off-by: Nam Cao <namcao@linutronix.de>
Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
The -march option is inside COMPAT_CC_FLAGS, making it difficult to extend.

Introduce COMPAT_MARCH variable to allow extension. A follow-up commit
will take advantage of this to add _zacas to -march.

Signed-off-by: Nam Cao <namcao@linutronix.de>
Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
The compat vdso Makefile does not enable zacas, disallowing source
files from using zacas instructions. This is an obstacle to adding
robust __vdso_futex_robust_list32_try_unlock() in a follow-up commit.

Build with zacas, if compiler supports it.

Signed-off-by: Nam Cao <namcao@linutronix.de>
Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
This is the RISC-V port for __vdso_futex_robust_try_unlock(). It is based
on the x86's implementation in commit 61cfc8e ("x86/vdso: Prepare for
robust futex unlock support") and commit a2274cc ("x86/vdso: Implement
__vdso_futex_robust_try_unlock()").

When the FUTEX_ROBUST_UNLOCK mechanism is used for unlocking (PI-)futexes,
the unlock sequence in userspace looks like this:

  1)    robust_list_set_op_pending(mutex);
  2)    robust_list_remove(mutex);

        lval = gettid();
  3)    if (atomic_try_cmpxchg(&mutex->lock, lval, 0))
  4)            robust_list_clear_op_pending();
        else
  5)            sys_futex(OP,...FUTEX_ROBUST_UNLOCK);

That still leaves a minimal race window between #3 and #4 where the mutex
could be acquired by some other task which observes that it is the last
user and:

  1) unmaps the mutex memory
  2) maps a different file, which ends up covering the same address

When then the original task exits before reaching #4 then the kernel robust
list handling observes the pending op entry and tries to fix up user space.

In case that the newly mapped data contains the TID of the exiting thread
at the address of the mutex/futex the kernel will set the owner died bit in
that memory and therefore corrupt unrelated data.

Provide a VDSO function which exposes the critical section window in the
VDSO symbol table. The resulting addresses are updated in the task's mm
when the VDSO is (re)map()'ed.

The core code detects when a task was interrupted within the critical
section and is about to deliver a signal. It then invokes an architecture
specific function which determines whether the pending op pointer has to be
cleared or not. The unlock assembly sequence on 64-bit is:

        mv      a5, a0           ; move LOCK to a5
    .Lretry
        lr.w    a0, (a5)         ; load *LOCK
        bne     a0, a1, 24 .Lend ; if (*LOCK != TID) then exit
        sc.w.rl t0, zero, (a5)   ; try changing *LOCK from TID to zero
    .Lstart
        bnez    t0, .Lretry      ; retry if store-conditional failed
        sd      zero, 0(a2)      ; clear POP
    .Lend
        sext.w	a0,a0
        ret

So if the kernel sees that the user task is between .Lstart and .Lend,
t0 can be checked to determine if the pending op pointer (POP) should
be cleared.

When the kernel is built with ZACAS, another unlock assembly sequence
is provided using ZACAS instructions. If the CPU supports ZACAS, that
alternative sequence is used and the critical section is also changed
to that.

There are two entry points to handle the different robust list pending op
pointer sizes:

        __vdso_futex_robust_list64_try_unlock()
        __vdso_futex_robust_list32_try_unlock()

The 32-bit VDSO and compat VDSO provides
__vdso_futex_robust_list32_try_unlock().

Unlike x86, the RISC-V 64-bit VDSO provides only provides
__vdso_futex_robust_list64_try_unlock(). Because RISC-V threads can
only have one list_op_pending pointer type.

Signed-off-by: Nam Cao <namcao@linutronix.de>
Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 1: "[v3,1/5] riscv: compat_vdso: switch to standard kbuild rule"
build-rv32-defconfig
Desc: Builds riscv32 defconfig
Duration: 141.53 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 1: "[v3,1/5] riscv: compat_vdso: switch to standard kbuild rule"
build-rv64-clang-allmodconfig
Desc: Builds riscv64 allmodconfig with Clang, and checks for errors and added warnings
Duration: 1390.10 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 1: "[v3,1/5] riscv: compat_vdso: switch to standard kbuild rule"
build-rv64-gcc-allmodconfig
Desc: Builds riscv64 allmodconfig with GCC, and checks for errors and added warnings
Duration: 1682.27 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 1: "[v3,1/5] riscv: compat_vdso: switch to standard kbuild rule"
build-rv64-nommu-k210-defconfig
Desc: Builds riscv64 defconfig with NOMMU for K210
Duration: 25.48 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 1: "[v3,1/5] riscv: compat_vdso: switch to standard kbuild rule"
build-rv64-nommu-k210-virt
Desc: Builds riscv64 defconfig with NOMMU for the virt platform
Duration: 27.32 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 1: "[v3,1/5] riscv: compat_vdso: switch to standard kbuild rule"
checkpatch
Desc: Runs checkpatch.pl on the patch
Duration: 0.71 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 1: "[v3,1/5] riscv: compat_vdso: switch to standard kbuild rule"
dtb-warn-rv64
Desc: Checks for Device Tree warnings/errors
Duration: 89.67 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 1: "[v3,1/5] riscv: compat_vdso: switch to standard kbuild rule"
header-inline
Desc: Detects static functions without inline keyword in header files
Duration: 0.25 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 1: "[v3,1/5] riscv: compat_vdso: switch to standard kbuild rule"
kdoc
Desc: Detects for kdoc errors
Duration: 0.85 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 1: "[v3,1/5] riscv: compat_vdso: switch to standard kbuild rule"
module-param
Desc: Detect module_param changes
Duration: 0.26 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 1: "[v3,1/5] riscv: compat_vdso: switch to standard kbuild rule"
verify-fixes
Desc: Verifies that the Fixes: tags exist
Duration: 0.23 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 1: "[v3,1/5] riscv: compat_vdso: switch to standard kbuild rule"
verify-signedoff
Desc: Verifies that Signed-off-by: tags are correct
Duration: 5.35 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 2: "[v3,2/5] riscv: compat_vdso: Allow *.c source files"
build-rv32-defconfig
Desc: Builds riscv32 defconfig
Duration: 141.65 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 2: "[v3,2/5] riscv: compat_vdso: Allow *.c source files"
build-rv64-clang-allmodconfig
Desc: Builds riscv64 allmodconfig with Clang, and checks for errors and added warnings
Duration: 1102.15 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 2: "[v3,2/5] riscv: compat_vdso: Allow *.c source files"
build-rv64-gcc-allmodconfig
Desc: Builds riscv64 allmodconfig with GCC, and checks for errors and added warnings
Duration: 1388.98 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 2: "[v3,2/5] riscv: compat_vdso: Allow *.c source files"
build-rv64-nommu-k210-defconfig
Desc: Builds riscv64 defconfig with NOMMU for K210
Duration: 26.00 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 2: "[v3,2/5] riscv: compat_vdso: Allow *.c source files"
build-rv64-nommu-k210-virt
Desc: Builds riscv64 defconfig with NOMMU for the virt platform
Duration: 27.24 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 2: "[v3,2/5] riscv: compat_vdso: Allow *.c source files"
checkpatch
Desc: Runs checkpatch.pl on the patch
Duration: 0.69 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 2: "[v3,2/5] riscv: compat_vdso: Allow *.c source files"
dtb-warn-rv64
Desc: Checks for Device Tree warnings/errors
Duration: 84.49 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 2: "[v3,2/5] riscv: compat_vdso: Allow *.c source files"
header-inline
Desc: Detects static functions without inline keyword in header files
Duration: 0.25 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 2: "[v3,2/5] riscv: compat_vdso: Allow *.c source files"
kdoc
Desc: Detects for kdoc errors
Duration: 0.88 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 2: "[v3,2/5] riscv: compat_vdso: Allow *.c source files"
module-param
Desc: Detect module_param changes
Duration: 0.26 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 2: "[v3,2/5] riscv: compat_vdso: Allow *.c source files"
verify-fixes
Desc: Verifies that the Fixes: tags exist
Duration: 0.23 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 2: "[v3,2/5] riscv: compat_vdso: Allow *.c source files"
verify-signedoff
Desc: Verifies that Signed-off-by: tags are correct
Duration: 0.32 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 3: "[v3,3/5] riscv: compat_vdso: Introduce COMPAT_MARCH variable"
header-inline
Desc: Detects static functions without inline keyword in header files
Duration: 0.25 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 3: "[v3,3/5] riscv: compat_vdso: Introduce COMPAT_MARCH variable"
kdoc
Desc: Detects for kdoc errors
Duration: 0.84 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 3: "[v3,3/5] riscv: compat_vdso: Introduce COMPAT_MARCH variable"
module-param
Desc: Detect module_param changes
Duration: 0.27 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 3: "[v3,3/5] riscv: compat_vdso: Introduce COMPAT_MARCH variable"
verify-fixes
Desc: Verifies that the Fixes: tags exist
Duration: 0.24 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 3: "[v3,3/5] riscv: compat_vdso: Introduce COMPAT_MARCH variable"
verify-signedoff
Desc: Verifies that Signed-off-by: tags are correct
Duration: 0.33 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 4: "[v3,4/5] riscv: compat_vdso: Build with zacas if available"
build-rv32-defconfig
Desc: Builds riscv32 defconfig
Duration: 141.45 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 4: "[v3,4/5] riscv: compat_vdso: Build with zacas if available"
build-rv64-clang-allmodconfig
Desc: Builds riscv64 allmodconfig with Clang, and checks for errors and added warnings
Duration: 1414.85 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 4: "[v3,4/5] riscv: compat_vdso: Build with zacas if available"
build-rv64-gcc-allmodconfig
Desc: Builds riscv64 allmodconfig with GCC, and checks for errors and added warnings
Duration: 1383.72 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 4: "[v3,4/5] riscv: compat_vdso: Build with zacas if available"
build-rv64-nommu-k210-defconfig
Desc: Builds riscv64 defconfig with NOMMU for K210
Duration: 25.59 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 4: "[v3,4/5] riscv: compat_vdso: Build with zacas if available"
build-rv64-nommu-k210-virt
Desc: Builds riscv64 defconfig with NOMMU for the virt platform
Duration: 26.98 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 4: "[v3,4/5] riscv: compat_vdso: Build with zacas if available"
checkpatch
Desc: Runs checkpatch.pl on the patch
Duration: 0.71 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 4: "[v3,4/5] riscv: compat_vdso: Build with zacas if available"
dtb-warn-rv64
Desc: Checks for Device Tree warnings/errors
Duration: 92.26 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 4: "[v3,4/5] riscv: compat_vdso: Build with zacas if available"
header-inline
Desc: Detects static functions without inline keyword in header files
Duration: 0.33 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 4: "[v3,4/5] riscv: compat_vdso: Build with zacas if available"
kdoc
Desc: Detects for kdoc errors
Duration: 0.88 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 4: "[v3,4/5] riscv: compat_vdso: Build with zacas if available"
module-param
Desc: Detect module_param changes
Duration: 0.38 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 4: "[v3,4/5] riscv: compat_vdso: Build with zacas if available"
verify-fixes
Desc: Verifies that the Fixes: tags exist
Duration: 0.24 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 4: "[v3,4/5] riscv: compat_vdso: Build with zacas if available"
verify-signedoff
Desc: Verifies that Signed-off-by: tags are correct
Duration: 0.33 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 5: "[v3,5/5] riscv: vdso: Implement __vdso_futex_robust_try_unlock()"
build-rv32-defconfig
Desc: Builds riscv32 defconfig
Duration: 141.13 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 5: "[v3,5/5] riscv: vdso: Implement __vdso_futex_robust_try_unlock()"
build-rv64-clang-allmodconfig
Desc: Builds riscv64 allmodconfig with Clang, and checks for errors and added warnings
Duration: 29.78 seconds
Result: ERROR
Output:

Redirect to /build/tmp.4MQEI9btX4 and /build/tmp.59I8eMQ2pz
Tree base:
1fc38e2eba51b ("riscv: compat_vdso: Build with zacas if available")
Building the whole tree with the patch
error:



real	0m28.273s
user	0m16.331s
sys	0m31.827s

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 5: "[v3,5/5] riscv: vdso: Implement __vdso_futex_robust_try_unlock()"
build-rv64-gcc-allmodconfig
Desc: Builds riscv64 allmodconfig with GCC, and checks for errors and added warnings
Duration: 25.80 seconds
Result: ERROR
Output:

Redirect to /build/tmp.eI7TgQIYPe and /build/tmp.E6HuHI8i8p
Tree base:
1fc38e2eba51b ("riscv: compat_vdso: Build with zacas if available")
Building the whole tree with the patch
error:



real	0m24.306s
user	0m23.211s
sys	0m26.156s

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 5: "[v3,5/5] riscv: vdso: Implement __vdso_futex_robust_try_unlock()"
build-rv64-nommu-k210-defconfig
Desc: Builds riscv64 defconfig with NOMMU for K210
Duration: 26.05 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 5: "[v3,5/5] riscv: vdso: Implement __vdso_futex_robust_try_unlock()"
build-rv64-nommu-k210-virt
Desc: Builds riscv64 defconfig with NOMMU for the virt platform
Duration: 26.95 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 5: "[v3,5/5] riscv: vdso: Implement __vdso_futex_robust_try_unlock()"
checkpatch
Desc: Runs checkpatch.pl on the patch
Duration: 4.36 seconds
Result: WARNING
Output:

WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#125: 
new file mode 100644

CHECK: No space is necessary after a cast
#248: FILE: arch/riscv/kernel/vdso.c:76:
+	unsigned long vdso = (unsigned long) current->mm->context.vdso;

WARNING: Argument 'pop_size' is not used in function-like macro
#329: FILE: arch/riscv/kernel/vdso/futex.c:10:
+#define futex_robust_try_unlock_cas(pop_size, store_pop, lock, tid, pop)	\
+({										\
+	/*									\

WARNING: Argument 'store_pop' is not used in function-like macro
#329: FILE: arch/riscv/kernel/vdso/futex.c:10:
+#define futex_robust_try_unlock_cas(pop_size, store_pop, lock, tid, pop)	\
+({										\
+	/*									\

WARNING: Argument 'lock' is not used in function-like macro
#329: FILE: arch/riscv/kernel/vdso/futex.c:10:
+#define futex_robust_try_unlock_cas(pop_size, store_pop, lock, tid, pop)	\
+({										\
+	/*									\

WARNING: Argument 'tid' is not used in function-like macro
#329: FILE: arch/riscv/kernel/vdso/futex.c:10:
+#define futex_robust_try_unlock_cas(pop_size, store_pop, lock, tid, pop)	\
+({										\
+	/*									\

WARNING: Argument 'pop' is not used in function-like macro
#329: FILE: arch/riscv/kernel/vdso/futex.c:10:
+#define futex_robust_try_unlock_cas(pop_size, store_pop, lock, tid, pop)	\
+({										\
+	/*									\

WARNING: Avoid unnecessary line continuations
#340: FILE: arch/riscv/kernel/vdso/futex.c:21:
+	 */									\

CHECK: Concatenated strings should use spaces between elements
#348: FILE: arch/riscv/kernel/vdso/futex.c:29:
+		"	bne %[ret], %[tid], "LABEL(pop_size, cas_end)"\n"	\

CHECK: Concatenated strings should use spaces between elements
#349: FILE: arch/riscv/kernel/vdso/futex.c:30:
+		"	"store_pop" zero, (%[pop])\n"				\

CHECK: Concatenated strings should use spaces between elements
#368: FILE: arch/riscv/kernel/vdso/futex.c:49:
+		"	bne %[ret], %[tid], "LABEL(pop_size, lrsc_end)"\n"	\

CHECK: Concatenated strings should use spaces between elements
#372: FILE: arch/riscv/kernel/vdso/futex.c:53:
+		"	"store_pop" zero, (%[pop])\n"				\

CHECK: Please don't use multiple blank lines
#384: FILE: arch/riscv/kernel/vdso/futex.c:65:
+
+

total: 0 errors, 7 warnings, 6 checks, 268 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
      mechanically convert to the typical style using --fix or --fix-inplace.

Commit 89bd794d5bce ("riscv: vdso: Implement __vdso_futex_robust_try_unlock()") has style problems, please review.

NOTE: Ignored message types: ALLOC_SIZEOF_STRUCT CAMELCASE COMMIT_LOG_LONG_LINE GIT_COMMIT_ID MACRO_ARG_REUSE NO_AUTHOR_SIGN_OFF

NOTE: If any of the errors are false positives, please report
      them to the maintainer, see CHECKPATCH in MAINTAINERS.
total: 0 errors, 7 warnings, 6 checks, 268 lines checked
CHECK: Concatenated strings should use spaces between elements
CHECK: No space is necessary after a cast
CHECK: Please don't use multiple blank lines
WARNING: Argument 'lock' is not used in function-like macro
WARNING: Argument 'pop' is not used in function-like macro
WARNING: Argument 'pop_size' is not used in function-like macro
WARNING: Argument 'store_pop' is not used in function-like macro
WARNING: Argument 'tid' is not used in function-like macro
WARNING: Avoid unnecessary line continuations
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?


@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 5: "[v3,5/5] riscv: vdso: Implement __vdso_futex_robust_try_unlock()"
dtb-warn-rv64
Desc: Checks for Device Tree warnings/errors
Duration: 85.82 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 5: "[v3,5/5] riscv: vdso: Implement __vdso_futex_robust_try_unlock()"
header-inline
Desc: Detects static functions without inline keyword in header files
Duration: 0.25 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 5: "[v3,5/5] riscv: vdso: Implement __vdso_futex_robust_try_unlock()"
kdoc
Desc: Detects for kdoc errors
Duration: 0.90 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 5: "[v3,5/5] riscv: vdso: Implement __vdso_futex_robust_try_unlock()"
module-param
Desc: Detect module_param changes
Duration: 0.28 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 5: "[v3,5/5] riscv: vdso: Implement __vdso_futex_robust_try_unlock()"
verify-fixes
Desc: Verifies that the Fixes: tags exist
Duration: 0.24 seconds
Result: PASS

@linux-riscv-bot

Copy link
Copy Markdown
Author

Patch 5: "[v3,5/5] riscv: vdso: Implement __vdso_futex_robust_try_unlock()"
verify-signedoff
Desc: Verifies that Signed-off-by: tags are correct
Duration: 0.29 seconds
Result: PASS

@linux-riscv-bot
linux-riscv-bot force-pushed the workflow__riscv__fixes branch from 8ca72ef to 60e0882 Compare July 19, 2026 17:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants