* [PATCH 1/5] cpuacct: Allocate per_cpu cpuusage for root cpuacct statically
2013-03-28 7:20 [PATCH 0/5] cpuacct, cgroup: Remove cgroup_subsys.active Li Zefan
@ 2013-03-28 7:20 ` Li Zefan
2013-03-28 7:20 ` [PATCH 2/5] cpuacct: Initialize root cpuacct earlier Li Zefan
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Li Zefan @ 2013-03-28 7:20 UTC (permalink / raw)
To: Ingo Molnar, Tejun Heo; +Cc: Peter Zijlstra, LKML, Cgroups
This is a preparation, so later we can initialize cpuacct earlier.
Signed-off-by: Li Zefan <lizefan@huawei.com>
---
kernel/sched/cpuacct.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/sched/cpuacct.c b/kernel/sched/cpuacct.c
index 9305fd2..a691c4d 100644
--- a/kernel/sched/cpuacct.c
+++ b/kernel/sched/cpuacct.c
@@ -58,6 +58,7 @@ static inline struct cpuacct *parent_ca(struct cpuacct *ca)
return cgroup_ca(ca->css.cgroup->parent);
}
+static DEFINE_PER_CPU(u64, root_cpuacct_cpuusage);
static struct cpuacct root_cpuacct;
/* create a new cpu accounting group */
@@ -290,8 +291,7 @@ void cpuacct_account_field(struct task_struct *p, int index, u64 val)
void __init cpuacct_init(void)
{
root_cpuacct.cpustat = &kernel_cpustat;
- root_cpuacct.cpuusage = alloc_percpu(u64);
- BUG_ON(!root_cpuacct.cpuusage); /* Too early, not expected to fail */
+ root_cpuacct.cpuusage = &root_cpuacct_cpuusage;
}
struct cgroup_subsys cpuacct_subsys = {
--
1.8.0.2
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH 2/5] cpuacct: Initialize root cpuacct earlier
2013-03-28 7:20 [PATCH 0/5] cpuacct, cgroup: Remove cgroup_subsys.active Li Zefan
2013-03-28 7:20 ` [PATCH 1/5] cpuacct: Allocate per_cpu cpuusage for root cpuacct statically Li Zefan
@ 2013-03-28 7:20 ` Li Zefan
2013-03-28 7:21 ` [PATCH 3/5] cpuacct: Initialize cpuacct subsystem earlier Li Zefan
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Li Zefan @ 2013-03-28 7:20 UTC (permalink / raw)
To: Ingo Molnar, Tejun Heo; +Cc: Peter Zijlstra, LKML, Cgroups
Now we don't need cpuacct_init(), and instead we just initialize
root_cpuacct when it's defined.
Signed-off-by: Li Zefan <lizefan@huawei.com>
---
kernel/sched/core.c | 2 --
kernel/sched/cpuacct.c | 11 ++++-------
kernel/sched/cpuacct.h | 5 -----
3 files changed, 4 insertions(+), 14 deletions(-)
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 9f5a804..e12649c 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -6860,8 +6860,6 @@ void __init sched_init(void)
#endif /* CONFIG_CGROUP_SCHED */
- cpuacct_init();
-
for_each_possible_cpu(i) {
struct rq *rq;
diff --git a/kernel/sched/cpuacct.c b/kernel/sched/cpuacct.c
index a691c4d..0425581 100644
--- a/kernel/sched/cpuacct.c
+++ b/kernel/sched/cpuacct.c
@@ -59,7 +59,10 @@ static inline struct cpuacct *parent_ca(struct cpuacct *ca)
}
static DEFINE_PER_CPU(u64, root_cpuacct_cpuusage);
-static struct cpuacct root_cpuacct;
+static struct cpuacct root_cpuacct = {
+ .cpustat = &kernel_cpustat,
+ .cpuusage = &root_cpuacct_cpuusage,
+};
/* create a new cpu accounting group */
static struct cgroup_subsys_state *cpuacct_css_alloc(struct cgroup *cgrp)
@@ -288,12 +291,6 @@ void cpuacct_account_field(struct task_struct *p, int index, u64 val)
rcu_read_unlock();
}
-void __init cpuacct_init(void)
-{
- root_cpuacct.cpustat = &kernel_cpustat;
- root_cpuacct.cpuusage = &root_cpuacct_cpuusage;
-}
-
struct cgroup_subsys cpuacct_subsys = {
.name = "cpuacct",
.css_alloc = cpuacct_css_alloc,
diff --git a/kernel/sched/cpuacct.h b/kernel/sched/cpuacct.h
index 51cd76e..ed60562 100644
--- a/kernel/sched/cpuacct.h
+++ b/kernel/sched/cpuacct.h
@@ -1,15 +1,10 @@
#ifdef CONFIG_CGROUP_CPUACCT
-extern void cpuacct_init(void);
extern void cpuacct_charge(struct task_struct *tsk, u64 cputime);
extern void cpuacct_account_field(struct task_struct *p, int index, u64 val);
#else
-static inline void cpuacct_init(void)
-{
-}
-
static inline void cpuacct_charge(struct task_struct *tsk, u64 cputime)
{
}
--
1.8.0.2
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH 3/5] cpuacct: Initialize cpuacct subsystem earlier
2013-03-28 7:20 [PATCH 0/5] cpuacct, cgroup: Remove cgroup_subsys.active Li Zefan
2013-03-28 7:20 ` [PATCH 1/5] cpuacct: Allocate per_cpu cpuusage for root cpuacct statically Li Zefan
2013-03-28 7:20 ` [PATCH 2/5] cpuacct: Initialize root cpuacct earlier Li Zefan
@ 2013-03-28 7:21 ` Li Zefan
2013-03-28 7:21 ` [PATCH 4/5] cpuacct: No need to check subsys active state Li Zefan
2013-03-28 7:21 ` [PATCH 5/5] cgroup: Remove subsys.active flag Li Zefan
4 siblings, 0 replies; 7+ messages in thread
From: Li Zefan @ 2013-03-28 7:21 UTC (permalink / raw)
To: Ingo Molnar, Tejun Heo; +Cc: Peter Zijlstra, LKML, Cgroups
Initialize cpuacct before the scheduler is functioning, so when
cpuacct_charge() and cpuacct_account_field() are called, task_ca()
won't return NULL.
Signed-off-by: Li Zefan <lizefan@huawei.com>
---
kernel/sched/cpuacct.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/kernel/sched/cpuacct.c b/kernel/sched/cpuacct.c
index 0425581..75e46d2 100644
--- a/kernel/sched/cpuacct.c
+++ b/kernel/sched/cpuacct.c
@@ -292,9 +292,10 @@ void cpuacct_account_field(struct task_struct *p, int index, u64 val)
}
struct cgroup_subsys cpuacct_subsys = {
- .name = "cpuacct",
- .css_alloc = cpuacct_css_alloc,
- .css_free = cpuacct_css_free,
- .subsys_id = cpuacct_subsys_id,
- .base_cftypes = files,
+ .name = "cpuacct",
+ .css_alloc = cpuacct_css_alloc,
+ .css_free = cpuacct_css_free,
+ .subsys_id = cpuacct_subsys_id,
+ .base_cftypes = files,
+ .early_init = 1,
};
--
1.8.0.2
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH 4/5] cpuacct: No need to check subsys active state
2013-03-28 7:20 [PATCH 0/5] cpuacct, cgroup: Remove cgroup_subsys.active Li Zefan
` (2 preceding siblings ...)
2013-03-28 7:21 ` [PATCH 3/5] cpuacct: Initialize cpuacct subsystem earlier Li Zefan
@ 2013-03-28 7:21 ` Li Zefan
2013-03-28 7:21 ` [PATCH 5/5] cgroup: Remove subsys.active flag Li Zefan
4 siblings, 0 replies; 7+ messages in thread
From: Li Zefan @ 2013-03-28 7:21 UTC (permalink / raw)
To: Ingo Molnar, Tejun Heo; +Cc: Peter Zijlstra, LKML, Cgroups
Now we're guaranteed when cpuacct_charge() and cpuacct_account_field()
are called, cpuacct has already been properly initialized, so we no
longer need those checks.
Signed-off-by: Li Zefan <lizefan@huawei.com>
---
kernel/sched/cpuacct.c | 6 ------
1 file changed, 6 deletions(-)
diff --git a/kernel/sched/cpuacct.c b/kernel/sched/cpuacct.c
index 75e46d2..ef57ab6 100644
--- a/kernel/sched/cpuacct.c
+++ b/kernel/sched/cpuacct.c
@@ -247,9 +247,6 @@ void cpuacct_charge(struct task_struct *tsk, u64 cputime)
struct cpuacct *ca;
int cpu;
- if (unlikely(!cpuacct_subsys.active))
- return;
-
cpu = task_cpu(tsk);
rcu_read_lock();
@@ -278,9 +275,6 @@ void cpuacct_account_field(struct task_struct *p, int index, u64 val)
struct kernel_cpustat *kcpustat;
struct cpuacct *ca;
- if (unlikely(!cpuacct_subsys.active))
- return;
-
rcu_read_lock();
ca = task_ca(p);
while (ca != &root_cpuacct) {
--
1.8.0.2
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH 5/5] cgroup: Remove subsys.active flag
2013-03-28 7:20 [PATCH 0/5] cpuacct, cgroup: Remove cgroup_subsys.active Li Zefan
` (3 preceding siblings ...)
2013-03-28 7:21 ` [PATCH 4/5] cpuacct: No need to check subsys active state Li Zefan
@ 2013-03-28 7:21 ` Li Zefan
2013-03-28 18:19 ` Tejun Heo
4 siblings, 1 reply; 7+ messages in thread
From: Li Zefan @ 2013-03-28 7:21 UTC (permalink / raw)
To: Ingo Molnar, Tejun Heo; +Cc: Peter Zijlstra, LKML, Cgroups
The only user was cpuacct.
Signed-off-by: Li Zefan <lizefan@huawei.com>
---
include/linux/cgroup.h | 1 -
kernel/cgroup.c | 3 ---
2 files changed, 4 deletions(-)
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
index 7d73905..a236a5b 100644
--- a/include/linux/cgroup.h
+++ b/include/linux/cgroup.h
@@ -457,7 +457,6 @@ struct cgroup_subsys {
void (*bind)(struct cgroup *root);
int subsys_id;
- int active;
int disabled;
int early_init;
/*
diff --git a/kernel/cgroup.c b/kernel/cgroup.c
index 4855892..64dd57d 100644
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
@@ -4415,7 +4415,6 @@ static void __init cgroup_init_subsys(struct cgroup_subsys *ss)
* need to invoke fork callbacks here. */
BUG_ON(!list_empty(&init_task.tasks));
- ss->active = 1;
BUG_ON(online_css(ss, dummytop));
mutex_unlock(&cgroup_mutex);
@@ -4523,7 +4522,6 @@ int __init_or_module cgroup_load_subsys(struct cgroup_subsys *ss)
}
write_unlock(&css_set_lock);
- ss->active = 1;
ret = online_css(ss, dummytop);
if (ret)
goto err_unload;
@@ -4565,7 +4563,6 @@ void cgroup_unload_subsys(struct cgroup_subsys *ss)
mutex_lock(&cgroup_mutex);
offline_css(ss, dummytop);
- ss->active = 0;
if (ss->use_id) {
idr_remove_all(&ss->idr);
--
1.8.0.2
^ permalink raw reply [flat|nested] 7+ messages in thread