diff options
author | Ingo Molnar <mingo@elte.hu> | 2007-11-26 15:21:49 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2007-11-26 15:21:49 -0500 |
commit | 08e4570a4a393bcc241f78dfc444cb0b07995fc0 (patch) | |
tree | e151f5d5ae0e9cb361e91a08c4d0fb8a7171b8ce /fs/proc/array.c | |
parent | 5e8869bb699d50be5c0733edfc71cfcd5b43e10a (diff) |
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.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) | |||
374 | stime = nsec_to_clock_t(p->se.sum_exec_runtime) - | 374 | stime = nsec_to_clock_t(p->se.sum_exec_runtime) - |
375 | cputime_to_clock_t(task_utime(p)); | 375 | cputime_to_clock_t(task_utime(p)); |
376 | 376 | ||
377 | p->prev_stime = max(p->prev_stime, clock_t_to_cputime(stime)); | 377 | if (stime >= 0) |
378 | p->prev_stime = max(p->prev_stime, clock_t_to_cputime(stime)); | ||
379 | |||
378 | return p->prev_stime; | 380 | return p->prev_stime; |
379 | } | 381 | } |
380 | #endif | 382 | #endif |