aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/cpuset.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/cpuset.c')
-rw-r--r--kernel/cpuset.c33
1 files changed, 15 insertions, 18 deletions
diff --git a/kernel/cpuset.c b/kernel/cpuset.c
index f6b33c696224..f9d4807c869f 100644
--- a/kernel/cpuset.c
+++ b/kernel/cpuset.c
@@ -1383,12 +1383,9 @@ static int cpuset_can_attach(struct cgroup_subsys_state *css,
1383 1383
1384 mutex_lock(&cpuset_mutex); 1384 mutex_lock(&cpuset_mutex);
1385 1385
1386 /* 1386 /* allow moving tasks into an empty cpuset if on default hierarchy */
1387 * We allow to move tasks into an empty cpuset if sane_behavior
1388 * flag is set.
1389 */
1390 ret = -ENOSPC; 1387 ret = -ENOSPC;
1391 if (!cgroup_sane_behavior(css->cgroup) && 1388 if (!cgroup_on_dfl(css->cgroup) &&
1392 (cpumask_empty(cs->cpus_allowed) || nodes_empty(cs->mems_allowed))) 1389 (cpumask_empty(cs->cpus_allowed) || nodes_empty(cs->mems_allowed)))
1393 goto out_unlock; 1390 goto out_unlock;
1394 1391
@@ -2030,7 +2027,7 @@ static void cpuset_hotplug_update_tasks(struct cpuset *cs)
2030 static cpumask_t off_cpus; 2027 static cpumask_t off_cpus;
2031 static nodemask_t off_mems; 2028 static nodemask_t off_mems;
2032 bool is_empty; 2029 bool is_empty;
2033 bool sane = cgroup_sane_behavior(cs->css.cgroup); 2030 bool on_dfl = cgroup_on_dfl(cs->css.cgroup);
2034 2031
2035retry: 2032retry:
2036 wait_event(cpuset_attach_wq, cs->attach_in_progress == 0); 2033 wait_event(cpuset_attach_wq, cs->attach_in_progress == 0);
@@ -2054,12 +2051,12 @@ retry:
2054 mutex_unlock(&callback_mutex); 2051 mutex_unlock(&callback_mutex);
2055 2052
2056 /* 2053 /*
2057 * If sane_behavior flag is set, we need to update tasks' cpumask 2054 * If on_dfl, we need to update tasks' cpumask for empty cpuset to
2058 * for empty cpuset to take on ancestor's cpumask. Otherwise, don't 2055 * take on ancestor's cpumask. Otherwise, don't call
2059 * call update_tasks_cpumask() if the cpuset becomes empty, as 2056 * update_tasks_cpumask() if the cpuset becomes empty, as the tasks
2060 * the tasks in it will be migrated to an ancestor. 2057 * in it will be migrated to an ancestor.
2061 */ 2058 */
2062 if ((sane && cpumask_empty(cs->cpus_allowed)) || 2059 if ((on_dfl && cpumask_empty(cs->cpus_allowed)) ||
2063 (!cpumask_empty(&off_cpus) && !cpumask_empty(cs->cpus_allowed))) 2060 (!cpumask_empty(&off_cpus) && !cpumask_empty(cs->cpus_allowed)))
2064 update_tasks_cpumask(cs); 2061 update_tasks_cpumask(cs);
2065 2062
@@ -2068,12 +2065,12 @@ retry:
2068 mutex_unlock(&callback_mutex); 2065 mutex_unlock(&callback_mutex);
2069 2066
2070 /* 2067 /*
2071 * If sane_behavior flag is set, we need to update tasks' nodemask 2068 * If on_dfl, we need to update tasks' nodemask for empty cpuset to
2072 * for empty cpuset to take on ancestor's nodemask. Otherwise, don't 2069 * take on ancestor's nodemask. Otherwise, don't call
2073 * call update_tasks_nodemask() if the cpuset becomes empty, as 2070 * update_tasks_nodemask() if the cpuset becomes empty, as the
2074 * the tasks in it will be migratd to an ancestor. 2071 * tasks in it will be migratd to an ancestor.
2075 */ 2072 */
2076 if ((sane && nodes_empty(cs->mems_allowed)) || 2073 if ((on_dfl && nodes_empty(cs->mems_allowed)) ||
2077 (!nodes_empty(off_mems) && !nodes_empty(cs->mems_allowed))) 2074 (!nodes_empty(off_mems) && !nodes_empty(cs->mems_allowed)))
2078 update_tasks_nodemask(cs); 2075 update_tasks_nodemask(cs);
2079 2076
@@ -2083,13 +2080,13 @@ retry:
2083 mutex_unlock(&cpuset_mutex); 2080 mutex_unlock(&cpuset_mutex);
2084 2081
2085 /* 2082 /*
2086 * If sane_behavior flag is set, we'll keep tasks in empty cpusets. 2083 * If on_dfl, we'll keep tasks in empty cpusets.
2087 * 2084 *
2088 * Otherwise move tasks to the nearest ancestor with execution 2085 * Otherwise move tasks to the nearest ancestor with execution
2089 * resources. This is full cgroup operation which will 2086 * resources. This is full cgroup operation which will
2090 * also call back into cpuset. Should be done outside any lock. 2087 * also call back into cpuset. Should be done outside any lock.
2091 */ 2088 */
2092 if (!sane && is_empty) 2089 if (!on_dfl && is_empty)
2093 remove_tasks_in_empty_cpuset(cs); 2090 remove_tasks_in_empty_cpuset(cs);
2094} 2091}
2095 2092