On Sat, Feb 26, 2011 at 12:23 AM, Arun Sharma <asha...@fb.com> wrote: > This is for supporting uncore events. > > I tested this diff with Lin Ming's uncore patch against the kernel > http://thread.gmane.org/gmane.linux.kernel/1071064 > > diff --git a/include/perfmon/perf_event.h b/include/perfmon/perf_event.h > index defc88e..de5691e 100644 > --- a/include/perfmon/perf_event.h > +++ b/include/perfmon/perf_event.h > @@ -29,6 +29,7 @@ enum perf_type_id { > PERF_TYPE_HW_CACHE = 3, > PERF_TYPE_RAW = 4, > PERF_TYPE_BREAKPOINT = 5, > + PERF_TYPE_UNCORE = 6, > PERF_TYPE_MAX, /* non-ABI */ > }; > > diff --git a/lib/pfmlib_intel_nhm_unc.c b/lib/pfmlib_intel_nhm_unc.c > index 7fcdf28..1221190 100644 > --- a/lib/pfmlib_intel_nhm_unc.c > +++ b/lib/pfmlib_intel_nhm_unc.c > @@ -100,17 +100,23 @@ pfm_wsm_unc_detect(void *this) > return PFM_SUCCESS; > } > > +#ifdef __linux__ > +#include "pfmlib_perf_event_priv.h" > static int > intel_nhm_unc_perf_encode(void *this, pfmlib_event_desc_t *e) > { > -#if 0 > struct perf_event_attr *attr = e->os_data; > - /* not yet supported by perf_event */ > - attr->type = PERF_TYPE_RAW; > + attr->type = PERF_TYPE_UNCORE; > attr->config = e->codes[0]; > -#endif > - return PFM_ERR_NOTSUPP; > + /* Can't exclude anything */ > + attr->exclude_user = 0; > + attr->exclude_kernel = 0; > + attr->exclude_hv = 0; > + attr->exclude_idle = 0; > + > + return PFM_SUCCESS; > } > +#endif > > static int > intel_nhm_unc_os_encode(void *this, pfmlib_event_desc_t *e) > diff --git a/lib/pfmlib_perf_event.c b/lib/pfmlib_perf_event.c > index 879efb6..1c7a90b 100644 > --- a/lib/pfmlib_perf_event.c > +++ b/lib/pfmlib_perf_event.c > @@ -83,6 +83,7 @@ pfmlib_perf_event_encode(void *this, const char *str, int > dfl_plm, void *data) > > e.osid = os->id; > e.os_data = attr; > + e.dfl_plm = dfl_plm; > That bit could be passed but I think it is useless in most cases, perf_event controls priv levels.
Now the one thing that I need to handle better is that for uncore-type of PMU, dfl_plm better be PLM0|PLM3. Otherwise, libpfm4 needs to return an error. I want something explicit so that people understand that uncore PMU ALWAYS monitor at both user + kernel. Silent errors are nasty, so I want to try and avoid that as much as possible. > ret = pfmlib_parse_event(str, &e); > if (ret != PFM_SUCCESS) > ------------------------------------------------------------------------------ Free Software Download: Index, Search & Analyze Logs and other IT data in Real-Time with Splunk. Collect, index and harness all the fast moving IT data generated by your applications, servers and devices whether physical, virtual or in the cloud. Deliver compliance at lower cost and gain new business insights. http://p.sf.net/sfu/splunk-dev2dev _______________________________________________ perfmon2-devel mailing list perfmon2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/perfmon2-devel