cpuset: add cs->effective_cpus and cs->effective_mems
authorLi Zefan <lizefan@huawei.com>
Wed, 9 Jul 2014 08:47:03 +0000 (16:47 +0800)
committerTejun Heo <tj@kernel.org>
Wed, 9 Jul 2014 19:56:15 +0000 (15:56 -0400)
commite2b9a3d7d8f4ab2f3491b8ed2ac6af692a2269b2
tree6c1b8cdb9ef14fe60c42ef0567598343491368c6
parent7b9a6ba56e9519ed5413a002dc0b0f01aa598bb5
cpuset: add cs->effective_cpus and cs->effective_mems

We're going to have separate user-configured masks and effective ones.

Eventually configured masks can only be changed by writing cpuset.cpus
and cpuset.mems, and they won't be restricted by parent cpuset. While
effective masks reflect cpu/memory hotplug and hierachical restriction,
and these are the real masks that apply to the tasks in the cpuset.

We calculate effective mask this way:
  - top cpuset's effective_mask == online_mask, otherwise
  - cpuset's effective_mask == configured_mask & parent effective_mask,
    if the result is empty, it inherits parent effective mask.

Those behavior changes are for default hierarchy only. For legacy
hierachy, effective_mask and configured_mask are the same, so we won't
break old interfaces.

This patch adds the effective masks to struct cpuset and initializes
them. The effective masks of the top cpuset is the same with configured
masks, and a child cpuset inherits its parent's effective masks.

This won't introduce behavior change.

v2:
- s/real_{mems,cpus}_allowed/effective_{mems,cpus}, suggested by Tejun.
- don't init effective masks in cpuset_css_online() if !cgroup_on_dfl.

Signed-off-by: Li Zefan <lizefan@huawei.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/cpuset.c