From: Michal Hocko <mhocko@suse.cz>
To: Tejun Heo <tj@kernel.org>
Cc: lizefan@huawei.com, paul@paulmenage.org, glommer@parallels.com,
containers@lists.linux-foundation.org, cgroups@vger.kernel.org,
peterz@infradead.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 3/3] cpuset: remove cpuset->parent
Date: Mon, 3 Dec 2012 17:20:07 +0100 [thread overview]
Message-ID: <20121203162007.GF17093@dhcp22.suse.cz> (raw)
In-Reply-To: <1354141621-11906-4-git-send-email-tj@kernel.org>
On Wed 28-11-12 14:27:01, Tejun Heo wrote:
> cgroup already tracks the hierarchy. Follow cgroup->parent to find
> the parent and drop cpuset->parent.
>
> Signed-off-by: Tejun Heo <tj@kernel.org>
Yes, makes total sense.
Reviewed-by: Michal Hocko <mhocko@suse.cz>
> ---
> kernel/cpuset.c | 28 +++++++++++++++++-----------
> 1 file changed, 17 insertions(+), 11 deletions(-)
>
> diff --git a/kernel/cpuset.c b/kernel/cpuset.c
> index 3a01730..d804415 100644
> --- a/kernel/cpuset.c
> +++ b/kernel/cpuset.c
> @@ -87,8 +87,6 @@ struct cpuset {
> cpumask_var_t cpus_allowed; /* CPUs allowed to tasks in cpuset */
> nodemask_t mems_allowed; /* Memory Nodes allowed to tasks */
>
> - struct cpuset *parent; /* my parent */
> -
> struct fmeter fmeter; /* memory_pressure filter */
>
> /*
> @@ -120,6 +118,15 @@ static inline struct cpuset *task_cs(struct task_struct *task)
> struct cpuset, css);
> }
>
> +static inline struct cpuset *parent_cs(const struct cpuset *cs)
> +{
> + struct cgroup *pcgrp = cs->css.cgroup->parent;
> +
> + if (pcgrp)
> + return cgroup_cs(pcgrp);
> + return NULL;
> +}
> +
> #ifdef CONFIG_NUMA
> static inline bool task_has_mempolicy(struct task_struct *task)
> {
> @@ -323,7 +330,7 @@ static void guarantee_online_cpus(const struct cpuset *cs,
> struct cpumask *pmask)
> {
> while (cs && !cpumask_intersects(cs->cpus_allowed, cpu_online_mask))
> - cs = cs->parent;
> + cs = parent_cs(cs);
> if (cs)
> cpumask_and(pmask, cs->cpus_allowed, cpu_online_mask);
> else
> @@ -348,7 +355,7 @@ static void guarantee_online_mems(const struct cpuset *cs, nodemask_t *pmask)
> {
> while (cs && !nodes_intersects(cs->mems_allowed,
> node_states[N_HIGH_MEMORY]))
> - cs = cs->parent;
> + cs = parent_cs(cs);
> if (cs)
> nodes_and(*pmask, cs->mems_allowed,
> node_states[N_HIGH_MEMORY]);
> @@ -461,7 +468,7 @@ static int validate_change(const struct cpuset *cur, const struct cpuset *trial)
> if (cur == &top_cpuset)
> goto out;
>
> - par = cur->parent;
> + par = parent_cs(cur);
>
> /* We must be a subset of our parent cpuset */
> ret = -EACCES;
> @@ -1860,7 +1867,6 @@ static struct cgroup_subsys_state *cpuset_css_alloc(struct cgroup *cont)
> fmeter_init(&cs->fmeter);
> INIT_WORK(&cs->hotplug_work, cpuset_propagate_hotplug_workfn);
> cs->relax_domain_level = -1;
> - cs->parent = cgroup_cs(cont->parent);
>
> return &cs->css;
> }
> @@ -1868,7 +1874,7 @@ static struct cgroup_subsys_state *cpuset_css_alloc(struct cgroup *cont)
> static int cpuset_css_online(struct cgroup *cgrp)
> {
> struct cpuset *cs = cgroup_cs(cgrp);
> - struct cpuset *parent = cs->parent;
> + struct cpuset *parent = parent_cs(cs);
> struct cpuset *tmp_cs;
> struct cgroup *pos_cg;
>
> @@ -2049,10 +2055,10 @@ static void remove_tasks_in_empty_cpuset(struct cpuset *cs)
> * Find its next-highest non-empty parent, (top cpuset
> * has online cpus, so can't be empty).
> */
> - parent = cs->parent;
> + parent = parent_cs(cs);
> while (cpumask_empty(parent->cpus_allowed) ||
> nodes_empty(parent->mems_allowed))
> - parent = parent->parent;
> + parent = parent_cs(parent);
>
> move_member_tasks_to_cpuset(cs, parent);
> }
> @@ -2353,8 +2359,8 @@ int cpuset_nodemask_valid_mems_allowed(nodemask_t *nodemask)
> */
> static const struct cpuset *nearest_hardwall_ancestor(const struct cpuset *cs)
> {
> - while (!(is_mem_exclusive(cs) || is_mem_hardwall(cs)) && cs->parent)
> - cs = cs->parent;
> + while (!(is_mem_exclusive(cs) || is_mem_hardwall(cs)) && parent_cs(cs))
> + cs = parent_cs(cs);
> return cs;
> }
>
> --
> 1.7.11.7
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
--
Michal Hocko
SUSE Labs
next prev parent reply other threads:[~2012-12-03 16:20 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-28 22:26 [PATCHSET cgroup/for-3.8] cpuset: drop cpuset->stack_list and ->parent Tejun Heo
2012-11-28 22:26 ` [PATCH 1/3] cpuset: implement cgroup_rightmost_descendant() Tejun Heo
2012-12-03 16:03 ` Michal Hocko
2012-11-28 22:27 ` [PATCH 2/3] cpuset: replace cpuset->stack_list with cpuset_for_each_descendant_pre() Tejun Heo
2012-12-03 16:18 ` Michal Hocko
2012-11-28 22:27 ` [PATCH 3/3] cpuset: remove cpuset->parent Tejun Heo
2012-12-03 16:20 ` Michal Hocko [this message]
2012-12-03 15:55 ` [PATCHSET cgroup/for-3.8] cpuset: drop cpuset->stack_list and ->parent Michal Hocko
2013-01-03 21:44 [PATCHSET] cpuset: drop cpuset->stack_list and ->parent, take#2 Tejun Heo
2013-01-03 21:44 ` [PATCH 3/3] cpuset: remove cpuset->parent Tejun Heo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20121203162007.GF17093@dhcp22.suse.cz \
--to=mhocko@suse.cz \
--cc=cgroups@vger.kernel.org \
--cc=containers@lists.linux-foundation.org \
--cc=glommer@parallels.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lizefan@huawei.com \
--cc=paul@paulmenage.org \
--cc=peterz@infradead.org \
--cc=tj@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).