Commit c457810a authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Ingo Molnar

perf_counter: per event wakeups

By request, provide a way to request a wakeup every 'n' events instead
of every page of output.
Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Orig-LKML-Reference: <20090402091319.323309784@chello.nl>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 8a057d84
......@@ -145,7 +145,7 @@ struct perf_counter_hw_event {
__reserved_1 : 53;
__u32 extra_config_len;
__u32 __reserved_4;
__u32 wakeup_events; /* wakeup every n events */
__u64 __reserved_2;
__u64 __reserved_3;
......@@ -321,6 +321,7 @@ struct perf_mmap_data {
int nr_pages;
atomic_t wakeup;
atomic_t head;
atomic_t events;
struct perf_counter_mmap_page *user_page;
void *data_pages[0];
};
......
......@@ -1760,7 +1760,15 @@ static void perf_output_copy(struct perf_output_handle *handle,
static void perf_output_end(struct perf_output_handle *handle)
{
if (handle->wakeup)
int wakeup_events = handle->counter->hw_event.wakeup_events;
if (wakeup_events) {
int events = atomic_inc_return(&handle->data->events);
if (events >= wakeup_events) {
atomic_sub(wakeup_events, &handle->data->events);
__perf_output_wakeup(handle);
}
} else if (handle->wakeup)
__perf_output_wakeup(handle);
rcu_read_unlock();
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment