On Thu, Aug 13, 2015 at 01:04:28PM -0700, Sukadev Bhattiprolu wrote:
> | > | +static int perf_read_group(struct perf_event *event,
> | > | + u64 read_format, char __user *buf)
> | > | +{
> | > | + struct perf_event *leader = event->group_leader, *child;
> | >
Peter Zijlstra [pet...@infradead.org] wrote:
| On Tue, Aug 11, 2015 at 09:14:00PM -0700, Sukadev Bhattiprolu wrote:
| > | +static void __perf_read_group_add(struct perf_event *leader, u64
read_format, u64 *values)
| > | {
| > | + struct perf_event *sub;
| > | + int n = 1; /* skip @nr */
| >
| >
On Tue, Aug 11, 2015 at 09:14:00PM -0700, Sukadev Bhattiprolu wrote:
> | +static void __perf_read_group_add(struct perf_event *leader, u64
> read_format, u64 *values)
> | {
> | + struct perf_event *sub;
> | + int n = 1; /* skip @nr */
>
> This n = 1 is to skip over the values[0] = 1 + nr_sib
Peter Zijlstra [pet...@infradead.org] wrote:
| On Sun, Jul 26, 2015 at 10:40:37PM -0700, Sukadev Bhattiprolu wrote:
| > @@ -3743,7 +3762,13 @@ static u64 perf_event_aggregate(struct perf_event
*event, u64 *enabled,
| > lockdep_assert_held(&event->child_mutex);
| >
| > list_for_each_entry
On Sun, Jul 26, 2015 at 10:40:37PM -0700, Sukadev Bhattiprolu wrote:
> @@ -3743,7 +3762,13 @@ static u64 perf_event_aggregate(struct perf_event
> *event, u64 *enabled,
> lockdep_assert_held(&event->child_mutex);
>
> list_for_each_entry(child, &event->child_list, child_list) {
> +#if
Define a new PERF_PMU_TXN_READ interface to read a group of counters
at once.
pmu->start_txn()// Initialize before first event
for each event in group
pmu->read(event); // Queue each event to be read
pmu->commit_txn() //