git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi...
[pandora-kernel.git]
/
kernel
/
cgroup_freezer.c
diff --git
a/kernel/cgroup_freezer.c
b/kernel/cgroup_freezer.c
index
e691818
..
213c035
100644
(file)
--- a/
kernel/cgroup_freezer.c
+++ b/
kernel/cgroup_freezer.c
@@
-14,7
+14,7
@@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
-#include <linux/
module
.h>
+#include <linux/
export
.h>
#include <linux/slab.h>
#include <linux/cgroup.h>
#include <linux/fs.h>
#include <linux/slab.h>
#include <linux/cgroup.h>
#include <linux/fs.h>
@@
-153,6
+153,13
@@
static void freezer_destroy(struct cgroup_subsys *ss,
kfree(cgroup_freezer(cgroup));
}
kfree(cgroup_freezer(cgroup));
}
+/* task is frozen or will freeze immediately when next it gets woken */
+static bool is_task_frozen_enough(struct task_struct *task)
+{
+ return frozen(task) ||
+ (task_is_stopped_or_traced(task) && freezing(task));
+}
+
/*
* The call to cgroup_lock() in the freezer.state write method prevents
* a write to that file racing against an attach, and hence the
/*
* The call to cgroup_lock() in the freezer.state write method prevents
* a write to that file racing against an attach, and hence the
@@
-231,7
+238,7
@@
static void update_if_frozen(struct cgroup *cgroup,
cgroup_iter_start(cgroup, &it);
while ((task = cgroup_iter_next(cgroup, &it))) {
ntotal++;
cgroup_iter_start(cgroup, &it);
while ((task = cgroup_iter_next(cgroup, &it))) {
ntotal++;
- if (
frozen
(task))
+ if (
is_task_frozen_enough
(task))
nfrozen++;
}
nfrozen++;
}
@@
-284,7
+291,7
@@
static int try_to_freeze_cgroup(struct cgroup *cgroup, struct freezer *freezer)
while ((task = cgroup_iter_next(cgroup, &it))) {
if (!freeze_task(task, true))
continue;
while ((task = cgroup_iter_next(cgroup, &it))) {
if (!freeze_task(task, true))
continue;
- if (
frozen
(task))
+ if (
is_task_frozen_enough
(task))
continue;
if (!freezing(task) && !freezer_should_skip(task))
num_cant_freeze_now++;
continue;
if (!freezing(task) && !freezer_should_skip(task))
num_cant_freeze_now++;