diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2014-07-16 17:04:34 -0400 |
---|---|---|
committer | John Stultz <john.stultz@linaro.org> | 2014-07-23 13:18:05 -0400 |
commit | ccbf62d8a284cf181ac28c8e8407dd077d90dd4b (patch) | |
tree | 7e1a4fffdc9a8f46e4bd22ad6070ad4fa768f1ed /kernel | |
parent | 57e0be041d9e21a7397eed3b67a7936ac4ac83c0 (diff) |
sched: Make task->start_time nanoseconds based
Simplify the timespec to nsec/usec conversions.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: John Stultz <john.stultz@linaro.org>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/acct.c | 10 | ||||
-rw-r--r-- | kernel/fork.c | 2 | ||||
-rw-r--r-- | kernel/tsacct.c | 19 |
3 files changed, 13 insertions, 18 deletions
diff --git a/kernel/acct.c b/kernel/acct.c index 1be013c6053e..a1844f14c6d6 100644 --- a/kernel/acct.c +++ b/kernel/acct.c | |||
@@ -458,9 +458,7 @@ static void do_acct_process(struct bsd_acct_struct *acct, | |||
458 | acct_t ac; | 458 | acct_t ac; |
459 | mm_segment_t fs; | 459 | mm_segment_t fs; |
460 | unsigned long flim; | 460 | unsigned long flim; |
461 | u64 elapsed; | 461 | u64 elapsed, run_time; |
462 | u64 run_time; | ||
463 | struct timespec uptime; | ||
464 | struct tty_struct *tty; | 462 | struct tty_struct *tty; |
465 | const struct cred *orig_cred; | 463 | const struct cred *orig_cred; |
466 | 464 | ||
@@ -484,10 +482,8 @@ static void do_acct_process(struct bsd_acct_struct *acct, | |||
484 | strlcpy(ac.ac_comm, current->comm, sizeof(ac.ac_comm)); | 482 | strlcpy(ac.ac_comm, current->comm, sizeof(ac.ac_comm)); |
485 | 483 | ||
486 | /* calculate run_time in nsec*/ | 484 | /* calculate run_time in nsec*/ |
487 | ktime_get_ts(&uptime); | 485 | run_time = ktime_get_ns(); |
488 | run_time = (u64)uptime.tv_sec*NSEC_PER_SEC + uptime.tv_nsec; | 486 | run_time -= current->group_leader->start_time; |
489 | run_time -= (u64)current->group_leader->start_time.tv_sec * NSEC_PER_SEC | ||
490 | + current->group_leader->start_time.tv_nsec; | ||
491 | /* convert nsec -> AHZ */ | 487 | /* convert nsec -> AHZ */ |
492 | elapsed = nsec_to_AHZ(run_time); | 488 | elapsed = nsec_to_AHZ(run_time); |
493 | #if ACCT_VERSION==3 | 489 | #if ACCT_VERSION==3 |
diff --git a/kernel/fork.c b/kernel/fork.c index a7ab82db2f60..627b7f80afb0 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -1262,7 +1262,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
1262 | 1262 | ||
1263 | posix_cpu_timers_init(p); | 1263 | posix_cpu_timers_init(p); |
1264 | 1264 | ||
1265 | ktime_get_ts(&p->start_time); | 1265 | p->start_time = ktime_get_ns(); |
1266 | p->real_start_time = ktime_get_boot_ns(); | 1266 | p->real_start_time = ktime_get_boot_ns(); |
1267 | p->io_context = NULL; | 1267 | p->io_context = NULL; |
1268 | p->audit_context = NULL; | 1268 | p->audit_context = NULL; |
diff --git a/kernel/tsacct.c b/kernel/tsacct.c index ea6d170452c4..975cb49e32bf 100644 --- a/kernel/tsacct.c +++ b/kernel/tsacct.c | |||
@@ -31,20 +31,19 @@ void bacct_add_tsk(struct user_namespace *user_ns, | |||
31 | struct taskstats *stats, struct task_struct *tsk) | 31 | struct taskstats *stats, struct task_struct *tsk) |
32 | { | 32 | { |
33 | const struct cred *tcred; | 33 | const struct cred *tcred; |
34 | struct timespec uptime, ts; | ||
35 | cputime_t utime, stime, utimescaled, stimescaled; | 34 | cputime_t utime, stime, utimescaled, stimescaled; |
36 | u64 ac_etime; | 35 | u64 delta; |
37 | 36 | ||
38 | BUILD_BUG_ON(TS_COMM_LEN < TASK_COMM_LEN); | 37 | BUILD_BUG_ON(TS_COMM_LEN < TASK_COMM_LEN); |
39 | 38 | ||
40 | /* calculate task elapsed time in timespec */ | 39 | /* calculate task elapsed time in nsec */ |
41 | ktime_get_ts(&uptime); | 40 | delta = ktime_get_ns() - tsk->start_time; |
42 | ts = timespec_sub(uptime, tsk->start_time); | 41 | /* Convert to micro seconds */ |
43 | /* rebase elapsed time to usec (should never be negative) */ | 42 | do_div(delta, NSEC_PER_USEC); |
44 | ac_etime = timespec_to_ns(&ts); | 43 | stats->ac_etime = delta; |
45 | do_div(ac_etime, NSEC_PER_USEC); | 44 | /* Convert to seconds for btime */ |
46 | stats->ac_etime = ac_etime; | 45 | do_div(delta, USEC_PER_SEC); |
47 | stats->ac_btime = get_seconds() - ts.tv_sec; | 46 | stats->ac_btime = get_seconds() - delta; |
48 | if (thread_group_leader(tsk)) { | 47 | if (thread_group_leader(tsk)) { |
49 | stats->ac_exitcode = tsk->exit_code; | 48 | stats->ac_exitcode = tsk->exit_code; |
50 | if (tsk->flags & PF_FORKNOEXEC) | 49 | if (tsk->flags & PF_FORKNOEXEC) |