Messages in this thread | | | Date | Wed, 23 Sep 2009 10:45:04 +0800 | From | Xiao Guangrong <> | Subject | Re: [PATCH] perf_counter: cleanup for __perf_event_sched_in() |
| |
Paul Mackerras wrote: > Xiao Guangrong writes: > >> It must be a group leader if event->attr.pinned is "1" > > Actually, looking at this more closely, it has to be a group leader > anyway since it's at the top level of ctx->group_list. In fact I see > four places where we do: > > list_for_each_entry(event, &ctx->group_list, group_entry) { > if (event == event->group_leader) > ... > > or the equivalent, three of which appear to have been introduced by > afedadf2 ("perf_counter: Optimize sched in/out of counters") back in > May by Peter Z. >
I only find three places in __perf_event_sched_in/out, could you tell me where is the fourth place?
I also noticed that all group leader is the top level of ctx->group_list, if I not missed, the perf_event_init_task() function can be optimized, like this:
int perf_event_init_task(struct task_struct *child) { ...... /* We can only look at parent_ctx->group_list to get group leader */ list_for_each_entry_rcu(event, &parent_ctx->event_list, event_entry) { if (event != event->group_leader) continue; ...... } ...... }
I'll fix those if you are not mind :-)
Thanks, Xiao
| |