mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Kamezawa Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
To: Tejun Heo <tj@kernel.org>
Cc: lizefan@huawei.com, mhocko@suse.cz, rjw@sisk.pl,
	linux-pm@vger.kernel.org, fweisbec@gmail.com,
	containers@lists.linux-foundation.org,
	linux-kernel@vger.kernel.org, cgroups@vger.kernel.org
Subject: Re: [PATCH 7/9] cgroup_freezer: introduce CGROUP_FREEZING_[SELF|PARENT]
Date: Thu, 08 Nov 2012 13:42:22 +0900	[thread overview]
Message-ID: <509B382E.4030707@jp.fujitsu.com> (raw)
In-Reply-To: <1351931915-1701-8-git-send-email-tj@kernel.org>

(2012/11/03 17:38), Tejun Heo wrote:
> Introduce FREEZING_SELF and FREEZING_PARENT and make FREEZING OR of
> the two flags.  This is to prepare for full hierarchy support.
>
> freezer_apply_date() is updated such that it can handle setting and
> clearing of both flags.  The two flags are also exposed to userland
> via read-only files self_freezing and parent_freezing.
>
> Other than the added cgroupfs files, this patch doesn't introduce any
> behavior change.
>
> Signed-off-by: Tejun Heo <tj@kernel.org>

What is the purpose of FREEZING_SELG/PARENT, having 2 flags and
make it visible to users ?

Thanks,
-Kame



> ---
>   kernel/cgroup_freezer.c | 55 ++++++++++++++++++++++++++++++++++++++++++-------
>   1 file changed, 47 insertions(+), 8 deletions(-)
>
> diff --git a/kernel/cgroup_freezer.c b/kernel/cgroup_freezer.c
> index e76aa9f..b8ad93c 100644
> --- a/kernel/cgroup_freezer.c
> +++ b/kernel/cgroup_freezer.c
> @@ -23,8 +23,12 @@
>   #include <linux/seq_file.h>
>
>   enum freezer_state_flags {
> -	CGROUP_FREEZING		= (1 << 1), /* this freezer is freezing */
> +	CGROUP_FREEZING_SELF	= (1 << 1), /* this freezer is freezing */
> +	CGROUP_FREEZING_PARENT	= (1 << 2), /* the parent freezer is freezing */
>   	CGROUP_FROZEN		= (1 << 3), /* this and its descendants frozen */
> +
> +	/* mask for all FREEZING flags */
> +	CGROUP_FREEZING		= CGROUP_FREEZING_SELF | CGROUP_FREEZING_PARENT,
>   };
>
>   struct freezer {
> @@ -245,8 +249,13 @@ static void unfreeze_cgroup(struct freezer *freezer)
>    * freezer_apply_state - apply state change to a single cgroup_freezer
>    * @freezer: freezer to apply state change to
>    * @freeze: whether to freeze or unfreeze
> + * @state: CGROUP_FREEZING_* flag to set or clear
> + *
> + * Set or clear @state on @cgroup according to @freeze, and perform
> + * freezing or thawing as necessary.
>    */
> -static void freezer_apply_state(struct freezer *freezer, bool freeze)
> +static void freezer_apply_state(struct freezer *freezer, bool freeze,
> +				unsigned int state)
>   {
>   	/* also synchronizes against task migration, see freezer_attach() */
>   	lockdep_assert_held(&freezer->lock);
> @@ -254,13 +263,19 @@ static void freezer_apply_state(struct freezer *freezer, bool freeze)
>   	if (freeze) {
>   		if (!(freezer->state & CGROUP_FREEZING))
>   			atomic_inc(&system_freezing_cnt);
> -		freezer->state |= CGROUP_FREEZING;
> +		freezer->state |= state;
>   		freeze_cgroup(freezer);
>   	} else {
> -		if (freezer->state & CGROUP_FREEZING)
> -			atomic_dec(&system_freezing_cnt);
> -		freezer->state &= ~(CGROUP_FREEZING | CGROUP_FROZEN);
> -		unfreeze_cgroup(freezer);
> +		bool was_freezing = freezer->state & CGROUP_FREEZING;
> +
> +		freezer->state &= ~state;
> +
> +		if (!(freezer->state & CGROUP_FREEZING)) {
> +			if (was_freezing)
> +				atomic_dec(&system_freezing_cnt);
> +			freezer->state &= ~CGROUP_FROZEN;
> +			unfreeze_cgroup(freezer);
> +		}
>   	}
>   }
>
> @@ -275,7 +290,7 @@ static void freezer_change_state(struct freezer *freezer, bool freeze)
>   {
>   	/* update @freezer */
>   	spin_lock_irq(&freezer->lock);
> -	freezer_apply_state(freezer, freeze);
> +	freezer_apply_state(freezer, freeze, CGROUP_FREEZING_SELF);
>   	spin_unlock_irq(&freezer->lock);
>   }
>
> @@ -295,6 +310,20 @@ static int freezer_write(struct cgroup *cgroup, struct cftype *cft,
>   	return 0;
>   }
>
> +static u64 freezer_self_freezing_read(struct cgroup *cgroup, struct cftype *cft)
> +{
> +	struct freezer *freezer = cgroup_freezer(cgroup);
> +
> +	return (bool)(freezer->state & CGROUP_FREEZING_SELF);
> +}
> +
> +static u64 freezer_parent_freezing_read(struct cgroup *cgroup, struct cftype *cft)
> +{
> +	struct freezer *freezer = cgroup_freezer(cgroup);
> +
> +	return (bool)(freezer->state & CGROUP_FREEZING_PARENT);
> +}
> +
>   static struct cftype files[] = {
>   	{
>   		.name = "state",
> @@ -302,6 +331,16 @@ static struct cftype files[] = {
>   		.read_seq_string = freezer_read,
>   		.write_string = freezer_write,
>   	},
> +	{
> +		.name = "self_freezing",
> +		.flags = CFTYPE_NOT_ON_ROOT,
> +		.read_u64 = freezer_self_freezing_read,
> +	},
> +	{
> +		.name = "parent_freezing",
> +		.flags = CFTYPE_NOT_ON_ROOT,
> +		.read_u64 = freezer_parent_freezing_read,
> +	},
>   	{ }	/* terminate */
>   };
>
>



  reply	other threads:[~2012-11-08  4:42 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-03  8:38 [PATCHSET cgroup/for-3.8] cgroup_freezer: implement proper hierarchy support Tejun Heo
2012-11-03  8:38 ` [PATCH 1/9] cgroup: add cgroup_subsys->post_create() Tejun Heo
2012-11-05 13:42   ` Glauber Costa
2012-11-05 18:02     ` [RFC] cgroup: deprecate clone_children Tejun Heo
2012-11-05 19:17       ` Serge Hallyn
2012-11-05 19:26         ` Tejun Heo
2012-11-07 15:25   ` [PATCH 1/9] cgroup: add cgroup_subsys->post_create() Michal Hocko
2012-11-07 17:02     ` Tejun Heo
2012-11-07 17:15   ` [PATCH 1/9 v2] " Tejun Heo
2012-11-07 17:40     ` Michal Hocko
2012-11-08  2:59     ` Kamezawa Hiroyuki
2012-11-08 19:07   ` [PATCH 1/9 v3] " Tejun Heo
2012-11-09  9:09     ` Li Zefan
2012-11-09  9:09     ` Li Zefan
2012-11-09 11:09     ` Daniel Wagner
2012-11-09 17:22       ` Tejun Heo
2012-11-10  1:35         ` Glauber Costa
2012-11-12 13:04         ` Daniel Wagner
2012-11-03  8:38 ` [PATCH 2/9] cgroup: Use rculist ops for cgroup->children Tejun Heo
2012-11-07 15:30   ` Michal Hocko
2012-11-08  3:01   ` Kamezawa Hiroyuki
2012-11-09  9:10   ` Li Zefan
2012-11-03  8:38 ` [PATCH 3/9] cgroup: implement generic child / descendant walk macros Tejun Heo
2012-11-06 20:31   ` Tejun Heo
2012-11-07 15:38     ` Michal Hocko
2012-11-07 16:54   ` Michal Hocko
2012-11-07 17:01     ` Tejun Heo
2012-11-07 17:49       ` Michal Hocko
2012-11-08  3:21   ` Kamezawa Hiroyuki
2012-11-08  9:50   ` Michal Hocko
2012-11-08 17:15     ` Tejun Heo
2012-11-08 17:59   ` [PATCH 3/9 v2] " Tejun Heo
2012-11-09  9:13     ` Li Zefan
2012-11-03  8:38 ` [PATCH 4/9] cgroup_freezer: trivial cleanups Tejun Heo
2012-11-08  3:24   ` Kamezawa Hiroyuki
2012-11-08  9:53   ` Michal Hocko
2012-11-03  8:38 ` [PATCH 5/9] cgroup_freezer: prepare freezer_change_state() for full hierarchy support Tejun Heo
2012-11-08  4:25   ` Kamezawa Hiroyuki
2012-11-08  9:56   ` Michal Hocko
2012-11-03  8:38 ` [PATCH 6/9] cgroup_freezer: make freezer->state mask of flags Tejun Heo
2012-11-08  4:37   ` Kamezawa Hiroyuki
2012-11-08  4:42     ` Tejun Heo
2012-11-08  5:00       ` Kamezawa Hiroyuki
2012-11-08 14:38         ` Tejun Heo
2012-11-08 10:39   ` Michal Hocko
2012-11-08 14:39     ` Tejun Heo
2012-11-08 14:47       ` Michal Hocko
2012-11-03  8:38 ` [PATCH 7/9] cgroup_freezer: introduce CGROUP_FREEZING_[SELF|PARENT] Tejun Heo
2012-11-08  4:42   ` Kamezawa Hiroyuki [this message]
2012-11-08  4:45     ` Tejun Heo
2012-11-08  4:56       ` Kamezawa Hiroyuki
2012-11-08 14:41         ` Tejun Heo
2012-11-08 12:47   ` Michal Hocko
2012-11-08 14:42     ` Tejun Heo
2012-11-03  8:38 ` [PATCH 8/9] cgroup_freezer: add ->post_create() and ->pre_destroy() and track online state Tejun Heo
2012-11-08  4:48   ` Kamezawa Hiroyuki
2012-11-08 15:41     ` Tejun Heo
2012-11-08 13:23   ` Michal Hocko
2012-11-08 17:17     ` Tejun Heo
2012-11-03  8:38 ` [PATCH 9/9] cgroup_freezer: implement proper hierarchy support Tejun Heo
2012-11-07 11:00   ` Michal Hocko
2012-11-07 16:31     ` Tejun Heo
2012-11-07 16:39   ` [PATCH 9/9 v2] " Tejun Heo
2012-11-08 14:08     ` Michal Hocko
2012-11-08 14:18       ` Tejun Heo
2012-11-08 15:20         ` Michal Hocko
2012-11-08 15:29           ` Tejun Heo
2012-11-08 15:57             ` Michal Hocko
2012-11-08 17:57   ` [PATCH 9/9 v3] " Tejun Heo
2012-11-08 18:02     ` Michal Hocko
2012-11-08 18:04       ` Tejun Heo
2012-11-08 18:08         ` Michal Hocko
2012-11-08 18:01 ` [PATCHSET cgroup/for-3.8] " Tejun Heo
2012-11-09 17:15 ` 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=509B382E.4030707@jp.fujitsu.com \
    --to=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=cgroups@vger.kernel.org \
    --cc=containers@lists.linux-foundation.org \
    --cc=fweisbec@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=lizefan@huawei.com \
    --cc=mhocko@suse.cz \
    --cc=rjw@sisk.pl \
    --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

Powered by JetHome