Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 312258
b: refs/heads/master
c: 90e2b22
h: refs/heads/master
v: v3
  • Loading branch information
Jiri Olsa authored and Ingo Molnar committed Jun 18, 2012
1 parent f519c52 commit f3fecaa
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ac20de6fff445d6deb0c44c25946d198f79f2f00
refs/heads/master: 90e2b22dee908c13df256140a0d6527e3e8ea3f4
28 changes: 25 additions & 3 deletions trunk/tools/perf/util/parse-events.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "header.h"
#include "debugfs.h"
#include "parse-events-bison.h"
#define YY_EXTRA_TYPE int
#include "parse-events-flex.h"
#include "pmu.h"

Expand Down Expand Up @@ -788,13 +789,13 @@ int parse_events_modifier(struct list_head *list, char *str)
return 0;
}

static int parse_events__scanner(const char *str, void *data)
static int parse_events__scanner(const char *str, void *data, int start_token)
{
YY_BUFFER_STATE buffer;
void *scanner;
int ret;

ret = parse_events_lex_init(&scanner);
ret = parse_events_lex_init_extra(start_token, &scanner);
if (ret)
return ret;

Expand All @@ -811,6 +812,27 @@ static int parse_events__scanner(const char *str, void *data)
return ret;
}

/*
* parse event config string, return a list of event terms.
*/
int parse_events_terms(struct list_head *terms, const char *str)
{
struct parse_events_data__terms data = {
.terms = NULL,
};
int ret;

ret = parse_events__scanner(str, &data, PE_START_TERMS);
if (!ret) {
list_splice(data.terms, terms);
free(data.terms);
return 0;
}

parse_events__free_terms(data.terms);
return ret;
}

int parse_events(struct perf_evlist *evlist, const char *str, int unset __used)
{
struct parse_events_data__events data = {
Expand All @@ -819,7 +841,7 @@ int parse_events(struct perf_evlist *evlist, const char *str, int unset __used)
};
int ret;

ret = parse_events__scanner(str, &data);
ret = parse_events__scanner(str, &data, PE_START_EVENTS);
if (!ret) {
int entries = data.idx - evlist->nr_entries;
perf_evlist__splice_list_tail(evlist, &data.list, entries);
Expand Down
5 changes: 5 additions & 0 deletions trunk/tools/perf/util/parse-events.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ extern int parse_events_option(const struct option *opt, const char *str,
int unset);
extern int parse_events(struct perf_evlist *evlist, const char *str,
int unset);
extern int parse_events_terms(struct list_head *terms, const char *str);
extern int parse_filter(const struct option *opt, const char *str, int unset);

#define EVENTS_HELP_MAX (128*1024)
Expand Down Expand Up @@ -68,6 +69,10 @@ struct parse_events_data__events {
int idx;
};

struct parse_events_data__terms {
struct list_head *terms;
};

int parse_events__is_hardcoded_term(struct parse_events__term *term);
int parse_events__term_num(struct parse_events__term **_term,
int type_term, char *config, long num);
Expand Down
13 changes: 13 additions & 0 deletions trunk/tools/perf/util/parse-events.l
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,19 @@ modifier_event [ukhpGH]{1,8}
modifier_bp [rwx]

%%

%{
{
int start_token;

start_token = (int) parse_events_get_extra(yyscanner);
if (start_token) {
parse_events_set_extra(NULL, yyscanner);
return start_token;
}
}
%}

cpu-cycles|cycles { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_CPU_CYCLES); }
stalled-cycles-frontend|idle-cycles-frontend { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_FRONTEND); }
stalled-cycles-backend|idle-cycles-backend { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_BACKEND); }
Expand Down
12 changes: 12 additions & 0 deletions trunk/tools/perf/util/parse-events.y
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ do { \

%}

%token PE_START_EVENTS PE_START_TERMS
%token PE_VALUE PE_VALUE_SYM PE_RAW PE_TERM
%token PE_NAME
%token PE_MODIFIER_EVENT PE_MODIFIER_BP
Expand Down Expand Up @@ -60,6 +61,11 @@ do { \
}
%%

start:
PE_START_EVENTS events
|
PE_START_TERMS terms

events:
events ',' event | event

Expand Down Expand Up @@ -209,6 +215,12 @@ PE_RAW
$$ = list;
}

terms: event_config
{
struct parse_events_data__terms *data = _data;
data->terms = $1;
}

event_config:
event_config ',' event_term
{
Expand Down

0 comments on commit f3fecaa

Please sign in to comment.