perf tools: Let a user specify a PMU event without any config terms
authorAdrian Hunter <adrian.hunter@intel.com>
Fri, 15 Aug 2014 19:08:40 +0000 (22:08 +0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 17 Sep 2014 20:08:08 +0000 (17:08 -0300)
This enables a PMU event to be specified in the form:

pmu//

which is effectively the same as:

pmu/config=0/

This patch is a precursor to defining default config for a PMU.

Further explanation extracted from lkml thread:

Imagine that the 'tsc' term did not exist.

Intel PT trace data would not contain TSC packets, and the decoder would
not know how to decode them.

Then imagine that a new version of the hardware adds 'tsc'.

It is such a useful feature that we want it by default, but older
versions of the tools don't know how to decode it, so the kernel cannot
turn it on by default.

It is similar to why the kernel does not select perf_event_attr.mmap2 by
default.

The kernel doesn't know whether the tool supports it.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1408129739-17368-6-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/parse-events.c
tools/perf/util/parse-events.y

index e34c81a0bcf353b7de43beb110f353b9e06446bc..e7562881396801ac335220d088be37a3c08629ff 100644 (file)
@@ -645,6 +645,12 @@ int parse_events_add_pmu(struct list_head *list, int *idx,
 
        memset(&attr, 0, sizeof(attr));
 
+       if (!head_config) {
+               attr.type = pmu->type;
+               evsel = __add_event(list, idx, &attr, NULL, pmu->cpus);
+               return evsel ? 0 : -ENOMEM;
+       }
+
        if (perf_pmu__check_alias(pmu, head_config, &unit, &scale))
                return -EINVAL;
 
index 0bc87ba46bf3f77f507116df36449655a9fbaa6f..55fab6ad609a8ccdc7f36478dc350bfcb72e5e3f 100644 (file)
@@ -210,6 +210,16 @@ PE_NAME '/' event_config '/'
        parse_events__free_terms($3);
        $$ = list;
 }
+|
+PE_NAME '/' '/'
+{
+       struct parse_events_evlist *data = _data;
+       struct list_head *list;
+
+       ALLOC_LIST(list);
+       ABORT_ON(parse_events_add_pmu(list, &data->idx, $1, NULL));
+       $$ = list;
+}
 
 value_sym:
 PE_VALUE_SYM_HW