diff options
Diffstat (limited to 'kernel/sched/cpuacct.c')
-rw-r--r-- | kernel/sched/cpuacct.c | 51 |
1 files changed, 21 insertions, 30 deletions
diff --git a/kernel/sched/cpuacct.c b/kernel/sched/cpuacct.c index dbb7e2cd95eb..f64722ff0299 100644 --- a/kernel/sched/cpuacct.c +++ b/kernel/sched/cpuacct.c | |||
@@ -33,30 +33,20 @@ struct cpuacct { | |||
33 | struct kernel_cpustat __percpu *cpustat; | 33 | struct kernel_cpustat __percpu *cpustat; |
34 | }; | 34 | }; |
35 | 35 | ||
36 | /* return cpu accounting group corresponding to this container */ | 36 | static inline struct cpuacct *css_ca(struct cgroup_subsys_state *css) |
37 | static inline struct cpuacct *cgroup_ca(struct cgroup *cgrp) | ||
38 | { | 37 | { |
39 | return container_of(cgroup_subsys_state(cgrp, cpuacct_subsys_id), | 38 | return css ? container_of(css, struct cpuacct, css) : NULL; |
40 | struct cpuacct, css); | ||
41 | } | 39 | } |
42 | 40 | ||
43 | /* return cpu accounting group to which this task belongs */ | 41 | /* return cpu accounting group to which this task belongs */ |
44 | static inline struct cpuacct *task_ca(struct task_struct *tsk) | 42 | static inline struct cpuacct *task_ca(struct task_struct *tsk) |
45 | { | 43 | { |
46 | return container_of(task_subsys_state(tsk, cpuacct_subsys_id), | 44 | return css_ca(task_css(tsk, cpuacct_subsys_id)); |
47 | struct cpuacct, css); | ||
48 | } | ||
49 | |||
50 | static inline struct cpuacct *__parent_ca(struct cpuacct *ca) | ||
51 | { | ||
52 | return cgroup_ca(ca->css.cgroup->parent); | ||
53 | } | 45 | } |
54 | 46 | ||
55 | static inline struct cpuacct *parent_ca(struct cpuacct *ca) | 47 | static inline struct cpuacct *parent_ca(struct cpuacct *ca) |
56 | { | 48 | { |
57 | if (!ca->css.cgroup->parent) | 49 | return css_ca(css_parent(&ca->css)); |
58 | return NULL; | ||
59 | return cgroup_ca(ca->css.cgroup->parent); | ||
60 | } | 50 | } |
61 | 51 | ||
62 | static DEFINE_PER_CPU(u64, root_cpuacct_cpuusage); | 52 | static DEFINE_PER_CPU(u64, root_cpuacct_cpuusage); |
@@ -66,11 +56,12 @@ static struct cpuacct root_cpuacct = { | |||
66 | }; | 56 | }; |
67 | 57 | ||
68 | /* create a new cpu accounting group */ | 58 | /* create a new cpu accounting group */ |
69 | static struct cgroup_subsys_state *cpuacct_css_alloc(struct cgroup *cgrp) | 59 | static struct cgroup_subsys_state * |
60 | cpuacct_css_alloc(struct cgroup_subsys_state *parent_css) | ||
70 | { | 61 | { |
71 | struct cpuacct *ca; | 62 | struct cpuacct *ca; |
72 | 63 | ||
73 | if (!cgrp->parent) | 64 | if (!parent_css) |
74 | return &root_cpuacct.css; | 65 | return &root_cpuacct.css; |
75 | 66 | ||
76 | ca = kzalloc(sizeof(*ca), GFP_KERNEL); | 67 | ca = kzalloc(sizeof(*ca), GFP_KERNEL); |
@@ -96,9 +87,9 @@ out: | |||
96 | } | 87 | } |
97 | 88 | ||
98 | /* destroy an existing cpu accounting group */ | 89 | /* destroy an existing cpu accounting group */ |
99 | static void cpuacct_css_free(struct cgroup *cgrp) | 90 | static void cpuacct_css_free(struct cgroup_subsys_state *css) |
100 | { | 91 | { |
101 | struct cpuacct *ca = cgroup_ca(cgrp); | 92 | struct cpuacct *ca = css_ca(css); |
102 | 93 | ||
103 | free_percpu(ca->cpustat); | 94 | free_percpu(ca->cpustat); |
104 | free_percpu(ca->cpuusage); | 95 | free_percpu(ca->cpuusage); |
@@ -141,9 +132,9 @@ static void cpuacct_cpuusage_write(struct cpuacct *ca, int cpu, u64 val) | |||
141 | } | 132 | } |
142 | 133 | ||
143 | /* return total cpu usage (in nanoseconds) of a group */ | 134 | /* return total cpu usage (in nanoseconds) of a group */ |
144 | static u64 cpuusage_read(struct cgroup *cgrp, struct cftype *cft) | 135 | static u64 cpuusage_read(struct cgroup_subsys_state *css, struct cftype *cft) |
145 | { | 136 | { |
146 | struct cpuacct *ca = cgroup_ca(cgrp); | 137 | struct cpuacct *ca = css_ca(css); |
147 | u64 totalcpuusage = 0; | 138 | u64 totalcpuusage = 0; |
148 | int i; | 139 | int i; |
149 | 140 | ||
@@ -153,10 +144,10 @@ static u64 cpuusage_read(struct cgroup *cgrp, struct cftype *cft) | |||
153 | return totalcpuusage; | 144 | return totalcpuusage; |
154 | } | 145 | } |
155 | 146 | ||
156 | static int cpuusage_write(struct cgroup *cgrp, struct cftype *cftype, | 147 | static int cpuusage_write(struct cgroup_subsys_state *css, struct cftype *cft, |
157 | u64 reset) | 148 | u64 reset) |
158 | { | 149 | { |
159 | struct cpuacct *ca = cgroup_ca(cgrp); | 150 | struct cpuacct *ca = css_ca(css); |
160 | int err = 0; | 151 | int err = 0; |
161 | int i; | 152 | int i; |
162 | 153 | ||
@@ -172,10 +163,10 @@ out: | |||
172 | return err; | 163 | return err; |
173 | } | 164 | } |
174 | 165 | ||
175 | static int cpuacct_percpu_seq_read(struct cgroup *cgroup, struct cftype *cft, | 166 | static int cpuacct_percpu_seq_read(struct cgroup_subsys_state *css, |
176 | struct seq_file *m) | 167 | struct cftype *cft, struct seq_file *m) |
177 | { | 168 | { |
178 | struct cpuacct *ca = cgroup_ca(cgroup); | 169 | struct cpuacct *ca = css_ca(css); |
179 | u64 percpu; | 170 | u64 percpu; |
180 | int i; | 171 | int i; |
181 | 172 | ||
@@ -192,10 +183,10 @@ static const char * const cpuacct_stat_desc[] = { | |||
192 | [CPUACCT_STAT_SYSTEM] = "system", | 183 | [CPUACCT_STAT_SYSTEM] = "system", |
193 | }; | 184 | }; |
194 | 185 | ||
195 | static int cpuacct_stats_show(struct cgroup *cgrp, struct cftype *cft, | 186 | static int cpuacct_stats_show(struct cgroup_subsys_state *css, |
196 | struct cgroup_map_cb *cb) | 187 | struct cftype *cft, struct cgroup_map_cb *cb) |
197 | { | 188 | { |
198 | struct cpuacct *ca = cgroup_ca(cgrp); | 189 | struct cpuacct *ca = css_ca(css); |
199 | int cpu; | 190 | int cpu; |
200 | s64 val = 0; | 191 | s64 val = 0; |
201 | 192 | ||
@@ -281,7 +272,7 @@ void cpuacct_account_field(struct task_struct *p, int index, u64 val) | |||
281 | while (ca != &root_cpuacct) { | 272 | while (ca != &root_cpuacct) { |
282 | kcpustat = this_cpu_ptr(ca->cpustat); | 273 | kcpustat = this_cpu_ptr(ca->cpustat); |
283 | kcpustat->cpustat[index] += val; | 274 | kcpustat->cpustat[index] += val; |
284 | ca = __parent_ca(ca); | 275 | ca = parent_ca(ca); |
285 | } | 276 | } |
286 | rcu_read_unlock(); | 277 | rcu_read_unlock(); |
287 | } | 278 | } |