Re: [PATCH v3 7/8] perf: Define PMU_TXN_READ interface
From: Peter Zijlstra <peterz@infradead.org>
Date: 2015-07-16 22:20:24
Also in:
linux-s390, lkml, sparclinux
From: Peter Zijlstra <peterz@infradead.org>
Date: 2015-07-16 22:20:24
Also in:
linux-s390, lkml, sparclinux
On Tue, Jul 14, 2015 at 08:01:54PM -0700, Sukadev Bhattiprolu wrote:
+/*
+ * Use the transaction interface to read the group of events in @leader.
+ * PMUs like the 24x7 counters in Power, can use this to queue the events
+ * in the ->read() operation and perform the actual read in ->commit_txn.
+ *
+ * Other PMUs can ignore the ->start_txn and ->commit_txn and read each
+ * PMU directly in the ->read() operation.
+ */
+static int perf_event_read_group(struct perf_event *leader)
+{
+ int ret;
+ struct perf_event *sub;
+ struct pmu *pmu;
+
+ pmu = leader->pmu;
+
+ pmu->start_txn(pmu, PERF_PMU_TXN_READ);
+
+ perf_event_read(leader);There should be a lockdep assert with that list iteration.
+ list_for_each_entry(sub, &leader->sibling_list, group_entry) + perf_event_read(sub); + + ret = pmu->commit_txn(pmu); + + return ret; +}