From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH] Ignore DEBUGCTL MSRs Date: Thu, 10 Jul 2008 17:01:53 +0300 Message-ID: <48761651.3030407@qumranet.com> References: <4860806D.6000608@suse.de> <486F6904.2040907@qumranet.com> <4874B3B7.7060003@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, joerg.roedel@amd.com To: Alexander Graf Return-path: Received: from il.qumranet.com ([212.179.150.194]:22156 "EHLO il.qumranet.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754650AbYGJOBy (ORCPT ); Thu, 10 Jul 2008 10:01:54 -0400 In-Reply-To: <4874B3B7.7060003@suse.de> Sender: kvm-owner@vger.kernel.org List-ID: Alexander Graf wrote: > Avi Kivity wrote: >> Alexander Graf wrote: >>> Netware writes and reads to the DEBUGCTL and LAST*IP MSRs without >>> further checks and is really confused to receive a #GP during that. >>> To make it happy we should just make them stubs, which is exactly >>> what SVM already does. >>> >>> To support VMX too, I put these in the generic code. Maybe the SVM >>> code could be cleaned up to use generic code too. >>> >> >> Please add a pr_unimpl() when bits that cause a real processor to do >> something are set. > > Like this? I also removed the set handlers for the *IP MSRs, as these > are read only and made it only handle debug bits, no perfmon bits. > With a changelog entry. > Signed-off-by: Alexander Graf > > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index fc0721e..10f5e95 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -609,6 +609,15 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data) > pr_unimpl(vcpu, "%s: MSR_IA32_MCG_CTL 0x%llx, nop\n", > __func__, data); > break; > + case MSR_IA32_DEBUGCTLMSR: > + if (data > (DEBUGCTLMSR_LBR | DEBUGCTLMSR_BTF)) { > + /* Values other than LBR and BTF are vendor-specific, > + thus reserved and should throw a #GP */ > + return 1; > + } > '>' is too clever. '& ~(u64)(...)' is clearer. Arithmetic and logical ops don't mix well. > + pr_unimpl(vcpu, "%s: MSR_IA32_DEBUGCTLMSR 0x%llx, nop\n", > + __func__, data); > We can avoid the printout if data == 0, since we support that case fully. -- error compiling committee.c: too many arguments to function