Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 323692
b: refs/heads/master
c: f5b1135
h: refs/heads/master
v: v3
  • Loading branch information
Jiri Olsa authored and Arnaldo Carvalho de Melo committed Aug 14, 2012
1 parent c8fe913 commit 7e1f860
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 15 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: 89efb029502d7f2d0993ed2aa9280c414336939c
refs/heads/master: f5b1135bf79557563a814e53ecd610cce663c1e3
2 changes: 2 additions & 0 deletions trunk/tools/perf/util/evsel.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ struct perf_evsel {
} handler;
unsigned int sample_size;
bool supported;
/* parse modifier helper */
int exclude_GH;
};

struct cpu_map;
Expand Down
74 changes: 62 additions & 12 deletions trunk/tools/perf/util/parse-events.c
Original file line number Diff line number Diff line change
Expand Up @@ -633,14 +633,38 @@ void parse_events_update_lists(struct list_head *list_event,
free(list_event);
}

int parse_events__modifier_event(struct list_head *list, char *str)
struct event_modifier {
int eu;
int ek;
int eh;
int eH;
int eG;
int precise;
int exclude_GH;
};

static int get_event_modifier(struct event_modifier *mod, char *str,
struct perf_evsel *evsel)
{
struct perf_evsel *evsel;
int exclude = 0, exclude_GH = 0;
int eu = 0, ek = 0, eh = 0, eH = 0, eG = 0, precise = 0;
int eu = evsel ? evsel->attr.exclude_user : 0;
int ek = evsel ? evsel->attr.exclude_kernel : 0;
int eh = evsel ? evsel->attr.exclude_hv : 0;
int eH = evsel ? evsel->attr.exclude_host : 0;
int eG = evsel ? evsel->attr.exclude_guest : 0;
int precise = evsel ? evsel->attr.precise_ip : 0;

if (str == NULL)
return 0;
int exclude = eu | ek | eh;
int exclude_GH = evsel ? evsel->exclude_GH : 0;

/*
* We are here for group and 'GH' was not set as event
* modifier and whatever event/group modifier override
* default 'GH' setup.
*/
if (evsel && !exclude_GH)
eH = eG = 0;

memset(mod, 0, sizeof(*mod));

while (*str) {
if (*str == 'u') {
Expand Down Expand Up @@ -684,13 +708,39 @@ int parse_events__modifier_event(struct list_head *list, char *str)
if (precise > 3)
return -EINVAL;

mod->eu = eu;
mod->ek = ek;
mod->eh = eh;
mod->eH = eH;
mod->eG = eG;
mod->precise = precise;
mod->exclude_GH = exclude_GH;
return 0;
}

int parse_events__modifier_event(struct list_head *list, char *str, bool add)
{
struct perf_evsel *evsel;
struct event_modifier mod;

if (str == NULL)
return 0;

if (!add && get_event_modifier(&mod, str, NULL))
return -EINVAL;

list_for_each_entry(evsel, list, node) {
evsel->attr.exclude_user = eu;
evsel->attr.exclude_kernel = ek;
evsel->attr.exclude_hv = eh;
evsel->attr.precise_ip = precise;
evsel->attr.exclude_host = eH;
evsel->attr.exclude_guest = eG;

if (add && get_event_modifier(&mod, str, evsel))
return -EINVAL;

evsel->attr.exclude_user = mod.eu;
evsel->attr.exclude_kernel = mod.ek;
evsel->attr.exclude_hv = mod.eh;
evsel->attr.precise_ip = mod.precise;
evsel->attr.exclude_host = mod.eH;
evsel->attr.exclude_guest = mod.eG;
evsel->exclude_GH = mod.exclude_GH;
}

return 0;
Expand Down
2 changes: 1 addition & 1 deletion trunk/tools/perf/util/parse-events.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ int parse_events__term_str(struct parse_events__term **_term,
int parse_events__term_clone(struct parse_events__term **new,
struct parse_events__term *term);
void parse_events__free_terms(struct list_head *terms);
int parse_events__modifier_event(struct list_head *list, char *str);
int parse_events__modifier_event(struct list_head *list, char *str, bool add);
int parse_events__modifier_group(struct list_head *list, char *event_mod);
int parse_events_add_tracepoint(struct list_head **list, int *idx,
char *sys, char *event);
Expand Down
2 changes: 1 addition & 1 deletion trunk/tools/perf/util/parse-events.y
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ event_def PE_MODIFIER_EVENT
* (there could be more events added for multiple tracepoint
* definitions via '*?'.
*/
ABORT_ON(parse_events__modifier_event(list, $2));
ABORT_ON(parse_events__modifier_event(list, $2, false));
$$ = list;
}
|
Expand Down

0 comments on commit 7e1f860

Please sign in to comment.