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

Reply via email to