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 0 > + /* > + * TODO: Do we need this read() for group events on PMUs that > + * don't implement PERF_PMU_TXN_READ transactions? > + */ > (void)perf_event_read(child, false); > +#endif > total += perf_event_count(child); > *enabled += child->total_time_enabled; > *running += child->total_time_running; Aw gawd, I've been an idiot!! I just realized this is a _CHILD_ loop, not a _SIBLING_ loop !! We need to flip the loops in perf_read_group(), find attached two patches that go on top of 1,2,4. After this you can add the perf_event_read() return value (just fold patches 6,8) after which you can do patch 10 (which has a broken Subject fwiw).