From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH 1/7] svm: Add test for selective cr0 intercept Date: Sun, 12 Sep 2010 11:06:34 +0200 Message-ID: <4C8C981A.9070303@redhat.com> References: <1284132850-19302-1-git-send-email-joerg.roedel@amd.com> <1284132850-19302-2-git-send-email-joerg.roedel@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Marcelo Tosatti , kvm@vger.kernel.org To: Joerg Roedel Return-path: Received: from mx1.redhat.com ([209.132.183.28]:65489 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751783Ab0ILJGj (ORCPT ); Sun, 12 Sep 2010 05:06:39 -0400 In-Reply-To: <1284132850-19302-2-git-send-email-joerg.roedel@amd.com> Sender: kvm-owner@vger.kernel.org List-ID: 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 > --- > 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