summaryrefslogtreecommitdiff
path: root/fs/proc/array.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2007-11-26 21:21:49 +0100
committerIngo Molnar <mingo@elte.hu>2007-11-26 21:21:49 +0100
commit08e4570a4a393bcc241f78dfc444cb0b07995fc0 (patch)
treee151f5d5ae0e9cb361e91a08c4d0fb8a7171b8ce /fs/proc/array.c
parent5e8869bb699d50be5c0733edfc71cfcd5b43e10a (diff)
downloadlwn-08e4570a4a393bcc241f78dfc444cb0b07995fc0.tar.gz
lwn-08e4570a4a393bcc241f78dfc444cb0b07995fc0.zip
sched: fix prev_stime calculation
Srivatsa Vaddagiri noticed occasionally incorrect CPU usage values in top and tracked it down to stime going below 0 in task_stime(). Negative values are possible there due to the sampled nature of stime/utime. Fix suggested by Balbir Singh. Signed-off-by: Ingo Molnar <mingo@elte.hu> Tested-by: Srivatsa Vaddagiri <vatsa@linux.vnet.ibm.com> Reviewed-by: Balbir Singh <balbir@linux.vnet.ibm.com>
Diffstat (limited to 'fs/proc/array.c')
-rw-r--r--fs/proc/array.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/proc/array.c b/fs/proc/array.c
index eba339ecba27..65c62e1bfd6f 100644
--- a/fs/proc/array.c
+++ b/fs/proc/array.c
@@ -374,7 +374,9 @@ static cputime_t task_stime(struct task_struct *p)
stime = nsec_to_clock_t(p->se.sum_exec_runtime) -
cputime_to_clock_t(task_utime(p));
- p->prev_stime = max(p->prev_stime, clock_t_to_cputime(stime));
+ if (stime >= 0)
+ p->prev_stime = max(p->prev_stime, clock_t_to_cputime(stime));
+
return p->prev_stime;
}
#endif