]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - kernel/cpuset.c
cgroup: remove struct cgroup_scanner
[karo-tx-linux.git] / kernel / cpuset.c
index be4f5036ea5e7782930857694f3a9d5d3884bcbb..6fe23f2ac74203e90d3ce9c0f054a5154d3f06da 100644 (file)
@@ -830,7 +830,7 @@ static struct cpuset *effective_nodemask_cpuset(struct cpuset *cs)
 /**
  * cpuset_change_cpumask - make a task's cpus_allowed the same as its cpuset's
  * @tsk: task to test
- * @scan: struct cgroup_scanner containing the cgroup of the task
+ * @data: cpuset to @tsk belongs to
  *
  * Called by cgroup_scan_tasks() for each task in a cgroup whose
  * cpus_allowed mask needs to be changed.
@@ -838,12 +838,11 @@ static struct cpuset *effective_nodemask_cpuset(struct cpuset *cs)
  * We don't need to re-check for the cgroup/cpuset membership, since we're
  * holding cpuset_mutex at this point.
  */
-static void cpuset_change_cpumask(struct task_struct *tsk,
-                                 struct cgroup_scanner *scan)
+static void cpuset_change_cpumask(struct task_struct *tsk, void *data)
 {
-       struct cpuset *cpus_cs;
+       struct cpuset *cs = data;
+       struct cpuset *cpus_cs = effective_cpumask_cpuset(cs);
 
-       cpus_cs = effective_cpumask_cpuset(cgroup_cs(scan->cgrp));
        set_cpus_allowed_ptr(tsk, cpus_cs->cpus_allowed);
 }
 
@@ -862,13 +861,8 @@ static void cpuset_change_cpumask(struct task_struct *tsk,
  */
 static void update_tasks_cpumask(struct cpuset *cs, struct ptr_heap *heap)
 {
-       struct cgroup_scanner scan;
-
-       scan.cgrp = cs->css.cgroup;
-       scan.test_task = NULL;
-       scan.process_task = cpuset_change_cpumask;
-       scan.heap = heap;
-       cgroup_scan_tasks(&scan);
+       cgroup_scan_tasks(cs->css.cgroup, NULL, cpuset_change_cpumask, cs,
+                         heap);
 }
 
 /*
@@ -1052,20 +1046,24 @@ static void cpuset_change_task_nodemask(struct task_struct *tsk,
        task_unlock(tsk);
 }
 
+struct cpuset_change_nodemask_arg {
+       struct cpuset           *cs;
+       nodemask_t              *newmems;
+};
+
 /*
  * Update task's mems_allowed and rebind its mempolicy and vmas' mempolicy
  * of it to cpuset's new mems_allowed, and migrate pages to new nodes if
  * memory_migrate flag is set. Called with cpuset_mutex held.
  */
-static void cpuset_change_nodemask(struct task_struct *p,
-                                  struct cgroup_scanner *scan)
+static void cpuset_change_nodemask(struct task_struct *p, void *data)
 {
-       struct cpuset *cs = cgroup_cs(scan->cgrp);
+       struct cpuset_change_nodemask_arg *arg = data;
+       struct cpuset *cs = arg->cs;
        struct mm_struct *mm;
        int migrate;
-       nodemask_t *newmems = scan->data;
 
-       cpuset_change_task_nodemask(p, newmems);
+       cpuset_change_task_nodemask(p, arg->newmems);
 
        mm = get_task_mm(p);
        if (!mm)
@@ -1075,7 +1073,7 @@ static void cpuset_change_nodemask(struct task_struct *p,
 
        mpol_rebind_mm(mm, &cs->mems_allowed);
        if (migrate)
-               cpuset_migrate_mm(mm, &cs->old_mems_allowed, newmems);
+               cpuset_migrate_mm(mm, &cs->old_mems_allowed, arg->newmems);
        mmput(mm);
 }
 
@@ -1093,19 +1091,14 @@ static void *cpuset_being_rebound;
 static void update_tasks_nodemask(struct cpuset *cs, struct ptr_heap *heap)
 {
        static nodemask_t newmems;      /* protected by cpuset_mutex */
-       struct cgroup_scanner scan;
        struct cpuset *mems_cs = effective_nodemask_cpuset(cs);
+       struct cpuset_change_nodemask_arg arg = { .cs = cs,
+                                                 .newmems = &newmems };
 
        cpuset_being_rebound = cs;              /* causes mpol_dup() rebind */
 
        guarantee_online_mems(mems_cs, &newmems);
 
-       scan.cgrp = cs->css.cgroup;
-       scan.test_task = NULL;
-       scan.process_task = cpuset_change_nodemask;
-       scan.heap = heap;
-       scan.data = &newmems;
-
        /*
         * The mpol_rebind_mm() call takes mmap_sem, which we couldn't
         * take while holding tasklist_lock.  Forks can happen - the
@@ -1116,7 +1109,8 @@ static void update_tasks_nodemask(struct cpuset *cs, struct ptr_heap *heap)
         * It's ok if we rebind the same mm twice; mpol_rebind_mm()
         * is idempotent.  Also migrate pages in each mm to new nodes.
         */
-       cgroup_scan_tasks(&scan);
+       cgroup_scan_tasks(cs->css.cgroup, NULL, cpuset_change_nodemask, &arg,
+                         heap);
 
        /*
         * All the tasks' nodemasks have been updated, update
@@ -1263,17 +1257,18 @@ static int update_relax_domain_level(struct cpuset *cs, s64 val)
 /*
  * cpuset_change_flag - make a task's spread flags the same as its cpuset's
  * @tsk: task to be updated
- * @scan: struct cgroup_scanner containing the cgroup of the task
+ * @data: cpuset to @tsk belongs to
  *
  * Called by cgroup_scan_tasks() for each task in a cgroup.
  *
  * We don't need to re-check for the cgroup/cpuset membership, since we're
  * holding cpuset_mutex at this point.
  */
-static void cpuset_change_flag(struct task_struct *tsk,
-                               struct cgroup_scanner *scan)
+static void cpuset_change_flag(struct task_struct *tsk, void *data)
 {
-       cpuset_update_task_spread_flag(cgroup_cs(scan->cgrp), tsk);
+       struct cpuset *cs = data;
+
+       cpuset_update_task_spread_flag(cs, tsk);
 }
 
 /*
@@ -1291,13 +1286,7 @@ static void cpuset_change_flag(struct task_struct *tsk,
  */
 static void update_tasks_flags(struct cpuset *cs, struct ptr_heap *heap)
 {
-       struct cgroup_scanner scan;
-
-       scan.cgrp = cs->css.cgroup;
-       scan.test_task = NULL;
-       scan.process_task = cpuset_change_flag;
-       scan.heap = heap;
-       cgroup_scan_tasks(&scan);
+       cgroup_scan_tasks(cs->css.cgroup, NULL, cpuset_change_flag, cs, heap);
 }
 
 /*