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>
This commit is contained in:

committed by
Ingo Molnar

parent
fce877e3a4
commit
447a194b39
@@ -478,9 +478,11 @@ struct hw_perf_event {
|
||||
union {
|
||||
struct { /* hardware */
|
||||
u64 config;
|
||||
u64 last_tag;
|
||||
unsigned long config_base;
|
||||
unsigned long event_base;
|
||||
int idx;
|
||||
int last_cpu;
|
||||
};
|
||||
struct { /* software */
|
||||
s64 remaining;
|
||||
|
Reference in New Issue
Block a user