diff options
-rw-r--r-- | kernel/events/core.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c index d92c7ad7715d..8c0b7334230b 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -3122,8 +3122,12 @@ static void perf_event_context_sched_in(struct perf_event_context *ctx, * We want to keep the following priority order: * cpu pinned (that don't need to move), task pinned, * cpu flexible, task flexible. + * + * However, if task's ctx is not carrying any pinned + * events, no need to flip the cpuctx's events around. */ - cpu_ctx_sched_out(cpuctx, EVENT_FLEXIBLE); + if (!list_empty(&ctx->pinned_groups)) + cpu_ctx_sched_out(cpuctx, EVENT_FLEXIBLE); perf_event_sched_in(cpuctx, ctx, task); perf_pmu_enable(ctx->pmu); perf_ctx_unlock(cpuctx, ctx); |