From: jacob.jun.pan@linux.intel.com
To: LKML <linux-kernel@vger.kernel.org>,
Li Zefan <lizf@cn.fujitsu.com>,
Arjan van de Ven <arjan@linux.intel.com>,
Paul Menage <menage@google.com>,
"Kirill A. Shutemov" <kirill@shutemov.name>,
Jacob Pan <jacob.jun.pan@linux.intel.com>,
container cgroup <containers@lists.linux-foundation.org>
Cc: Jacob Pan <jacob.jun.pan@linux.intel.com>
Subject: [PATCH] cgroups: respect cgroup timer slack value in prctl
Date: Tue, 1 Feb 2011 14:41:43 -0800 [thread overview]
Message-ID: <1296600103-15726-1-git-send-email-jacob.jun.pan@linux.intel.com> (raw)
From: Jacob Pan <jacob.jun.pan@linux.intel.com>
Per cgroup timer slack value is used to manage task groups
for more friendly power management behavior. Once a task is
attached to a cgroup, we should not allow user to change
(escape) the per cgroup restriction unless a more relaxed
timer slack value is given by user via prctl.
Signed-off-by: Jacob Pan <jacob.jun.pan@linux.intel.com>
---
include/linux/cgroup.h | 13 +++++++++++++
kernel/cgroup_timer_slack.c | 4 ----
kernel/sys.c | 21 ++++++++++++++++++++-
3 files changed, 33 insertions(+), 5 deletions(-)
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
index ed4ba11..4405666 100644
--- a/include/linux/cgroup.h
+++ b/include/linux/cgroup.h
@@ -627,6 +627,19 @@ bool css_is_ancestor(struct cgroup_subsys_state *cg,
unsigned short css_id(struct cgroup_subsys_state *css);
unsigned short css_depth(struct cgroup_subsys_state *css);
+#ifdef CONFIG_CGROUP_TIMER_SLACK
+struct timer_slack_cgroup {
+ struct cgroup_subsys_state css;
+ unsigned long timer_slack_ns;
+};
+
+static inline struct timer_slack_cgroup *task_timer_slack(struct task_struct *task)
+{
+ return container_of(task_subsys_state(task, timer_slack_subsys_id),
+ struct timer_slack_cgroup, css);
+}
+#endif
+
#else /* !CONFIG_CGROUPS */
static inline int cgroup_init_early(void) { return 0; }
diff --git a/kernel/cgroup_timer_slack.c b/kernel/cgroup_timer_slack.c
index daa452d..1de122a 100644
--- a/kernel/cgroup_timer_slack.c
+++ b/kernel/cgroup_timer_slack.c
@@ -4,10 +4,6 @@
#include <linux/slab.h>
struct cgroup_subsys timer_slack_subsys;
-struct timer_slack_cgroup {
- struct cgroup_subsys_state css;
- unsigned long timer_slack_ns;
-};
static struct timer_slack_cgroup *cgroup_to_tslack_cgroup(struct cgroup *cgroup)
{
diff --git a/kernel/sys.c b/kernel/sys.c
index 7f5a0cd..433fcdb 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -37,6 +37,8 @@
#include <linux/ptrace.h>
#include <linux/fs_struct.h>
#include <linux/gfp.h>
+#include <linux/cgroup.h>
+#include <linux/init_task.h>
#include <linux/compat.h>
#include <linux/syscalls.h>
@@ -1688,8 +1690,25 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
if (arg2 <= 0)
current->timer_slack_ns =
current->default_timer_slack_ns;
- else
+ else {
+#ifdef CONFIG_CGROUP_TIMER_SLACK
+ /* only allow more relaxed slack value than
+ * the attached timer slack cgroup allows.
+ */
+ unsigned long cg_timer_slack;
+
+ rcu_read_lock();
+ cg_timer_slack = task_timer_slack(current)->timer_slack_ns;
+ rcu_read_unlock();
+ if (cg_timer_slack < arg2 || cg_timer_slack
+ == TIMER_SLACK_NS_DEFAULT)
+ current->timer_slack_ns = arg2;
+ else
+ return -EINVAL;
+#else
current->timer_slack_ns = arg2;
+#endif
+ }
error = 0;
break;
case PR_MCE_KILL:
--
1.7.0.4
next reply other threads:[~2011-02-01 22:44 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-01 22:41 jacob.jun.pan [this message]
2011-02-02 7:07 ` [PATCH] cgroups: respect cgroup timer slack value in prctl Matt Helsley
[not found] ` <20110202070743.GO16432-52DBMbEzqgQ/wnmkkaCWp/UQ3DHhIser@public.gmane.org>
2011-02-02 7:15 ` Kirill A. Shutemov
2011-02-02 7:23 ` Matt Helsley
2011-02-02 7:15 ` Kirill A. Shutemov
2011-02-02 7:23 ` Matt Helsley
[not found] ` <1296600103-15726-1-git-send-email-jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2011-02-02 7:07 ` Matt Helsley
-- strict thread matches above, loose matches on Subject: below --
2011-02-01 22:41 jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA
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=1296600103-15726-1-git-send-email-jacob.jun.pan@linux.intel.com \
--to=jacob.jun.pan@linux.intel.com \
--cc=arjan@linux.intel.com \
--cc=containers@lists.linux-foundation.org \
--cc=kirill@shutemov.name \
--cc=linux-kernel@vger.kernel.org \
--cc=lizf@cn.fujitsu.com \
--cc=menage@google.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.