Alexey Budankov <alexey.budan...@linux.intel.com> writes: > @@ -3091,61 +3231,55 @@ static void cpu_ctx_sched_out(struct perf_cpu_context > *cpuctx, > } > > static void > -ctx_pinned_sched_in(struct perf_event_context *ctx, > - struct perf_cpu_context *cpuctx) > +ctx_pinned_sched_in(struct perf_event *event, > + struct perf_cpu_context *cpuctx, > + struct perf_event_context *ctx)
If you're doing this, you also need to rename the function, because it now schedules in one event and not a context. But better just keep it as is. > { > - struct perf_event *event; > - > - list_for_each_entry(event, &ctx->pinned_groups, group_entry) { Why not put your new iterator here in place of the old one, instead of moving things around? Because what follows is hard to read and is also completely unnecessary: > - if (event->state <= PERF_EVENT_STATE_OFF) > - continue; > - if (!event_filter_match(event)) > - continue; > + if (event->state <= PERF_EVENT_STATE_OFF) > + return; > + if (!event_filter_match(event)) > + return; like this, > > - /* may need to reset tstamp_enabled */ > - if (is_cgroup_event(event)) > - perf_cgroup_mark_enabled(event, ctx); > + /* may need to reset tstamp_enabled */ > + if (is_cgroup_event(event)) > + perf_cgroup_mark_enabled(event, ctx); or this > > - if (group_can_go_on(event, cpuctx, 1)) > - group_sched_in(event, cpuctx, ctx); > + if (group_can_go_on(event, cpuctx, 1)) > + group_sched_in(event, cpuctx, ctx); etc, etc. > @@ -3156,7 +3290,8 @@ ctx_sched_in(struct perf_event_context *ctx, > struct task_struct *task) > { > int is_active = ctx->is_active; > - u64 now; Why? > + struct perf_event *event; > + struct rb_node *node; > > lockdep_assert_held(&ctx->lock); > > @@ -3175,7 +3310,7 @@ ctx_sched_in(struct perf_event_context *ctx, > > if (is_active & EVENT_TIME) { > /* start ctx time */ > - now = perf_clock(); > + u64 now = perf_clock(); Why? > ctx->timestamp = now; > perf_cgroup_set_timestamp(task, ctx); > } > @@ -3185,11 +3320,19 @@ ctx_sched_in(struct perf_event_context *ctx, > * in order to give them the best chance of going on. > */ > if (is_active & EVENT_PINNED) > - ctx_pinned_sched_in(ctx, cpuctx); > + perf_event_groups_for_each(event, node, > + &ctx->pinned_groups, group_node, > + group_list, group_entry) > + ctx_pinned_sched_in(event, cpuctx, ctx); So this perf_event_groups_for_each() can just move into ctx_*_sched_in(), can't it? Regards, -- Alex