perf: do not set task_ctx pointer in cpuctx if there is no events in the context
PATCH 1/1 perf: do not set task_ctx pointer in cpuctx if there is no events in the context
Do not set task_ctx pointer during sched_in if there is no events associated with the context. Otherwise if during task execution total number of events in the system will become zero perf_event_context_sched_out() will not be called and cpuctx->task_ctx will be left with a stale value.
kernel/events/core.c +2 -1
@@ -2172,7 +2172,8 @@ static void perf_event_context_sched_in(struct perf_event_context *ctx,perf_event_sched_in (cpuctx, ctx, task); - cpuctx->task_ctx = ctx; +if (ctx->nr_events) + cpuctx->task_ctx = ctx;perf_pmu_enable (ctx->pmu);perf_ctx_unlock (cpuctx, ctx);
--
Gleb.
Ingo, Peter can you look into this please.
Quoted 22 lines · Gleb Natapov
Do not set
task_ctxpointer duringsched_inif there is no events associated with the context. Otherwise if during task execution total number of events in the system will become zeroperf_event_context_sched_out()will not be called andcpuctx->task_ctxwill be left with a stale value.Signed-off-by Gleb Natapov <[email protected]>kernel/events/core.c +2
-2@@ -2172,7 +2172,8 @@ static void perf_event_context_sched_in(struct perf_event_context *ctx,perf_event_sched_in (cpuctx, ctx, task); - cpuctx->task_ctx = ctx; +if (ctx->nr_events) + cpuctx->task_ctx = ctx;perf_pmu_enable (ctx->pmu);perf_ctx_unlock (cpuctx, ctx); --
Quoted 6 lines
Gleb.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
--
Gleb.
Quoted 1 line · Gleb Natapov
Ingo, Peter can you look into this please.
queued it and the jump_label thing.
Quoted 4 lines · Peter Zijlstra
Quoted 1 line · Gleb Natapov
Ingo, Peter can you look into this please.
queued it and the
jump_labelthing.
I see jump_label thing in tip/perf/core but not this one yet. This is good because this one needs amendment :) See below.
---
Do not set task_ctx pointer during sched_in if there is no events associated with the context. Otherwise if during task execution total number of events in the system will become zero perf_event_context_sched_out() will not be called and cpuctx->task_ctx will be left with a stale value. Also perf_event_sched_in() shouldn't try to schedule task events in this case otherwise cpuctx->task_ctx->is_active will not be cleared during sched_out and will become incorrect.
kernel/events/core.c +3 -2
@@ -2171,9 +2171,10 @@ static void perf_event_context_sched_in(struct perf_event_context *ctx,*/ cpu_ctx_sched_out (cpuctx,EVENT_FLEXIBLE ); -perf_event_sched_in (cpuctx, ctx, task); +if (ctx->nr_events) + cpuctx->task_ctx = ctx; - cpuctx->task_ctx = ctx; +perf_event_sched_in (cpuctx, cpuctx->task_ctx, task);perf_pmu_enable (ctx->pmu);perf_ctx_unlock (cpuctx, ctx);
--
Gleb.
Quoted 7 lines · Gleb Natapov
Quoted 4 lines · Peter Zijlstra
Quoted 1 line · Gleb Natapov
Ingo, Peter can you look into this please.
queued it and the
jump_labelthing.I see
jump_labelthing in tip/perf/core but not this one yet. This is good because this one needs amendment :) See below.
Weird ass stuff, because my copy still applies to tip/master. Ingo, wtf is up?
Quoted 11 lines
---
Do not set
task_ctxpointer duringsched_inif there is no events associated with the context. Otherwise if during task execution total number of events in the system will become zeroperf_event_context_sched_out()will not be called andcpuctx->task_ctxwill be left with a stale value. Alsoperf_event_sched_in()shouldn't try to schedule task events in this case otherwisecpuctx->task_ctx->is_activewill not be cleared duringsched_outand will become incorrect.Signed-off-by Gleb Natapov <[email protected]>
--- missing right there
Quoted 19 lines
kernel/events/core.c +3
-3@@ -2171,9 +2171,10 @@ static void perf_event_context_sched_in(struct perf_event_context *ctx,*/ cpu_ctx_sched_out (cpuctx,EVENT_FLEXIBLE ); -perf_event_sched_in (cpuctx, ctx, task); +if (ctx->nr_events) + cpuctx->task_ctx = ctx; - cpuctx->task_ctx = ctx; +perf_event_sched_in (cpuctx, cpuctx->task_ctx, task);perf_pmu_enable (ctx->pmu);perf_ctx_unlock (cpuctx, ctx); --Gleb.
[tip:perf/urgent] perf: Do not set task_ctx pointer in cpuctx if there are no events in the context
In reply to Gleb NatapovCommit-ID: 1d5f003f5a964711853514b04ddc872eec0fdc7b Gitweb: http://git.kernel.org/tip/1d5f003f5a964711853514b04ddc872eec0fdc7b Author: Gleb Natapov <[email protected]> AuthorDate: Sun, 23 Oct 2011 19:10:33 +0200 Committer: Ingo Molnar <[email protected]> CommitDate: Mon, 14 Nov 2011 13:01:21 +0100
perf: Do not set task_ctx pointer in cpuctx if there are no events in the context
Do not set task_ctx pointer during sched_in if there are no events associated with the context. Otherwise if during task execution total number of events in the system will become zero perf_event_context_sched_out() will not be called and cpuctx->task_ctx will be left with a stale value.
--- kernel/events/core.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
kernel/events/core.c +2 -1
@@ -2173,7 +2173,8 @@ static void perf_event_context_sched_in(struct perf_event_context *ctx,perf_event_sched_in (cpuctx, ctx, task); - cpuctx->task_ctx = ctx; +if (ctx->nr_events) + cpuctx->task_ctx = ctx;perf_pmu_enable (ctx->pmu);perf_ctx_unlock (cpuctx, ctx);