4
4
*
5
5
* Tests for Hyper-V features enablement
6
6
*/
7
+ #define USE_GUEST_ASSERT_PRINTF 1
8
+
7
9
#include <asm/kvm_para.h>
8
10
#include <linux/kvm_para.h>
9
11
#include <stdint.h>
@@ -53,16 +55,21 @@ static void guest_msr(struct msr_data *msr)
53
55
vector = rdmsr_safe (msr -> idx , & msr_val );
54
56
55
57
if (msr -> fault_expected )
56
- GUEST_ASSERT_3 (vector == GP_VECTOR , msr -> idx , vector , GP_VECTOR );
58
+ __GUEST_ASSERT (vector == GP_VECTOR ,
59
+ "Expected #GP on %sMSR(0x%x), got vector '0x%x'" ,
60
+ msr -> idx , msr -> write ? "WR" : "RD" , vector );
57
61
else
58
- GUEST_ASSERT_3 (!vector , msr -> idx , vector , 0 );
62
+ __GUEST_ASSERT (!vector ,
63
+ "Expected success on %sMSR(0x%x), got vector '0x%x'" ,
64
+ msr -> idx , msr -> write ? "WR" : "RD" , vector );
59
65
60
66
if (vector || is_write_only_msr (msr -> idx ))
61
67
goto done ;
62
68
63
69
if (msr -> write )
64
- GUEST_ASSERT_3 (msr_val == msr -> write_val , msr -> idx ,
65
- msr_val , msr -> write_val );
70
+ __GUEST_ASSERT (!vector ,
71
+ "WRMSR(0x%x) to '0x%llx', RDMSR read '0x%llx'" ,
72
+ msr -> idx , msr -> write_val , msr_val );
66
73
67
74
/* Invariant TSC bit appears when TSC invariant control MSR is written to */
68
75
if (msr -> idx == HV_X64_MSR_TSC_INVARIANT_CONTROL ) {
@@ -82,7 +89,7 @@ static void guest_hcall(vm_vaddr_t pgs_gpa, struct hcall_data *hcall)
82
89
u64 res , input , output ;
83
90
uint8_t vector ;
84
91
85
- GUEST_ASSERT (hcall -> control );
92
+ GUEST_ASSERT_NE (hcall -> control , 0 );
86
93
87
94
wrmsr (HV_X64_MSR_GUEST_OS_ID , HYPERV_LINUX_OS_ID );
88
95
wrmsr (HV_X64_MSR_HYPERCALL , pgs_gpa );
@@ -96,10 +103,14 @@ static void guest_hcall(vm_vaddr_t pgs_gpa, struct hcall_data *hcall)
96
103
97
104
vector = __hyperv_hypercall (hcall -> control , input , output , & res );
98
105
if (hcall -> ud_expected ) {
99
- GUEST_ASSERT_2 (vector == UD_VECTOR , hcall -> control , vector );
106
+ __GUEST_ASSERT (vector == UD_VECTOR ,
107
+ "Expected #UD for control '%u', got vector '0x%x'" ,
108
+ hcall -> control , vector );
100
109
} else {
101
- GUEST_ASSERT_2 (!vector , hcall -> control , vector );
102
- GUEST_ASSERT_2 (res == hcall -> expect , hcall -> expect , res );
110
+ __GUEST_ASSERT (!vector ,
111
+ "Expected no exception for control '%u', got vector '0x%x'" ,
112
+ hcall -> control , vector );
113
+ GUEST_ASSERT_EQ (res , hcall -> expect );
103
114
}
104
115
105
116
GUEST_DONE ();
@@ -495,7 +506,7 @@ static void guest_test_msrs_access(void)
495
506
496
507
switch (get_ucall (vcpu , & uc )) {
497
508
case UCALL_ABORT :
498
- REPORT_GUEST_ASSERT_3 (uc , "MSR = %lx, arg1 = %lx, arg2 = %lx" );
509
+ REPORT_GUEST_ASSERT (uc );
499
510
return ;
500
511
case UCALL_DONE :
501
512
break ;
@@ -665,7 +676,7 @@ static void guest_test_hcalls_access(void)
665
676
666
677
switch (get_ucall (vcpu , & uc )) {
667
678
case UCALL_ABORT :
668
- REPORT_GUEST_ASSERT_2 (uc , "arg1 = %lx, arg2 = %lx" );
679
+ REPORT_GUEST_ASSERT (uc );
669
680
return ;
670
681
case UCALL_DONE :
671
682
break ;
0 commit comments