[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