On Fri, Sep 01, 2017 at 09:53:54AM -0700, Yonghong Song wrote: > diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h > index b14095b..7fd5e94 100644 > --- a/include/linux/perf_event.h > +++ b/include/linux/perf_event.h > @@ -901,6 +901,8 @@ extern void perf_pmu_migrate_context(struct pmu *pmu, > int perf_event_read_local(struct perf_event *event, u64 *value); > extern u64 perf_event_read_value(struct perf_event *event, > u64 *enabled, u64 *running); > +extern void calc_timer_values(struct perf_event *event, u64 *now, > + u64 *enabled, u64 *running); > >
> diff --git a/kernel/events/core.c b/kernel/events/core.c > index 8c01572..ef5c7fb 100644 > --- a/kernel/events/core.c > +++ b/kernel/events/core.c > @@ -4883,7 +4883,7 @@ static int perf_event_index(struct perf_event *event) > return event->pmu->event_idx(event); > } > > -static void calc_timer_values(struct perf_event *event, > +void calc_timer_values(struct perf_event *event, > u64 *now, > u64 *enabled, > u64 *running) Yeah, not going to happen... Why not do the obvious thing and extend perf_event_read_local() to optionally return the enabled/running times?