diff options
author | Jean Pihet <jean.pihet@linaro.org> | 2014-10-10 11:34:42 +0200 |
---|---|---|
committer | Borislav Petkov <bp@suse.de> | 2014-11-06 11:53:38 +0100 |
commit | 20ae0f1947163b221a5a8798e8309d09afd8a7fe (patch) | |
tree | 00cd22182b1f95bcc8b4d9560551e1402d4bf559 | |
parent | 19642d6de57d41a70573269e4bcd0963ac707cda (diff) | |
download | rasd-20ae0f1947163b221a5a8798e8309d09afd8a7fe.tar.gz |
rasd: Enable and use events ids
Every event has an internal id calculated, it is used to map the
requested events to the received ones.
Signed-off-by: Jean Pihet <jean.pihet@linaro.org>
Link: http://lkml.kernel.org/r/1412933690-25576-6-git-send-email-jean.pihet@linaro.org
Signed-off-by: Borislav Petkov <bp@suse.de>
-rw-r--r-- | src/evsel.c | 32 | ||||
-rw-r--r-- | src/rasd.c | 7 |
2 files changed, 37 insertions, 2 deletions
diff --git a/src/evsel.c b/src/evsel.c index c223790..ef4e888 100644 --- a/src/evsel.c +++ b/src/evsel.c @@ -106,6 +106,38 @@ void perf_evsel__delete(struct perf_evsel *evsel) free(evsel); } +void __perf_evsel__set_sample_bit(struct perf_evsel *evsel, + enum perf_event_sample_format bit) +{ + if (!(evsel->attr.sample_type & bit)) { + evsel->attr.sample_type |= bit; + evsel->sample_size += sizeof(u64); + perf_evsel__calc_id_pos(evsel); + } +} + +void __perf_evsel__reset_sample_bit(struct perf_evsel *evsel, + enum perf_event_sample_format bit) +{ + if (evsel->attr.sample_type & bit) { + evsel->attr.sample_type &= ~bit; + evsel->sample_size -= sizeof(u64); + perf_evsel__calc_id_pos(evsel); + } +} + +void perf_evsel__set_sample_id(struct perf_evsel *evsel, + bool can_sample_identifier) +{ + if (can_sample_identifier) { + perf_evsel__reset_sample_bit(evsel, ID); + perf_evsel__set_sample_bit(evsel, IDENTIFIER); + } else { + perf_evsel__set_sample_bit(evsel, ID); + } + evsel->attr.read_format |= PERF_FORMAT_ID; +} + void perf_evsel__init(struct perf_evsel *evsel, struct perf_event_attr *attr, int idx) { @@ -78,8 +78,10 @@ static int add_tp_event(char *event_str) if (!tp) err("init tracepoint evsel"); - /* Add the event to the lists of events */ - list_add_tail(&tp->node, &evlist->entries); + /* Add the event to the lists of events, enable events ids */ + perf_evlist__add(evlist, tp); + perf_evsel__set_sample_id(tp, false); + perf_evsel__calc_id_pos(tp); return ret; } @@ -143,6 +145,7 @@ int main() if (perf_evsel__open(c, cpu_map__new(NULL), NULL) < 0) err("opening tracepoint, are you root?"); } + perf_evlist__set_id_pos(evlist); if (perf_evlist__mmap(evlist, 4 /* opts->mmap_pages */, false) < 0) err("Failed to mmap with %d (%s)\n", errno, strerror(errno)); |