]> Pileus Git - ~andy/linux/blob - kernel/sched/cpuacct.h
sched: Split cpuacct code out of sched.h
[~andy/linux] / kernel / sched / cpuacct.h
1 /* Time spent by the tasks of the cpu accounting group executing in ... */
2 enum cpuacct_stat_index {
3         CPUACCT_STAT_USER,      /* ... user mode */
4         CPUACCT_STAT_SYSTEM,    /* ... kernel mode */
5
6         CPUACCT_STAT_NSTATS,
7 };
8
9 #ifdef CONFIG_CGROUP_CPUACCT
10
11 #include <linux/cgroup.h>
12 /* track cpu usage of a group of tasks and its child groups */
13 struct cpuacct {
14         struct cgroup_subsys_state css;
15         /* cpuusage holds pointer to a u64-type object on every cpu */
16         u64 __percpu *cpuusage;
17         struct kernel_cpustat __percpu *cpustat;
18 };
19
20 extern struct cgroup_subsys cpuacct_subsys;
21 extern struct cpuacct root_cpuacct;
22
23 /* return cpu accounting group corresponding to this container */
24 static inline struct cpuacct *cgroup_ca(struct cgroup *cgrp)
25 {
26         return container_of(cgroup_subsys_state(cgrp, cpuacct_subsys_id),
27                             struct cpuacct, css);
28 }
29
30 /* return cpu accounting group to which this task belongs */
31 static inline struct cpuacct *task_ca(struct task_struct *tsk)
32 {
33         return container_of(task_subsys_state(tsk, cpuacct_subsys_id),
34                             struct cpuacct, css);
35 }
36
37 static inline struct cpuacct *parent_ca(struct cpuacct *ca)
38 {
39         if (!ca || !ca->css.cgroup->parent)
40                 return NULL;
41         return cgroup_ca(ca->css.cgroup->parent);
42 }
43
44 extern void cpuacct_charge(struct task_struct *tsk, u64 cputime);
45
46 #else
47
48 static inline void cpuacct_charge(struct task_struct *tsk, u64 cputime)
49 {
50 }
51
52 #endif