diff options
Diffstat (limited to 'kernel/cpuset.c')
-rw-r--r-- | kernel/cpuset.c | 33 |
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 | ||
2035 | retry: | 2032 | retry: |
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 | ||