aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/events/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/events/core.c')
-rw-r--r--kernel/events/core.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 600c1629b64d..58690af323e4 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -2174,11 +2174,11 @@ static void perf_event_context_sched_in(struct perf_event_context *ctx,
2174 */ 2174 */
2175 cpu_ctx_sched_out(cpuctx, EVENT_FLEXIBLE); 2175 cpu_ctx_sched_out(cpuctx, EVENT_FLEXIBLE);
2176 2176
2177 perf_event_sched_in(cpuctx, ctx, task);
2178
2179 if (ctx->nr_events) 2177 if (ctx->nr_events)
2180 cpuctx->task_ctx = ctx; 2178 cpuctx->task_ctx = ctx;
2181 2179
2180 perf_event_sched_in(cpuctx, cpuctx->task_ctx, task);
2181
2182 perf_pmu_enable(ctx->pmu); 2182 perf_pmu_enable(ctx->pmu);
2183 perf_ctx_unlock(cpuctx, ctx); 2183 perf_ctx_unlock(cpuctx, ctx);
2184 2184
@@ -3558,9 +3558,13 @@ static void ring_buffer_wakeup(struct perf_event *event)
3558 3558
3559 rcu_read_lock(); 3559 rcu_read_lock();
3560 rb = rcu_dereference(event->rb); 3560 rb = rcu_dereference(event->rb);
3561 list_for_each_entry_rcu(event, &rb->event_list, rb_entry) { 3561 if (!rb)
3562 goto unlock;
3563
3564 list_for_each_entry_rcu(event, &rb->event_list, rb_entry)
3562 wake_up_all(&event->waitq); 3565 wake_up_all(&event->waitq);
3563 } 3566
3567unlock:
3564 rcu_read_unlock(); 3568 rcu_read_unlock();
3565} 3569}
3566 3570