lkml.org 
[lkml]   [2009]   [Apr]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 3/6] 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: Peter Zijlstra <a.p.zijlstra@chello.nl>
    ---
    include/linux/perf_counter.h | 3 ++-
    kernel/perf_counter.c | 10 +++++++++-
    2 files changed, 11 insertions(+), 2 deletions(-)

    Index: linux-2.6/include/linux/perf_counter.h
    ===================================================================
    --- linux-2.6.orig/include/linux/perf_counter.h
    +++ linux-2.6/include/linux/perf_counter.h
    @@ -146,7 +146,7 @@ struct perf_counter_hw_event {
    __reserved_1 : 52;

    __u32 extra_config_len;
    - __u32 __reserved_4;
    + __u32 wakeup_events; /* wakeup every n events */

    /*
    * Singleshot signal information.
    @@ -327,6 +327,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];
    };
    Index: linux-2.6/kernel/perf_counter.c
    ===================================================================
    --- linux-2.6.orig/kernel/perf_counter.c
    +++ linux-2.6/kernel/perf_counter.c
    @@ -1760,7 +1760,15 @@ static void perf_output_copy(struct perf

    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();
    }
    --



    \
     
     \ /
      Last update: 2009-04-02 11:17    [W:0.025 / U:0.028 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site