From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gleb Natapov Subject: Re: [PATCH] KVM: Trace exception injection Date: Thu, 11 Mar 2010 13:09:02 +0200 Message-ID: <20100311110902.GE16909@redhat.com> References: <1268305392-23211-1-git-send-email-avi@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: kvm@vger.kernel.org To: Avi Kivity Return-path: Received: from mx1.redhat.com ([209.132.183.28]:44863 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757084Ab0CKLJE (ORCPT ); Thu, 11 Mar 2010 06:09:04 -0500 Received: from int-mx03.intmail.prod.int.phx2.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o2BB93w3011460 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 11 Mar 2010 06:09:03 -0500 Content-Disposition: inline In-Reply-To: <1268305392-23211-1-git-send-email-avi@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On Thu, Mar 11, 2010 at 01:03:12PM +0200, Avi Kivity wrote: > Often an exception can help point out where things start to go wrong. > Adding guest rip where exception happened will be useful too. > Signed-off-by: Avi Kivity > --- > arch/x86/kvm/trace.h | 32 ++++++++++++++++++++++++++++++++ > arch/x86/kvm/x86.c | 3 +++ > 2 files changed, 35 insertions(+), 0 deletions(-) > > diff --git a/arch/x86/kvm/trace.h b/arch/x86/kvm/trace.h > index d10b359..32c912c 100644 > --- a/arch/x86/kvm/trace.h > +++ b/arch/x86/kvm/trace.h > @@ -219,6 +219,38 @@ TRACE_EVENT(kvm_inj_virq, > TP_printk("irq %u", __entry->irq) > ); > > +#define EXS(x) { x##_VECTOR, "#" #x } > + > +#define kvm_trace_sym_exc \ > + EXS(DE), EXS(DB), EXS(BP), EXS(OF), EXS(BR), EXS(UD), EXS(NM), \ > + EXS(DF), EXS(TS), EXS(NP), EXS(SS), EXS(GP), EXS(PF), \ > + EXS(MF), EXS(MC) > + > +/* > + * Tracepoint for kvm interrupt injection: > + */ > +TRACE_EVENT(kvm_inj_exception, > + TP_PROTO(unsigned exception, bool has_error, unsigned error_code), > + TP_ARGS(exception, has_error, error_code), > + > + TP_STRUCT__entry( > + __field( u8, exception ) > + __field( u8, has_error ) > + __field( u32, error_code ) > + ), > + > + TP_fast_assign( > + __entry->exception = exception; > + __entry->has_error = has_error; > + __entry->error_code = error_code; > + ), > + > + TP_printk("%s (0x%x)", > + __print_symbolic(__entry->exception, kvm_trace_sym_exc), > + /* FIXME: don't print error_code if not present */ > + __entry->has_error ? __entry->error_code : 0) > +); > + > /* > * Tracepoint for page fault. > */ > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index 66609f6..bcf52d1 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -4231,6 +4231,9 @@ static void inject_pending_event(struct kvm_vcpu *vcpu) > { > /* try to reinject previous events if any */ > if (vcpu->arch.exception.pending) { > + trace_kvm_inj_exception(vcpu->arch.exception.nr, > + vcpu->arch.exception.has_error_code, > + vcpu->arch.exception.error_code); > kvm_x86_ops->queue_exception(vcpu, vcpu->arch.exception.nr, > vcpu->arch.exception.has_error_code, > vcpu->arch.exception.error_code); > -- > 1.7.0.2 > > -- > To unsubscribe from this list: send the line "unsubscribe kvm" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Gleb.