[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,
+ ®s, &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,
+ ®s, &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