[lkml]   [2012]   [Apr]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[PATCH] perf: Fix perf_event_for_each() to use sibling
    In perf_event_for_each() we call a function on an event, and then
    iterate over the siblings of the event.

    However we don't call the function on the siblings, we call it
    repeatedly on the original event - it seems "obvious" that we should
    be calling it with sibling as the argument.

    It looks like this broke in commit 75f937f24bd9 ("Fix ctx->mutex
    vs counter->mutex inversion").

    The only effect of the bug is that the PERF_IOC_FLAG_GROUP parameter
    to the ioctls doesn't work.

    Signed-off-by: Michael Ellerman <>

    This one seems so simple that I keep thinking I've missed something,
    I'm sure someone will tell me if I have ;)

    AFAICS tools/perf never exercises this, ie. it always individually
    enables counters - which might explain how it could be broken and
    no one has noticed.
    kernel/events/core.c | 2 +-
    1 files changed, 1 insertions(+), 1 deletions(-)

    diff --git a/kernel/events/core.c b/kernel/events/core.c
    index 1b5c081..b82121b 100644
    --- a/kernel/events/core.c
    +++ b/kernel/events/core.c
    @@ -3097,7 +3097,7 @@ static void perf_event_for_each(struct perf_event *event,
    perf_event_for_each_child(event, func);
    list_for_each_entry(sibling, &event->sibling_list, group_entry)
    - perf_event_for_each_child(event, func);
    + perf_event_for_each_child(sibling, func);


     \ /
      Last update: 2012-04-11 03:57    [W:0.020 / U:3.060 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site