From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH kvm-unit-tests 08/10] Check whether in long mode before testing vmexit caused by cr8 access Date: Tue, 24 Aug 2010 16:58:20 +0300 Message-ID: <4C73CFFC.2060004@redhat.com> References: <20100824134523.17082.8727.stgit@FreeLancer> <20100824134751.17082.29122.stgit@FreeLancer> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: mtosatti@redhat.com, kvm@vger.kernel.org To: Jason Wang Return-path: Received: from mx1.redhat.com ([209.132.183.28]:56688 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755329Ab0HXN6W (ORCPT ); Tue, 24 Aug 2010 09:58:22 -0400 Received: from int-mx08.intmail.prod.int.phx2.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o7ODwMDe027469 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 24 Aug 2010 09:58:22 -0400 Received: from cleopatra.tlv.redhat.com (cleopatra.tlv.redhat.com [10.35.255.11]) by int-mx08.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o7ODwL3n011243 for ; Tue, 24 Aug 2010 09:58:21 -0400 In-Reply-To: <20100824134751.17082.29122.stgit@FreeLancer> Sender: kvm-owner@vger.kernel.org List-ID: On 08/24/2010 04:47 PM, Jason Wang wrote: > CR8 is only availabe when in long mode. > > Signed-off-by: Jason Wang > --- > x86/vmexit.c | 14 ++++++++++++-- > 1 files changed, 12 insertions(+), 2 deletions(-) > > diff --git a/x86/vmexit.c b/x86/vmexit.c > index 819c24b..34b0af4 100644 > --- a/x86/vmexit.c > +++ b/x86/vmexit.c > @@ -48,6 +48,7 @@ static void vmcall(void) > > #define MSR_EFER 0xc0000080 > #define EFER_NX_MASK (1ull<< 11) > +#define EFER_LMA_MASK (1ull<< 10) > > static void mov_from_cr8(void) > { > @@ -68,6 +69,15 @@ static int is_smp(void) > return cpu_count()> 1; > } > > +static int is_long_mode(void) > +{ > +#ifdef __i386__ > + return 0; > +#else > + return rdmsr(MSR_EFER) | EFER_LMA_MASK; > +#endif > +} > + > static void nop(void *junk) > { > } > @@ -100,8 +110,8 @@ static struct test { > } tests[] = { > { cpuid_test, "cpuid", .parallel = 1, }, > { vmcall, "vmcall", .parallel = 1, }, > - { mov_from_cr8, "mov_from_cr8", .parallel = 1, }, > - { mov_to_cr8, "mov_to_cr8" , .parallel = 1, }, > + { mov_from_cr8, "mov_from_cr8", is_long_mode, .parallel = 1, }, > + { mov_to_cr8, "mov_to_cr8" , is_long_mode, .parallel = 1, }, > { inl_pmtimer, "inl_from_pmtimer", .parallel = 1, }, > { ipi, "ipi", is_smp, .parallel = 0, }, > { ipi_halt, "ipi+halt", is_smp, .parallel = 0, }, Enough to #ifdef __x86_64__. If it's defined we're in long mode. -- error compiling committee.c: too many arguments to function