On 09/10/2010 06:34 PM, Joerg Roedel wrote:
This patch adds a test to check if the selective cr0
intercept emulation of the kvm svm emulation works.
Signed-off-by: Joerg Roedel<[email protected]>
---
x86/svm.c | 37 ++++++++++++++++++++++++++++++++++++-
1 files changed, 36 insertions(+), 1 deletions(-)
diff --git a/x86/svm.c b/x86/svm.c
index 2f1c900..e65360e 100644
--- a/x86/svm.c
+++ b/x86/svm.c
@@ -357,6 +357,40 @@ static bool check_asid_zero(struct test *test)
return test->vmcb->control.exit_code == SVM_EXIT_ERR;
}
+static void sel_cr0_prepare(struct test *test)
+{
+ vmcb_ident(test->vmcb);
+ test->vmcb->control.intercept |= (1ULL<< INTERCEPT_SELECTIVE_CR0);
+}
+
+static bool sel_cr0_finished(struct test *test)
+{
+ return true;
+}
Coding style - kvm-unit-tests uses the qemu style. Please drop the tabs
from new code.
+
+static void sel_cr0_test(struct test *test)
+{
+ unsigned long cr0;
+
+ /* read cr0, clear CD, and write back */
set CD. Better to ^= it to be sure to trigger.
+ cr0 = read_cr0();
+ cr0 |= (1UL<< 30);
+ write_cr0(cr0);
How about a test that ^= TS to see that we don't intercept unnecessarily?
+
+ /*
+ * If we are here the test failed, not sure what to do now because we
+ * are not in guest-mode anymore so we can't trigger an intercept.
+ * Trigger a tripple-fault for now.
+ */
+ printf("sel_cr0 test failed. Can not recover from this - exiting\n");
+ exit(1);
Don't understand - we're still in guest mode (only running very
slowly...). All you have to do is fall off the end here, and you'll
exit with VMMCALL.
--
error compiling committee.c: too many arguments to function
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html