diff options
author | Ingo Molnar <mingo@elte.hu> | 2007-11-26 21:21:49 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2007-11-26 21:21:49 +0100 |
commit | 08e4570a4a393bcc241f78dfc444cb0b07995fc0 (patch) | |
tree | e151f5d5ae0e9cb361e91a08c4d0fb8a7171b8ce /fs | |
parent | sched: don't forget to unlock uids_mutex on error paths (diff) | |
download | linux-08e4570a4a393bcc241f78dfc444cb0b07995fc0.tar.xz linux-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')
-rw-r--r-- | fs/proc/array.c | 4 |
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 |