lkml.org 
[lkml]   [2011]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:perf/core] perf: Change close() semantics for group events
    Commit-ID:  e03a9a55b4e45377af9ca3d464135f9ea280b8f8
    Gitweb: http://git.kernel.org/tip/e03a9a55b4e45377af9ca3d464135f9ea280b8f8
    Author: Peter Zijlstra <a.p.zijlstra@chello.nl>
    AuthorDate: Sat, 9 Apr 2011 21:17:47 +0200
    Committer: Ingo Molnar <mingo@elte.hu>
    CommitDate: Sat, 28 May 2011 18:01:21 +0200

    perf: Change close() semantics for group events

    In order to always call list_del_event() on the correct cpu if the
    event is part of an active context and avoid having to do two IPIs,
    change the close() semantics slightly.

    The current perf_event_disable() call would disable a whole group if
    the event that's being closed is the group leader, whereas the new
    code keeps the group siblings enabled.

    People should not rely on this behaviour and I don't think they do,
    but in case we find they do, the fix is easy and we have to take the
    double IPI cost.

    Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Vince Weaver <vweaver1@eecs.utk.edu>
    Link: http://lkml.kernel.org/r/20110409192142.038377551@chello.nl
    Signed-off-by: Ingo Molnar <mingo@elte.hu>
    ---
    kernel/events/core.c | 8 +-------
    1 files changed, 1 insertions(+), 7 deletions(-)

    diff --git a/kernel/events/core.c b/kernel/events/core.c
    index 802f3b2..c378062 100644
    --- a/kernel/events/core.c
    +++ b/kernel/events/core.c
    @@ -2920,12 +2920,6 @@ int perf_event_release_kernel(struct perf_event *event)
    {
    struct perf_event_context *ctx = event->ctx;

    - /*
    - * Remove from the PMU, can't get re-enabled since we got
    - * here because the last ref went.
    - */
    - perf_event_disable(event);
    -
    WARN_ON_ONCE(ctx->parent_ctx);
    /*
    * There are two ways this annotation is useful:
    @@ -2942,8 +2936,8 @@ int perf_event_release_kernel(struct perf_event *event)
    mutex_lock_nested(&ctx->mutex, SINGLE_DEPTH_NESTING);
    raw_spin_lock_irq(&ctx->lock);
    perf_group_detach(event);
    - list_del_event(event, ctx);
    raw_spin_unlock_irq(&ctx->lock);
    + perf_remove_from_context(event);
    mutex_unlock(&ctx->mutex);

    free_event(event);

    \
     
     \ /
      Last update: 2011-05-28 18:45    [W:0.031 / U:4.980 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site