summaryrefslogtreecommitdiffstats
path: root/kernel/events/core.c
diff options
context:
space:
mode:
authorJiri Olsa2012-10-15 20:13:45 +0200
committerArnaldo Carvalho de Melo2013-08-07 22:35:19 +0200
commit6f5ab0019fd328b50a8488c9e5193fc1dbd8d6ed (patch)
tree348e2824bef7869db8fc942c7cdcd29526141644 /kernel/events/core.c
parentperf: Add PERF_EVENT_IOC_ID ioctl to return event ID (diff)
downloadkernel-qcow2-linux-6f5ab0019fd328b50a8488c9e5193fc1dbd8d6ed.tar.gz
kernel-qcow2-linux-6f5ab0019fd328b50a8488c9e5193fc1dbd8d6ed.tar.xz
kernel-qcow2-linux-6f5ab0019fd328b50a8488c9e5193fc1dbd8d6ed.zip
perf: Do not get values from disabled counters in group format read
It's possible some of the counters in the group could be disabled when sampling member of the event group is reading the rest via PERF_SAMPLE_READ sample type processing. Disabled counters could then produce wrong numbers. Fixing that by reading only enabled counters for PERF_SAMPLE_READ sample type processing. Signed-off-by: Jiri Olsa <jolsa@redhat.com> Acked-by: Namhyung Kim <namhyung@kernel.org> Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/n/tip-wwkjb0bbcuslnz0klrmqi26r@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'kernel/events/core.c')
-rw-r--r--kernel/events/core.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 5200b608b481..e82e70025d42 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -4388,7 +4388,8 @@ static void perf_output_read_group(struct perf_output_handle *handle,
list_for_each_entry(sub, &leader->sibling_list, group_entry) {
n = 0;
- if (sub != event)
+ if ((sub != event) &&
+ (sub->state == PERF_EVENT_STATE_ACTIVE))
sub->pmu->read(sub);
values[n++] = perf_event_count(sub);