[kvm-unit-tests PATCH v11 8/8] riscv: sbi: Add SSE extension tests
Andrew Jones
andrew.jones at linux.dev
Thu Mar 20 06:40:16 PDT 2025
On Mon, Mar 17, 2025 at 05:46:53PM +0100, Clément Léger wrote:
...
> + /* Test all flags allowed for SBI_SSE_ATTR_INTERRUPTED_FLAGS */
> + attr = SBI_SSE_ATTR_INTERRUPTED_FLAGS;
> + ret = sbi_sse_read_attrs(event_id, attr, 1, &prev_value);
> + sbiret_report_error(&ret, SBI_SUCCESS, "Save interrupted flags");
> +
> + for (i = 0; i < ARRAY_SIZE(interrupted_flags); i++) {
> + flags = interrupted_flags[i];
> + ret = sbi_sse_write_attrs(event_id, attr, 1, &flags);
> + sbiret_report_error(&ret, SBI_SUCCESS,
> + "Set interrupted flags bit 0x%lx value", flags);
> + ret = sbi_sse_read_attrs(event_id, attr, 1, &value);
> + sbiret_report_error(&ret, SBI_SUCCESS, "Get interrupted flags after set");
> + report(value == flags, "interrupted flags modified value: 0x%lx", value);
> + }
> +
> + /* Write invalid bit in flag register */
> + flags = SBI_SSE_ATTR_INTERRUPTED_FLAGS_SSTATUS_SDT << 1;
> + ret = sbi_sse_write_attrs(event_id, attr, 1, &flags);
> + sbiret_report_error(&ret, SBI_ERR_INVALID_PARAM, "Set invalid flags bit 0x%lx value error",
> + flags);
> +
> + flags = BIT(SBI_SSE_ATTR_INTERRUPTED_FLAGS_SSTATUS_SDT + 1);
This broke compiling for rv32, but just changing it to BIT_ULL wouldn't be
right either since SBI_SSE_ATTR_INTERRUPTED_FLAGS_SSTATUS_SDT is a BIT().
I think the test just above this one is what this test was aiming to do,
making it redundant. Instead of removing it, I changed it as below to get
more coverage, at least on rv64.
Thanks,
drew
diff --git a/riscv/sbi-sse.c b/riscv/sbi-sse.c
index fb4ee7dd44b2..f9e389728616 100644
--- a/riscv/sbi-sse.c
+++ b/riscv/sbi-sse.c
@@ -495,10 +495,12 @@ static void sse_simple_handler(void *data, struct pt_regs *regs, unsigned int ha
sbiret_report_error(&ret, SBI_ERR_INVALID_PARAM, "Set invalid flags bit 0x%lx value error",
flags);
- flags = BIT(SBI_SSE_ATTR_INTERRUPTED_FLAGS_SSTATUS_SDT + 1);
+#if __riscv_xlen > 32
+ flags = BIT(32);
ret = sbi_sse_write_attrs(event_id, attr, 1, &flags);
sbiret_report_error(&ret, SBI_ERR_INVALID_PARAM, "Set invalid flags bit 0x%lx value error",
flags);
+#endif
ret = sbi_sse_write_attrs(event_id, attr, 1, &prev_value);
sbiret_report_error(&ret, SBI_SUCCESS, "Restore interrupted flags");
More information about the kvm-riscv
mailing list