diff options
author | Dhaval Giani <dhaval@linux.vnet.ibm.com> | 2008-02-29 10:02:44 +0530 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-04-19 19:44:58 +0200 |
commit | 0297b80339d545045490716fa8591b215fdd9458 (patch) | |
tree | 3a00c5bd83fc3f0493a2a26b95db0c4a7e4bb691 /kernel/sched.c | |
parent | 32cd756a80aaef657ac09c76e6eff3ba65567790 (diff) | |
download | lwn-0297b80339d545045490716fa8591b215fdd9458.tar.gz lwn-0297b80339d545045490716fa8591b215fdd9458.zip |
sched: allow cpuacct stats to be reset
Currently the schedstats implementation does not allow the statistics
to be reset. This patch aims to allow that.
echo 0 > cpuacct.usage
resets the usage. Any other value is not allowed and returns -EINVAL.
Signed-off-by: Dhaval Giani <dhaval@linux.vnet.ibm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/sched.c')
-rw-r--r-- | kernel/sched.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index e2f85c7a7476..e4bf4477aee5 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -8381,10 +8381,34 @@ static u64 cpuusage_read(struct cgroup *cgrp, struct cftype *cft) return totalcpuusage; } +static int cpuusage_write(struct cgroup *cgrp, struct cftype *cftype, + u64 reset) +{ + struct cpuacct *ca = cgroup_ca(cgrp); + int err = 0; + int i; + + if (reset) { + err = -EINVAL; + goto out; + } + + for_each_possible_cpu(i) { + u64 *cpuusage = percpu_ptr(ca->cpuusage, i); + + spin_lock_irq(&cpu_rq(i)->lock); + *cpuusage = 0; + spin_unlock_irq(&cpu_rq(i)->lock); + } +out: + return err; +} + static struct cftype files[] = { { .name = "usage", .read_uint = cpuusage_read, + .write_uint = cpuusage_write, }, }; |