Patch applied. Thanks. On Wed, May 4, 2011 at 1:40 AM, Corey Ashford <cjash...@linux.vnet.ibm.com> wrote: > If a user specifies an event code with ":u=<n>", ":k=<n>", or > ":h=<n>" modifiers, evt2raw will now output a raw event code > which is compatible with "perf stat" and "perf record". For > example, it will translate: > > PM_RUN_CYC:k=1:u=1 > > to > > r200f4:uk > > > Without this change, the u,k, and h modifiers are simply dropped > silently by evt2raw. > > Note that in order for this to work correctly, I had to change > the default privilege mask to add hypervisor mode. > > Signed-off-by: Corey Ashford <cjash...@linux.vnet.ibm.com> > --- > perf_examples/evt2raw.c | 20 +++++++++++++++++--- > 1 files changed, 17 insertions(+), 3 deletions(-) > > diff --git a/perf_examples/evt2raw.c b/perf_examples/evt2raw.c > index 7565ce9..eab7685 100644 > --- a/perf_examples/evt2raw.c > +++ b/perf_examples/evt2raw.c > @@ -24,6 +24,7 @@ > */ > #include <stdio.h> > #include <stdlib.h> > +#include <string.h> > #include <unistd.h> > #include <err.h> > #include <perfmon/pfmlib_perf_event.h> > @@ -36,12 +37,14 @@ usage(void) > "translate to a raw code.\n"); > } > > +#define MAX_MODIFIER_CHARS 5 /* u,k,h plus the colon and null terminator */ > int > main(int argc, char **argv) > { > int ret, c, verbose = 0; > struct perf_event_attr pea; > char *event_str, *fstr = NULL; > + char modifiers[MAX_MODIFIER_CHARS]; > > if (argc < 2) { > usage(); > @@ -67,7 +70,7 @@ main(int argc, char **argv) > pfm_strerror(ret)); > > pea.size = sizeof(struct perf_event_attr); > - ret = pfm_get_perf_event_encoding(event_str, PFM_PLM0|PFM_PLM3, &pea, > + ret = pfm_get_perf_event_encoding(event_str, > PFM_PLM0|PFM_PLM3|PFM_PLMH, &pea, > &fstr, NULL); > if (ret != PFM_SUCCESS) > errx(1, "Error: pfm_get_perf_encoding returned %s", > @@ -76,10 +79,21 @@ main(int argc, char **argv) > if (pea.type != PERF_TYPE_RAW) > errx(1, "Error: %s is not a raw hardware event", event_str); > > + modifiers[0] = '\0'; > + if (pea.exclude_user | pea.exclude_kernel | pea.exclude_hv) { > + strcat(modifiers, ":"); > + if (!pea.exclude_user) > + strcat(modifiers, "u"); > + if (!pea.exclude_kernel) > + strcat(modifiers, "k"); > + if (!pea.exclude_hv) > + strcat(modifiers, "h"); > + } > + > if (verbose) > - printf("r%"PRIx64"\t%s\n", pea.config, fstr); > + printf("r%"PRIx64"%s\t%s\n", pea.config, modifiers, fstr); > else > - printf("r%"PRIx64"\n", pea.config); > + printf("r%"PRIx64"%s\n", pea.config, modifiers); > > if (fstr) > free(fstr); > -- > 1.7.0.4 > >
------------------------------------------------------------------------------ Achieve unprecedented app performance and reliability What every C/C++ and Fortran developer should know. Learn how Intel has extended the reach of its next-generation tools to help boost performance applications - inlcuding clusters. http://p.sf.net/sfu/intel-dev2devmay _______________________________________________ perfmon2-devel mailing list perfmon2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/perfmon2-devel