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<joerg.roedel@xxxxxxx> --- 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html