diff options
author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2009-05-05 11:50:22 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-05-05 14:18:30 -0400 |
commit | c66de4a5be7913247bd83d79168f8e4420c9cfbc (patch) | |
tree | c671172166d94be75ad9d6df1fdafa0c006c4609 /include/linux/perf_counter.h | |
parent | 066d7dea32c9bffe6decc0abe465627656cdd84e (diff) |
perf_counter: uncouple data_head updates from wakeups
Keep data_head up-to-date irrespective of notifications. This fixes
the case where you disable a counter and don't get a notification for
the last few pending events, and it also allows polling usage.
[ Impact: increase precision of perfcounter mmap-ed fields ]
Suggested-by: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
LKML-Reference: <20090505155436.925084300@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/linux/perf_counter.h')
-rw-r--r-- | include/linux/perf_counter.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/include/linux/perf_counter.h b/include/linux/perf_counter.h index a356fa69796c..17b63105f2aa 100644 --- a/include/linux/perf_counter.h +++ b/include/linux/perf_counter.h | |||
@@ -362,9 +362,11 @@ struct perf_mmap_data { | |||
362 | atomic_t head; /* write position */ | 362 | atomic_t head; /* write position */ |
363 | atomic_t events; /* event limit */ | 363 | atomic_t events; /* event limit */ |
364 | 364 | ||
365 | atomic_t wakeup_head; /* completed head */ | 365 | atomic_t done_head; /* completed head */ |
366 | atomic_t lock; /* concurrent writes */ | 366 | atomic_t lock; /* concurrent writes */ |
367 | 367 | ||
368 | atomic_t wakeup; /* needs a wakeup */ | ||
369 | |||
368 | struct perf_counter_mmap_page *user_page; | 370 | struct perf_counter_mmap_page *user_page; |
369 | void *data_pages[0]; | 371 | void *data_pages[0]; |
370 | }; | 372 | }; |