[prev in list] [next in list] [prev in thread] [next in thread]
List: linux-edac
Subject: [PATCH 08/10] rasd: enable and use events ids
From: Jean Pihet <jean.pihet () linaro ! org>
Date: 2014-09-25 9:55:59
Message-ID: 1411638961-8112-8-git-send-email-jean.pihet () linaro ! org
[Download RAW message or body]
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>
---
src/evsel.c | 32 ++++++++++++++++++++++++++++++++
src/rasd.c | 5 ++++-
2 files changed, 36 insertions(+), 1 deletion(-)
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 221945e..9f31b6d 100644
--- a/src/rasd.c
+++ b/src/rasd.c
@@ -69,9 +69,11 @@ static int add_tp_event(char *event_str)
ret = setup_event_tp(&tp->attr, rasd.sys, rasd.name, r_ev);
switch (ret) {
case 0:
- /* Add the event to the lists of events */
+ /* Add the event to the lists of events, enable events ids */
list_add_tail(&r_ev->node, &rasd.event_entries);
perf_evlist__add(evlist, tp);
+ perf_evsel__set_sample_id(tp, FALSE);
+ perf_evsel__calc_id_pos(tp);
break;
case -ENOMEM:
err("cannot allocate event path");
@@ -161,6 +163,7 @@ int main()
if (perf_evsel__open(c, evlist->cpus, NULL) < 0)
err("opening tracepoint, are you root?");
}
+ perf_evlist__set_id_pos(evlist);
/* mmap buffers */
if (perf_evlist__mmap(evlist, 4 /* opts->mmap_pages */, false) < 0)
--
1.9.3
--
To unsubscribe from this list: send the line "unsubscribe linux-edac" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic