summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean Pihet <jean.pihet@linaro.org>2014-10-10 11:34:42 +0200
committerBorislav Petkov <bp@suse.de>2014-11-06 11:53:38 +0100
commit20ae0f1947163b221a5a8798e8309d09afd8a7fe (patch)
tree00cd22182b1f95bcc8b4d9560551e1402d4bf559
parent19642d6de57d41a70573269e4bcd0963ac707cda (diff)
downloadrasd-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.c32
-rw-r--r--src/rasd.c7
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)
{
diff --git a/src/rasd.c b/src/rasd.c
index 593e5b0..d7495c9 100644
--- a/src/rasd.c
+++ b/src/rasd.c
@@ -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));