lkml.org 
[lkml]   [2016]   [Jan]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[RFC][PATCH 09/12] perf: Make ctx->is_active and cpuctx->task_ctx consistent
    For no apparent reason and to great confusion the rules for
    ctx->is_active and cpuctx->task_ctx are different. This means that its
    not always possible to find all active (task) contexts.

    Fix this such that if ctx->is_active gets set, we also set (or verify)
    cpuctx->task_ctx.

    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    ---
    kernel/events/core.c | 21 ++++++++++++++-------
    1 file changed, 14 insertions(+), 7 deletions(-)

    --- a/kernel/events/core.c
    +++ b/kernel/events/core.c
    @@ -2330,6 +2330,12 @@ static void ctx_sched_out(struct perf_ev
    lockdep_assert_held(&ctx->lock);

    ctx->is_active &= ~event_type;
    + if (ctx->task) {
    + WARN_ON_ONCE(cpuctx->task_ctx != ctx);
    + if (!ctx->is_active)
    + cpuctx->task_ctx = NULL;
    + }
    +
    if (likely(!ctx->nr_events))
    return;

    @@ -2631,7 +2637,6 @@ static void task_ctx_sched_out(struct pe
    return;

    ctx_sched_out(ctx, cpuctx, EVENT_ALL);
    - cpuctx->task_ctx = NULL;
    }

    /*
    @@ -2714,6 +2719,13 @@ ctx_sched_in(struct perf_event_context *
    lockdep_assert_held(&ctx->lock);

    ctx->is_active |= event_type;
    + if (ctx->task) {
    + if (!is_active)
    + cpuctx->task_ctx = ctx;
    + else
    + WARN_ON_ONCE(cpuctx->task_ctx != ctx);
    + }
    +
    if (likely(!ctx->nr_events))
    return;

    @@ -2758,12 +2770,7 @@ static void perf_event_context_sched_in(
    * cpu flexible, task flexible.
    */
    cpu_ctx_sched_out(cpuctx, EVENT_FLEXIBLE);
    -
    - if (ctx->nr_events)
    - cpuctx->task_ctx = ctx;
    -
    - perf_event_sched_in(cpuctx, cpuctx->task_ctx, task);
    -
    + perf_event_sched_in(cpuctx, ctx, task);
    perf_pmu_enable(ctx->pmu);
    perf_ctx_unlock(cpuctx, ctx);
    }

    \
     
     \ /
      Last update: 2016-01-11 18:01    [W:4.944 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site