|
@@ -5156,41 +5156,45 @@ cputime_t task_stime(struct task_struct *p)
|
|
|
return p->stime;
|
|
|
}
|
|
|
#else
|
|
|
+
|
|
|
+#ifndef nsecs_to_cputime
|
|
|
+# define nsecs_to_cputime(__nsecs) \
|
|
|
+ msecs_to_cputime(div_u64((__nsecs), NSEC_PER_MSEC))
|
|
|
+#endif
|
|
|
+
|
|
|
cputime_t task_utime(struct task_struct *p)
|
|
|
{
|
|
|
- clock_t utime = cputime_to_clock_t(p->utime),
|
|
|
- total = utime + cputime_to_clock_t(p->stime);
|
|
|
+ cputime_t utime = p->utime, total = utime + p->stime;
|
|
|
u64 temp;
|
|
|
|
|
|
/*
|
|
|
* Use CFS's precise accounting:
|
|
|
*/
|
|
|
- temp = (u64)nsec_to_clock_t(p->se.sum_exec_runtime);
|
|
|
+ temp = (u64)nsecs_to_cputime(p->se.sum_exec_runtime);
|
|
|
|
|
|
if (total) {
|
|
|
temp *= utime;
|
|
|
do_div(temp, total);
|
|
|
}
|
|
|
- utime = (clock_t)temp;
|
|
|
+ utime = (cputime_t)temp;
|
|
|
|
|
|
- p->prev_utime = max(p->prev_utime, clock_t_to_cputime(utime));
|
|
|
+ p->prev_utime = max(p->prev_utime, utime);
|
|
|
return p->prev_utime;
|
|
|
}
|
|
|
|
|
|
cputime_t task_stime(struct task_struct *p)
|
|
|
{
|
|
|
- clock_t stime;
|
|
|
+ cputime_t stime;
|
|
|
|
|
|
/*
|
|
|
* Use CFS's precise accounting. (we subtract utime from
|
|
|
* the total, to make sure the total observed by userspace
|
|
|
* grows monotonically - apps rely on that):
|
|
|
*/
|
|
|
- stime = nsec_to_clock_t(p->se.sum_exec_runtime) -
|
|
|
- cputime_to_clock_t(task_utime(p));
|
|
|
+ stime = nsecs_to_cputime(p->se.sum_exec_runtime) - task_utime(p);
|
|
|
|
|
|
if (stime >= 0)
|
|
|
- p->prev_stime = max(p->prev_stime, clock_t_to_cputime(stime));
|
|
|
+ p->prev_stime = max(p->prev_stime, stime);
|
|
|
|
|
|
return p->prev_stime;
|
|
|
}
|