Merge tag 'pull-request-2020-09-28' of https://gitlab.com/huth/kvm-unit-tests
- s390x protected VM support
- Some other small s390x improvements
- Generic improvements in the scripts (better TAP13 names, nc -> ncat, ...)
diff --git a/scripts/runtime.bash b/scripts/runtime.bash
index 294e6b1..3121c1f 100644
--- a/scripts/runtime.bash
+++ b/scripts/runtime.bash
@@ -118,7 +118,7 @@
for check_param in "${check[@]}"; do
path=${check_param%%=*}
value=${check_param#*=}
- if [ "$path" ] && [ "$(cat $path)" != "$value" ]; then
+ if [ -f "$path" ] && [ "$(cat $path)" != "$value" ]; then
print_result "SKIP" $testname "" "$path not equal to $value"
return 2
fi
diff --git a/x86/svm_tests.c b/x86/svm_tests.c
index e9f178a..f78c9e4 100644
--- a/x86/svm_tests.c
+++ b/x86/svm_tests.c
@@ -1988,7 +1988,51 @@
SVM_TEST_REG_RESERVED_BITS(16, 63, 4, "EFER", vmcb->save.efer,
efer_saved, SVM_EFER_RESERVED_MASK);
+ /*
+ * EFER.LME and CR0.PG are both set and CR4.PAE is zero.
+ */
+ u64 cr0_saved = vmcb->save.cr0;
+ u64 cr0;
+ u64 cr4_saved = vmcb->save.cr4;
+ u64 cr4;
+
+ efer = efer_saved | EFER_LME;
+ vmcb->save.efer = efer;
+ cr0 = cr0_saved | X86_CR0_PG | X86_CR0_PE;
+ vmcb->save.cr0 = cr0;
+ cr4 = cr4_saved & ~X86_CR4_PAE;
+ vmcb->save.cr4 = cr4;
+ report(svm_vmrun() == SVM_EXIT_ERR, "EFER.LME=1 (%lx), "
+ "CR0.PG=1 (%lx) and CR4.PAE=0 (%lx)", efer, cr0, cr4);
+
+ /*
+ * EFER.LME and CR0.PG are both set and CR0.PE is zero.
+ */
+ vmcb->save.cr4 = cr4_saved | X86_CR4_PAE;
+ cr0 &= ~X86_CR0_PE;
+ vmcb->save.cr0 = cr0;
+ report(svm_vmrun() == SVM_EXIT_ERR, "EFER.LME=1 (%lx), "
+ "CR0.PG=1 and CR0.PE=0 (%lx)", efer, cr0);
+
+ /*
+ * EFER.LME, CR0.PG, CR4.PAE, CS.L, and CS.D are all non-zero.
+ */
+ u32 cs_attrib_saved = vmcb->save.cs.attrib;
+ u32 cs_attrib;
+
+ cr0 |= X86_CR0_PE;
+ vmcb->save.cr0 = cr0;
+ cs_attrib = cs_attrib_saved | SVM_SELECTOR_L_MASK |
+ SVM_SELECTOR_DB_MASK;
+ vmcb->save.cs.attrib = cs_attrib;
+ report(svm_vmrun() == SVM_EXIT_ERR, "EFER.LME=1 (%lx), "
+ "CR0.PG=1 (%lx), CR4.PAE=1 (%lx), CS.L=1 and CS.D=1 (%x)",
+ efer, cr0, cr4, cs_attrib);
+
+ vmcb->save.cr0 = cr0_saved;
+ vmcb->save.cr4 = cr4_saved;
vmcb->save.efer = efer_saved;
+ vmcb->save.cs.attrib = cs_attrib_saved;
}
static void test_cr0(void)
diff --git a/x86/unittests.cfg b/x86/unittests.cfg
index 3a79151..bab1cce 100644
--- a/x86/unittests.cfg
+++ b/x86/unittests.cfg
@@ -116,7 +116,15 @@
[access]
file = access.flat
arch = x86_64
-extra_params = -cpu host,host-phys-bits
+extra_params = -cpu max
+timeout = 180
+
+[access-reduced-maxphyaddr]
+file = access.flat
+arch = x86_64
+extra_params = -cpu IvyBridge,phys-bits=36,host-phys-bits=off
+timeout = 180
+check = /sys/module/kvm_intel/parameters/allow_smaller_maxphyaddr=Y
[smap]
file = smap.flat