[kvm-unit-tests PATCH v11 8/8] riscv: sbi: Add SSE extension tests

Clément Léger cleger at rivosinc.com
Thu Mar 20 06:44:30 PDT 2025



On 20/03/2025 14:40, Andrew Jones wrote:
> 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.

Hum yeah indeed, that wasn't what was intended to be done. You fix is
correct.

Thanks,

Clément

> 
> 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