[kvm-unit-tests PATCH v2 11/11] riscv: sbi: Add bad fid tests
Clément Léger
cleger at rivosinc.com
Thu Feb 27 06:33:52 PST 2025
On 27/02/2025 15:22, Andrew Jones wrote:
> 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);
Hi Andrew,
Even though it does not validate *all* invalid fid (which would be of
course too long), at least that's something.
Reviewed-by: Clément Léger <cleger at rivosinc.com>
Thanks,
Clément
More information about the kvm-riscv
mailing list