sched: fix prev_stime calculation
authorIngo Molnar <mingo@elte.hu>
Mon, 26 Nov 2007 20:21:49 +0000 (21:21 +0100)
committerIngo Molnar <mingo@elte.hu>
Mon, 26 Nov 2007 20:21:49 +0000 (21:21 +0100)
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>
fs/proc/array.c

index eba339ecba27b58e3a39d58d54062d1bdbe3a48f..65c62e1bfd6f6cb6170c53a55c90473fe10d5e6b 100644 (file)
@@ -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