lkml.org 
[lkml]   [2012]   [Jul]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5/6] perf, tool: Add support to specify hw event as pmu event term
    Date
    Adding a way to specify hw event as pmu event term like:
    'cpu/event=cpu-cycles/u'
    'cpu/event=instructions,.../u'

    The 'event=cpu-cycles' term is replaced/translated by the hw events
    term translation, which is exposed by sysfs 'events' group attribute.

    Adding parser bits, the rest is already handled by the pmu alias code.

    Signed-off-by: Jiri Olsa <jolsa@redhat.com>
    ---
    tools/perf/util/parse-events.c | 13 +++++++++++++
    tools/perf/util/parse-events.h | 2 ++
    tools/perf/util/parse-events.y | 9 +++++++++
    3 files changed, 24 insertions(+)

    diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
    index 1aa721d..780bc45 100644
    --- a/tools/perf/util/parse-events.c
    +++ b/tools/perf/util/parse-events.c
    @@ -1045,6 +1045,19 @@ int parse_events__term_str(struct parse_events__term **term,
    config, str, 0);
    }

    +int parse_events__term_sym_hw(struct parse_events__term **term,
    + char *config, unsigned idx)
    +{
    + struct event_symbol *sym;
    +
    + BUG_ON(idx >= PERF_COUNT_HW_MAX);
    + sym = &event_symbols_hw[idx];
    +
    + return new_term(term, PARSE_EVENTS__TERM_TYPE_STR,
    + PARSE_EVENTS__TERM_TYPE_USER, config,
    + (char *) sym->symbol, 0);
    +}
    +
    int parse_events__term_clone(struct parse_events__term **new,
    struct parse_events__term *term)
    {
    diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
    index ee9c218..eaf2fd7 100644
    --- a/tools/perf/util/parse-events.h
    +++ b/tools/perf/util/parse-events.h
    @@ -76,6 +76,8 @@ int parse_events__term_num(struct parse_events__term **_term,
    int type_term, char *config, long num);
    int parse_events__term_str(struct parse_events__term **_term,
    int type_term, char *config, char *str);
    +int parse_events__term_sym_hw(struct parse_events__term **term,
    + char *config, unsigned idx);
    int parse_events__term_clone(struct parse_events__term **new,
    struct parse_events__term *term);
    void parse_events__free_terms(struct list_head *terms);
    diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y
    index 2bc5fbf..9c74d8a 100644
    --- a/tools/perf/util/parse-events.y
    +++ b/tools/perf/util/parse-events.y
    @@ -269,6 +269,15 @@ PE_NAME '=' PE_VALUE
    $$ = term;
    }
    |
    +PE_NAME '=' PE_VALUE_SYM_HW
    +{
    + struct parse_events__term *term;
    + int config = $3 & 255;
    +
    + ABORT_ON(parse_events__term_sym_hw(&term, $1, config));
    + $$ = term;
    +}
    +|
    PE_NAME
    {
    struct parse_events__term *term;
    --
    1.7.10.4


    \
     
     \ /
      Last update: 2012-07-09 23:21    [W:0.033 / U:0.908 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site