[kvm-unit-tests PATCH v2 3/3] riscv: sbi: Add sbiret_report_error
Andrew Jones
andrew.jones at linux.dev
Tue Feb 18 10:54:04 PST 2025
An sbiret value may be unspecified in the case of errors, and even in
the case of success when the function doesn't return anything.
Provide an sbiret report function that only checks sbiret.error.
sbiret_report_error() has a different PASS format than
sbiret_report(). The former will always output the stringized
expected error so the format string doesn't need to contain it, e.g.
PASS: sbi: test foo: SBI_SUCCESS
PASS: sbi: test event id 0x0: SBI_INVALID_PARAM
Signed-off-by: Andrew Jones <andrew.jones at linux.dev>
---
riscv/sbi-tests.h | 21 ++++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)
diff --git a/riscv/sbi-tests.h b/riscv/sbi-tests.h
index 2bdc9440d82d..7a24e083a7b8 100644
--- a/riscv/sbi-tests.h
+++ b/riscv/sbi-tests.h
@@ -36,20 +36,35 @@
#ifndef __ASSEMBLY__
#include <asm/sbi.h>
-#define sbiret_report(ret, expected_error, expected_value, fmt, ...) ({ \
+#define __sbiret_report(ret, expected_error, expected_value, has_value, expected_error_name, fmt, ...) ({ \
long ex_err = expected_error; \
long ex_val = expected_value; \
+ bool has_val = !!(has_value); \
bool ch_err = (ret)->error == ex_err; \
bool ch_val = (ret)->value == ex_val; \
- bool pass = report(ch_err && ch_val, fmt, ##__VA_ARGS__); \
+ bool pass; \
\
- if (!pass) \
+ if (has_val) \
+ pass = report(ch_err && ch_val, fmt, ##__VA_ARGS__); \
+ else \
+ pass = report(ch_err, fmt ": %s", ##__VA_ARGS__, expected_error_name); \
+ \
+ if (!pass && has_val) \
report_info(fmt ": expected (error: %ld, value: %ld), received: (error: %ld, value %ld)", \
##__VA_ARGS__, ex_err, ex_val, (ret)->error, (ret)->value); \
+ else if (!pass) \
+ report_info(fmt ": %s (%ld): received error %ld", \
+ ##__VA_ARGS__, expected_error_name, ex_err, (ret)->error); \
\
pass; \
})
+#define sbiret_report(ret, expected_error, expected_value, ...) \
+ __sbiret_report(ret, expected_error, expected_value, true, #expected_error, __VA_ARGS__)
+
+#define sbiret_report_error(ret, expected_error, ...) \
+ __sbiret_report(ret, expected_error, 0, false, #expected_error, __VA_ARGS__)
+
#define sbiret_check(ret, expected_error, expected_value) \
sbiret_report(ret, expected_error, expected_value, "check sbi.error and sbi.value")
--
2.48.1
More information about the kvm-riscv
mailing list