perf_events, x86: Fix bug in hw_perf_enable()
authorStephane Eranian <eranian@google.com>
Mon, 1 Feb 2010 12:50:01 +0000 (14:50 +0200)
committerIngo Molnar <mingo@elte.hu>
Thu, 4 Feb 2010 08:59:50 +0000 (09:59 +0100)
commit447a194b393f32699607fd99617a40abd6a95114
tree7d202a6ad8f80c913a4e3d439eedf5ba0abbbf39
parentfce877e3a429940a986e085a41e8b57f2d922e36
perf_events, x86: Fix bug in hw_perf_enable()

We cannot assume that because hwc->idx == assign[i], we can avoid
reprogramming the counter in hw_perf_enable().

The event may have been scheduled out and another event may have been
programmed into this counter. Thus, we need a more robust way of
verifying if the counter still contains config/data related to an event.

This patch adds a generation number to each counter on each cpu. Using
this mechanism we can verify reliabilty whether the content of a counter
corresponds to an event.

Signed-off-by: Stephane Eranian <eranian@google.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
LKML-Reference: <4b66dc67.0b38560a.1635.ffffae18@mx.google.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/kernel/cpu/perf_event.c
include/linux/perf_event.h