KVM: selftests: Write REPORT_GUEST_ASSERT macros to pair with GUEST_ASSERT
authorColton Lewis <coltonlewis@google.com>
Wed, 15 Jun 2022 19:31:15 +0000 (19:31 +0000)
committerSean Christopherson <seanjc@google.com>
Thu, 14 Jul 2022 01:14:07 +0000 (18:14 -0700)
Write REPORT_GUEST_ASSERT macros to pair with GUEST_ASSERT to abstract
and make consistent all guest assertion reporting. Every report
includes an explanatory string, a filename, and a line number.

Signed-off-by: Colton Lewis <coltonlewis@google.com>
Reviewed-by: Andrew Jones <drjones@redhat.com>
Link: https://lore.kernel.org/r/20220615193116.806312-4-coltonlewis@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
tools/testing/selftests/kvm/include/ucall_common.h

index 568c562f14cd29687762f7df4798a551d6e39dc1..e8af3b4fef6dee94b38a1f3b4650c5960df0b797 100644 (file)
@@ -6,6 +6,7 @@
  */
 #ifndef SELFTEST_KVM_UCALL_COMMON_H
 #define SELFTEST_KVM_UCALL_COMMON_H
+#include "test_util.h"
 
 /* Common ucalls */
 enum {
@@ -64,4 +65,45 @@ enum guest_assert_builtin_args {
 
 #define GUEST_ASSERT_EQ(a, b) __GUEST_ASSERT((a) == (b), #a " == " #b, 2, a, b)
 
+#define __REPORT_GUEST_ASSERT(_ucall, fmt, _args...)                   \
+       TEST_FAIL("%s at %s:%ld\n" fmt,                                 \
+                 (const char *)(_ucall).args[GUEST_ERROR_STRING],      \
+                 (const char *)(_ucall).args[GUEST_FILE],              \
+                 (_ucall).args[GUEST_LINE],                            \
+                 ##_args)
+
+#define GUEST_ASSERT_ARG(ucall, i) ((ucall).args[GUEST_ASSERT_BUILTIN_NARGS + i])
+
+#define REPORT_GUEST_ASSERT(ucall)             \
+       __REPORT_GUEST_ASSERT((ucall), "")
+
+#define REPORT_GUEST_ASSERT_1(ucall, fmt)                      \
+       __REPORT_GUEST_ASSERT((ucall),                          \
+                             fmt,                              \
+                             GUEST_ASSERT_ARG((ucall), 0))
+
+#define REPORT_GUEST_ASSERT_2(ucall, fmt)                      \
+       __REPORT_GUEST_ASSERT((ucall),                          \
+                             fmt,                              \
+                             GUEST_ASSERT_ARG((ucall), 0),     \
+                             GUEST_ASSERT_ARG((ucall), 1))
+
+#define REPORT_GUEST_ASSERT_3(ucall, fmt)                      \
+       __REPORT_GUEST_ASSERT((ucall),                          \
+                             fmt,                              \
+                             GUEST_ASSERT_ARG((ucall), 0),     \
+                             GUEST_ASSERT_ARG((ucall), 1),     \
+                             GUEST_ASSERT_ARG((ucall), 2))
+
+#define REPORT_GUEST_ASSERT_4(ucall, fmt)                      \
+       __REPORT_GUEST_ASSERT((ucall),                          \
+                             fmt,                              \
+                             GUEST_ASSERT_ARG((ucall), 0),     \
+                             GUEST_ASSERT_ARG((ucall), 1),     \
+                             GUEST_ASSERT_ARG((ucall), 2),     \
+                             GUEST_ASSERT_ARG((ucall), 3))
+
+#define REPORT_GUEST_ASSERT_N(ucall, fmt, args...)     \
+       __REPORT_GUEST_ASSERT((ucall), fmt, ##args)
+
 #endif /* SELFTEST_KVM_UCALL_COMMON_H */