Messages in this thread | | | Date | Thu, 16 Jul 2015 23:12:19 +0200 | From | Peter Zijlstra <> | Subject | Re: [PATCH v3 5/8] perf: Split perf_event_read_value() |
| |
On Tue, Jul 14, 2015 at 08:01:52PM -0700, Sukadev Bhattiprolu wrote: > Move the part of perf_event_read_value() that computes the event > counts and event times into a new function, perf_event_compute(). > > This would allow us to call perf_event_compute() independently. > > Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com> > > Changelog[v3] > Rather than move perf_event_read() into callers and then > rename, just move the computations into a separate function > (redesign to address comment from Peter Zijlstra). > ---
Changelog[] bits go here, below the '---' where they get discarded.
> kernel/events/core.c | 37 ++++++++++++++++++++++++------------- > 1 file changed, 24 insertions(+), 13 deletions(-) > > diff --git a/kernel/events/core.c b/kernel/events/core.c > index 44fb89d..b1e9a42 100644 > --- a/kernel/events/core.c > +++ b/kernel/events/core.c > @@ -3704,6 +3704,29 @@ static int perf_release(struct inode *inode, struct file *file) > return 0; > } > > +static u64 perf_event_compute(struct perf_event *event, u64 *enabled, > + u64 *running)
This is a horrible name, 'compute' what?
> +{ > + struct perf_event *child; > + u64 total; > + > + total = perf_event_count(event); > + > + *enabled += event->total_time_enabled + > + atomic64_read(&event->child_total_time_enabled); > + *running += event->total_time_running + > + atomic64_read(&event->child_total_time_running); > +
lockdep_assert_held(&event->child_mutex);
> + list_for_each_entry(child, &event->child_list, child_list) { > + perf_event_read(child); > + total += perf_event_count(child); > + *enabled += child->total_time_enabled; > + *running += child->total_time_running; > + } > + > + return total; > +} > + > /* > * Remove all orphanes events from the context. > */
| |