On Thu, Aug 25, 2011 at 07:38:18PM -0700, Matt Helsley wrote: > On Fri, Aug 26, 2011 at 12:43:09AM +0200, Tejun Heo wrote: > > Currently, there's no way to pass multiple tasks to cgroup_subsys > > methods necessitating the need for separate per-process and per-task > > methods. This patch introduces cgroup_taskset which can be used to > > pass multiple tasks and their associated cgroups to cgroup_subsys > > methods. > > This will be the third iterator-ish pattern in the cgroup code. > It's not your fault but it does seem a bit much to have: > > 1) When we need to iterate over all tasks in the cgroup and > don't mind holding the css set lock: > void cgroup_iter_start(cgroup, iterator) > task cgroup_iter_next(cgroup, iterator) > void cgroup_iter_end(cgroup, iterator) > > 2) For subsystem methods when we're iterating over a subset of > tasks that may or may not be in the cgroup (e.g. for can_attach) > -- use cgroup_tasksets: > task cgroup_taskset_first(tset) > task cgroup_taskset_next(tset) > > 3) An iterator over all the tasks which doesn't hold the css set > lock: > struct cgroup_scanner { > struct cgroup *cg; > int (*test_task)(struct task_struct *p, > struct cgroup_scanner *scan); > void (*process_task)(struct task_struct *p, > struct cgroup_scanner *scan); > struct ptr_heap *heap; > void *data; > }; > This is only used in cpuset code so far. Are other cgroup > patches planning on making use of it? > > Is there a sane way to merge all this? > > Perhaps we could drop the iterator interfaces in 1) and 2) and replace Oops! I meant to suggest dropping interfaces 1) and 3). Cheers, -Matt _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm