|
@@ -337,65 +337,6 @@ int proc_pid_status(struct seq_file *m, struct pid_namespace *ns,
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-/*
|
|
|
|
- * Use precise platform statistics if available:
|
|
|
|
- */
|
|
|
|
-#ifdef CONFIG_VIRT_CPU_ACCOUNTING
|
|
|
|
-static cputime_t task_utime(struct task_struct *p)
|
|
|
|
-{
|
|
|
|
- return p->utime;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static cputime_t task_stime(struct task_struct *p)
|
|
|
|
-{
|
|
|
|
- return p->stime;
|
|
|
|
-}
|
|
|
|
-#else
|
|
|
|
-static 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);
|
|
|
|
- u64 temp;
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
- * Use CFS's precise accounting:
|
|
|
|
- */
|
|
|
|
- temp = (u64)nsec_to_clock_t(p->se.sum_exec_runtime);
|
|
|
|
-
|
|
|
|
- if (total) {
|
|
|
|
- temp *= utime;
|
|
|
|
- do_div(temp, total);
|
|
|
|
- }
|
|
|
|
- utime = (clock_t)temp;
|
|
|
|
-
|
|
|
|
- p->prev_utime = max(p->prev_utime, clock_t_to_cputime(utime));
|
|
|
|
- return p->prev_utime;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static cputime_t task_stime(struct task_struct *p)
|
|
|
|
-{
|
|
|
|
- clock_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));
|
|
|
|
-
|
|
|
|
- if (stime >= 0)
|
|
|
|
- p->prev_stime = max(p->prev_stime, clock_t_to_cputime(stime));
|
|
|
|
-
|
|
|
|
- return p->prev_stime;
|
|
|
|
-}
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
-static cputime_t task_gtime(struct task_struct *p)
|
|
|
|
-{
|
|
|
|
- return p->gtime;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
|
|
static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
|
|
struct pid *pid, struct task_struct *task, int whole)
|
|
struct pid *pid, struct task_struct *task, int whole)
|
|
{
|
|
{
|