[kvm-unit-tests PATCH v2 11/11] riscv: sbi: Add bad fid tests
Andrew Jones
andrew.jones at linux.dev
Thu Feb 27 06:22:39 PST 2025
Ensure we get the correct error code when attempting to use an
invalid FID.
Signed-off-by: Andrew Jones <andrew.jones at linux.dev>
---
riscv/sbi-fwft.c | 2 ++
riscv/sbi-tests.h | 2 ++
riscv/sbi.c | 18 ++++++++++++++++++
3 files changed, 22 insertions(+)
diff --git a/riscv/sbi-fwft.c b/riscv/sbi-fwft.c
index ca4d49b5db85..ac2e34869dfa 100644
--- a/riscv/sbi-fwft.c
+++ b/riscv/sbi-fwft.c
@@ -339,6 +339,8 @@ void check_fwft(void)
return;
}
+ sbi_bad_fid(SBI_EXT_FWFT);
+
fwft_check_base();
fwft_check_misaligned_exc_deleg();
fwft_check_pte_ad_hw_updating();
diff --git a/riscv/sbi-tests.h b/riscv/sbi-tests.h
index 7c7fe30541e4..f8ce3c269d48 100644
--- a/riscv/sbi-tests.h
+++ b/riscv/sbi-tests.h
@@ -70,5 +70,7 @@
#define sbiret_check(ret, expected_error, expected_value) \
sbiret_report(ret, expected_error, expected_value, "check sbi.error and sbi.value")
+void sbi_bad_fid(int ext);
+
#endif /* __ASSEMBLY__ */
#endif /* _RISCV_SBI_TESTS_H_ */
diff --git a/riscv/sbi.c b/riscv/sbi.c
index 1d9d1871a28b..0404bb81317d 100644
--- a/riscv/sbi.c
+++ b/riscv/sbi.c
@@ -72,6 +72,12 @@ static struct sbiret sbi_system_suspend_raw(unsigned long sleep_type, unsigned l
return sbi_ecall(SBI_EXT_SUSP, 0, sleep_type, resume_addr, opaque, 0, 0, 0);
}
+void sbi_bad_fid(int ext)
+{
+ struct sbiret ret = sbi_ecall(ext, 0xbad, 0, 0, 0, 0, 0, 0);
+ sbiret_report_error(&ret, SBI_ERR_NOT_SUPPORTED, "Bad FID");
+}
+
static void start_cpu(void *data)
{
/* nothing to do */
@@ -178,6 +184,8 @@ static void check_base(void)
report_prefix_push("base");
+ sbi_bad_fid(SBI_EXT_BASE);
+
ret = sbi_base(SBI_EXT_BASE_GET_SPEC_VERSION, 0);
report_prefix_push("spec_version");
@@ -331,6 +339,8 @@ static void check_time(void)
return;
}
+ sbi_bad_fid(SBI_EXT_TIME);
+
report_prefix_push("set_timer");
install_irq_handler(IRQ_S_TIMER, timer_irq_handler);
@@ -438,6 +448,8 @@ static void check_ipi(void)
return;
}
+ sbi_bad_fid(SBI_EXT_IPI);
+
if (nr_cpus_present < 2) {
report_skip("At least 2 cpus required");
report_prefix_pop();
@@ -731,6 +743,8 @@ static void check_hsm(void)
return;
}
+ sbi_bad_fid(SBI_EXT_HSM);
+
report_prefix_push("hart_get_status");
hartid = current_thread_info()->hartid;
@@ -1210,6 +1224,8 @@ static void check_dbcn(void)
return;
}
+ sbi_bad_fid(SBI_EXT_DBCN);
+
report_prefix_push("write");
dbcn_write_test(DBCN_WRITE_TEST_STRING, num_bytes, false);
@@ -1475,6 +1491,8 @@ static void check_susp(void)
return;
}
+ sbi_bad_fid(SBI_EXT_SUSP);
+
timer_setup(susp_timer);
local_irq_enable();
timer_start(SBI_SUSP_TIMER_DURATION_US);
--
2.48.1
More information about the kvm-riscv
mailing list