aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/sched/cpuacct.c6
-rw-r--r--kernel/sched/cpuacct.h2
2 files changed, 6 insertions, 2 deletions
diff --git a/kernel/sched/cpuacct.c b/kernel/sched/cpuacct.c
index 72bd971ea377..b2aaaba16d46 100644
--- a/kernel/sched/cpuacct.c
+++ b/kernel/sched/cpuacct.c
@@ -210,9 +210,13 @@ void cpuacct_charge(struct task_struct *tsk, u64 cputime)
210 210
211 ca = task_ca(tsk); 211 ca = task_ca(tsk);
212 212
213 for (; ca; ca = parent_ca(ca)) { 213 while (true) {
214 u64 *cpuusage = per_cpu_ptr(ca->cpuusage, cpu); 214 u64 *cpuusage = per_cpu_ptr(ca->cpuusage, cpu);
215 *cpuusage += cputime; 215 *cpuusage += cputime;
216
217 ca = parent_ca(ca);
218 if (!ca)
219 break;
216 } 220 }
217 221
218 rcu_read_unlock(); 222 rcu_read_unlock();
diff --git a/kernel/sched/cpuacct.h b/kernel/sched/cpuacct.h
index bd0409b85525..45c168207fcc 100644
--- a/kernel/sched/cpuacct.h
+++ b/kernel/sched/cpuacct.h
@@ -36,7 +36,7 @@ static inline struct cpuacct *task_ca(struct task_struct *tsk)
36 36
37static inline struct cpuacct *parent_ca(struct cpuacct *ca) 37static inline struct cpuacct *parent_ca(struct cpuacct *ca)
38{ 38{
39 if (!ca || !ca->css.cgroup->parent) 39 if (!ca->css.cgroup->parent)
40 return NULL; 40 return NULL;
41 return cgroup_ca(ca->css.cgroup->parent); 41 return cgroup_ca(ca->css.cgroup->parent);
42} 42}