From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH 0/1] trace all instructions whose emulation failed Date: Mon, 19 Apr 2010 12:20:37 +0300 Message-ID: <4BCC2065.6020308@redhat.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org To: Manish Regmi Return-path: Received: from mx1.redhat.com ([209.132.183.28]:59300 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751350Ab0DSJUj (ORCPT ); Mon, 19 Apr 2010 05:20:39 -0400 In-Reply-To: Sender: kvm-owner@vger.kernel.org List-ID: On 04/18/2010 09:33 AM, Manish Regmi wrote: > Hi, > The following patch makes sure all code path of failed emulation > runs trace_kvm_emulate_insn_failed(). > Please let me know if there is anything missing or wrong. > Thank you. > > Signed-off-by: Manish Regmi > -------- > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index b6e7535..fd1e875 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -3784,36 +3784,35 @@ int emulate_instruction(struct kvm_vcpu *vcpu, > c =&vcpu->arch.emulate_ctxt.decode; > if (emulation_type& EMULTYPE_TRAP_UD) { > if (!c->twobyte) > - return EMULATE_FAIL; > + goto emulate_failed; > switch (c->b) { > case 0x01: /* VMMCALL */ > if (c->modrm_mod != 3 || c->modrm_rm != 1) > - return EMULATE_FAIL; > + goto emulate_failed; > break; > case 0x34: /* sysenter */ > case 0x35: /* sysexit */ > if (c->modrm_mod != 0 || c->modrm_rm != 0) > - return EMULATE_FAIL; > + goto emulate_failed; > break; > case 0x05: /* syscall */ > if (c->modrm_mod != 0 || c->modrm_rm != 0) > - return EMULATE_FAIL; > + goto emulate_failed;; > break; > default: > - return EMULATE_FAIL; > + goto emulate_failed; > } > > if (!(c->modrm_reg == 0 || c->modrm_reg == 3)) > - return EMULATE_FAIL; > + goto emulate_failed; > } > > ++vcpu->stat.insn_emulation; > if (r) { > ++vcpu->stat.insn_emulation_fail; > - trace_kvm_emulate_insn_failed(vcpu); > if (kvm_mmu_unprotect_page_virt(vcpu, cr2)) > return EMULATE_DONE; > - return EMULATE_FAIL; > + goto emulate_failed; > } > } > > It's better not to trace #UD triggered emulations, since we except these to fail, for example if the guest executes the UD2 instruction. -- error compiling committee.c: too many arguments to function