All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gleb Natapov <gleb@redhat.com>
To: David Ahern <dsahern@gmail.com>
Cc: kvm@vger.kernel.org, avi@redhat.com, mtosatti@redhat.com,
	linux-kernel@redhat.com, mingo@elte.hu, a.p.zijlstra@chello.nl,
	acme@ghostprotocols.net
Subject: Re: [PATCH 6/9] perf: expose perf capability to other modules.
Date: Tue, 1 Nov 2011 18:13:52 +0200	[thread overview]
Message-ID: <20111101161352.GA16539@redhat.com> (raw)
In-Reply-To: <4EB014FF.5000509@gmail.com>

On Tue, Nov 01, 2011 at 09:49:19AM -0600, David Ahern wrote:
> On 10/30/2011 10:53 AM, Gleb Natapov wrote:
> > KVM needs to know perf capability to decide which PMU it can expose to a
> > guest.
> > 
> > Signed-off-by: Gleb Natapov <gleb@redhat.com>
> > ---
> >  arch/x86/include/asm/perf_event.h      |   11 +++++++++++
> >  arch/x86/kernel/cpu/perf_event.c       |   11 +++++++++++
> >  arch/x86/kernel/cpu/perf_event.h       |    2 ++
> >  arch/x86/kernel/cpu/perf_event_intel.c |    3 +++
> >  4 files changed, 27 insertions(+), 0 deletions(-)
> > 
> > diff --git a/arch/x86/include/asm/perf_event.h b/arch/x86/include/asm/perf_event.h
> > index f61c62f..7d7e57f 100644
> > --- a/arch/x86/include/asm/perf_event.h
> > +++ b/arch/x86/include/asm/perf_event.h
> > @@ -201,7 +201,18 @@ struct perf_guest_switch_msr {
> >  	u64 host, guest;
> >  };
> >  
> > +struct x86_pmu_capability {
> > +	int version;
> > +	int num_counters_gp;
> > +	int num_counters_fixed;
> > +	int bit_width_gp;
> > +	int bit_width_fixed;
> > +	unsigned int events_mask;
> > +	int events_mask_len;
> > +};
> > +
> >  extern struct perf_guest_switch_msr *perf_guest_get_msrs(int *nr);
> > +extern void perf_get_x86_pmu_capability(struct x86_pmu_capability *cap);
> >  #else
> >  static inline perf_guest_switch_msr *perf_guest_get_msrs(int *nr)
> >  {
> 
> What about version of perf_get_x86_pmu_capability for CONFIG_PERF_EVENTS
> not enabled in host kernel? Next patch for KVM assumes the function is
> defined.
> 
As far as I understand it is not possible to build x86 without
CONFIG_PERF_EVENTS right now. Actually kvm pmu code depends on
CONFIG_PERF_EVENTS been enabled. I can easily provide the stub if
needed though.

> David
> 
> 
> > diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
> > index 6408910..94ac9ca 100644
> > --- a/arch/x86/kernel/cpu/perf_event.c
> > +++ b/arch/x86/kernel/cpu/perf_event.c
> > @@ -1570,3 +1570,14 @@ unsigned long perf_misc_flags(struct pt_regs *regs)
> >  
> >  	return misc;
> >  }
> > +
> > +void perf_get_x86_pmu_capability(struct x86_pmu_capability *cap)
> > +{
> > +	cap->version = x86_pmu.version;
> > +	cap->num_counters_gp = x86_pmu.num_counters;
> > +	cap->num_counters_fixed = x86_pmu.num_counters_fixed;
> > +	cap->bit_width_gp = cap->bit_width_fixed = x86_pmu.cntval_bits;
> > +	cap->events_mask = x86_pmu.events_mask;
> > +	cap->events_mask_len = x86_pmu.events_mask_len;
> > +}
> > +EXPORT_SYMBOL_GPL(perf_get_x86_pmu_capability);
> > diff --git a/arch/x86/kernel/cpu/perf_event.h b/arch/x86/kernel/cpu/perf_event.h
> > index b9698d4..e9ed238 100644
> > --- a/arch/x86/kernel/cpu/perf_event.h
> > +++ b/arch/x86/kernel/cpu/perf_event.h
> > @@ -259,6 +259,8 @@ struct x86_pmu {
> >  	int		num_counters_fixed;
> >  	int		cntval_bits;
> >  	u64		cntval_mask;
> > +	u32		events_mask;
> > +	int		events_mask_len;
> >  	int		apic;
> >  	u64		max_period;
> >  	struct event_constraint *
> > diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c
> > index e09ca20..64e5f35 100644
> > --- a/arch/x86/kernel/cpu/perf_event_intel.c
> > +++ b/arch/x86/kernel/cpu/perf_event_intel.c
> > @@ -1580,6 +1580,8 @@ __init int intel_pmu_init(void)
> >  	x86_pmu.num_counters		= eax.split.num_counters;
> >  	x86_pmu.cntval_bits		= eax.split.bit_width;
> >  	x86_pmu.cntval_mask		= (1ULL << eax.split.bit_width) - 1;
> > +	x86_pmu.events_mask		= ebx;
> > +	x86_pmu.events_mask_len		= eax.split.mask_length;
> >  
> >  	/*
> >  	 * Quirk: v2 perfmon does not report fixed-purpose events, so
> > @@ -1651,6 +1653,7 @@ __init int intel_pmu_init(void)
> >  			 * architectural event which is often completely bogus:
> >  			 */
> >  			intel_perfmon_event_map[PERF_COUNT_HW_BRANCH_MISSES] = 0x7f89;
> > +			x86_pmu.events_mask &= ~0x40;
> >  
> >  			pr_cont("erratum AAJ80 worked around, ");
> >  		}

--
			Gleb.

  reply	other threads:[~2011-11-01 16:14 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-30 16:53 [PATCH 0/9] KVM in-guest performance monitoring Gleb Natapov
2011-10-30 16:53 ` [PATCH 1/9] KVM: Expose kvm_lapic_local_deliver() Gleb Natapov
2011-10-30 16:53 ` [PATCH 2/9] KVM: Expose a version 2 architectural PMU to a guests Gleb Natapov
2011-11-01 10:47   ` Avi Kivity
2011-11-01 12:30     ` Gleb Natapov
2011-11-01 13:57       ` Gleb Natapov
2011-11-02  9:54         ` Avi Kivity
2011-11-02  9:56           ` Gleb Natapov
2011-11-02 10:01       ` Avi Kivity
2011-11-02 11:09         ` Gleb Natapov
2011-11-02 12:03           ` Gleb Natapov
2011-11-03  8:31           ` Gleb Natapov
2011-12-15 12:04   ` [PATCH] KVM: x86: Fix build breakage due to anonymous field initialization Jan Kiszka
2011-12-15 12:08     ` Peter Zijlstra
2011-12-15 12:16       ` Jan Kiszka
2011-12-26 12:38     ` Avi Kivity
2011-10-30 16:53 ` [PATCH 3/9] KVM: Add generic RDPMC support Gleb Natapov
2011-10-30 16:53 ` [PATCH 4/9] KVM: SVM: Intercept RDPMC Gleb Natapov
2011-10-30 16:53 ` [PATCH 5/9] KVM: VMX: " Gleb Natapov
2011-10-30 16:53 ` [PATCH 6/9] perf: expose perf capability to other modules Gleb Natapov
2011-11-01 10:49   ` Avi Kivity
2011-11-01 15:49   ` David Ahern
2011-11-01 16:13     ` Gleb Natapov [this message]
2011-11-01 16:20       ` David Ahern
2011-11-01 16:41         ` Gleb Natapov
2011-11-02  7:42         ` Frederic Weisbecker
2011-11-07 14:45           ` Will Deacon
2011-11-10  8:58             ` Frederic Weisbecker
2011-11-10 12:12               ` Jason Wessel
2011-11-15 18:34                 ` Frederic Weisbecker
2011-10-30 16:53 ` [PATCH 7/9] KVM: Expose the architectural performance monitoring CPUID leaf Gleb Natapov
2011-11-01 10:51   ` Avi Kivity
2011-11-01 11:25     ` Gleb Natapov
2011-11-01 15:49   ` David Ahern
2011-11-01 16:18     ` Gleb Natapov
2011-11-01 16:24       ` David Ahern
2011-11-01 16:40         ` Gleb Natapov
2011-11-01 17:43           ` David Ahern
2011-11-02 11:18             ` Gleb Natapov
2011-10-30 16:53 ` [PATCH 8/9] KVM: x86 emulator: fix RDPMC privilege check Gleb Natapov
2011-10-30 16:53 ` [PATCH 9/9] KVM: x86 emulator: implement RDPMC (0F 33) Gleb Natapov
2011-10-30 16:57 ` [PATCH 0/9] KVM in-guest performance monitoring Gleb Natapov
  -- strict thread matches above, loose matches on Subject: below --
2011-11-03 12:31 Gleb Natapov
2011-11-03 12:31 ` [PATCH 6/9] perf: expose perf capability to other modules Gleb Natapov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20111101161352.GA16539@redhat.com \
    --to=gleb@redhat.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@ghostprotocols.net \
    --cc=avi@redhat.com \
    --cc=dsahern@gmail.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@redhat.com \
    --cc=mingo@elte.hu \
    --cc=mtosatti@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.