[PATCH v2 2/2] lib: tests: Add HSM hart ID validation test

Shibo Zhu 3499129952 at qq.com
Thu Oct 29 20:05:03 PDT 2026


Add SBIUnit coverage for HART_GET_STATUS with the current hart ID and,
on RV64, the same ID with bit 32 set. Verify that the oversized value is
rejected instead of aliasing the current hart.

Signed-off-by: Shibo Zhu <3499129952 at qq.com>
---
 lib/sbi/tests/objects.mk           |  3 +++
 lib/sbi/tests/sbi_ecall_hsm_test.c | 41 ++++++++++++++++++++++++++++++
 2 files changed, 44 insertions(+)
 create mode 100644 lib/sbi/tests/sbi_ecall_hsm_test.c

diff --git a/lib/sbi/tests/objects.mk b/lib/sbi/tests/objects.mk
index 40c441e1..dce2016e 100644
--- a/lib/sbi/tests/objects.mk
+++ b/lib/sbi/tests/objects.mk
@@ -16,6 +16,9 @@ libsbi-objs-$(CONFIG_SBIUNIT) += tests/riscv_locks_test.o
 carray-sbi_unit_tests-$(CONFIG_SBIUNIT) += math_test_suite
 libsbi-objs-$(CONFIG_SBIUNIT) += tests/sbi_math_test.o
 
+carray-sbi_unit_tests-$(CONFIG_SBIUNIT) += hsm_test_suite
+libsbi-objs-$(CONFIG_SBIUNIT) += tests/sbi_ecall_hsm_test.o
+
 carray-sbi_unit_tests-$(CONFIG_SBIUNIT) += ecall_test_suite
 libsbi-objs-$(CONFIG_SBIUNIT) += tests/sbi_ecall_test.o
 
diff --git a/lib/sbi/tests/sbi_ecall_hsm_test.c b/lib/sbi/tests/sbi_ecall_hsm_test.c
new file mode 100644
index 00000000..93901a6d
--- /dev/null
+++ b/lib/sbi/tests/sbi_ecall_hsm_test.c
@@ -0,0 +1,41 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+#include <sbi/riscv_asm.h>
+#include <sbi/sbi_ecall.h>
+#include <sbi/sbi_ecall_interface.h>
+#include <sbi/sbi_error.h>
+#include <sbi/sbi_trap.h>
+#include <sbi/sbi_unit_test.h>
+
+static void hsm_hartid_test(struct sbiunit_test_case *test)
+{
+	struct sbi_ecall_extension *hsm_ext;
+	struct sbi_ecall_return out = { 0 };
+	struct sbi_trap_regs regs = { 0 };
+
+	hsm_ext = sbi_ecall_find_extension(SBI_EXT_HSM);
+	SBIUNIT_ASSERT_NE(test, hsm_ext, NULL);
+
+	regs.a0 = current_hartid();
+	SBIUNIT_ASSERT_EQ(test,
+			  hsm_ext->handle(SBI_EXT_HSM,
+					  SBI_EXT_HSM_HART_GET_STATUS,
+					  &regs, &out),
+			  SBI_OK);
+
+#if __riscv_xlen == 64
+	regs.a0 |= 1UL << 32;
+	SBIUNIT_EXPECT_EQ(test,
+			  hsm_ext->handle(SBI_EXT_HSM,
+					  SBI_EXT_HSM_HART_GET_STATUS,
+					  &regs, &out),
+			  SBI_EINVAL);
+#endif
+}
+
+static struct sbiunit_test_case hsm_tests[] = {
+	SBIUNIT_TEST_CASE(hsm_hartid_test),
+	SBIUNIT_END_CASE,
+};
+
+SBIUNIT_TEST_SUITE(hsm_test_suite, hsm_tests);
-- 
2.43.0




More information about the opensbi mailing list