summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/acct.c10
-rw-r--r--kernel/fork.c5
-rw-r--r--kernel/posix-timers.c5
3 files changed, 12 insertions, 8 deletions
diff --git a/kernel/acct.c b/kernel/acct.c
index daf23c4efab4..fb6989a34f6e 100644
--- a/kernel/acct.c
+++ b/kernel/acct.c
@@ -384,6 +384,8 @@ static void do_acct_process(long exitcode, struct file *file)
unsigned long vsize;
unsigned long flim;
u64 elapsed;
+ u64 run_time;
+ struct timespec uptime;
/*
* First check to see if there is enough free_space to continue
@@ -401,7 +403,13 @@ static void do_acct_process(long exitcode, struct file *file)
ac.ac_version = ACCT_VERSION | ACCT_BYTEORDER;
strlcpy(ac.ac_comm, current->comm, sizeof(ac.ac_comm));
- elapsed = jiffies_64_to_AHZ(get_jiffies_64() - current->start_time);
+ /* calculate run_time in nsec*/
+ do_posix_clock_monotonic_gettime(&uptime);
+ run_time = (u64)uptime.tv_sec*NSEC_PER_SEC + uptime.tv_nsec;
+ run_time -= (u64)current->start_time.tv_sec*NSEC_PER_SEC
+ + current->start_time.tv_nsec;
+ /* convert nsec -> AHZ */
+ elapsed = nsec_to_AHZ(run_time);
#if ACCT_VERSION==3
ac.ac_etime = encode_float(elapsed);
#else
diff --git a/kernel/fork.c b/kernel/fork.c
index 8c7ba481c9a5..70f604c3937b 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -992,7 +992,7 @@ static task_t *copy_process(unsigned long clone_flags,
p->utime = p->stime = 0;
p->lock_depth = -1; /* -1 = no lock */
- p->start_time = get_jiffies_64();
+ do_posix_clock_monotonic_gettime(&p->start_time);
p->security = NULL;
p->io_context = NULL;
p->io_wait = NULL;
@@ -1146,7 +1146,8 @@ fork_out:
bad_fork_cleanup_namespace:
exit_namespace(p);
bad_fork_cleanup_mm:
- mmput(p->mm);
+ if (p->mm)
+ mmput(p->mm);
bad_fork_cleanup_signal:
exit_signal(p);
bad_fork_cleanup_sighand:
diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c
index ef5c42101748..7ba8941b834b 100644
--- a/kernel/posix-timers.c
+++ b/kernel/posix-timers.c
@@ -219,11 +219,6 @@ static __init int init_posix_timers(void)
.clock_set = do_posix_clock_monotonic_settime
};
-#ifdef CONFIG_TIME_INTERPOLATION
- /* Clocks are more accurate with time interpolators */
- clock_realtime.res = clock_monotonic.res = time_interpolator_resolution();
-#endif
-
register_posix_clock(CLOCK_REALTIME, &clock_realtime);
register_posix_clock(CLOCK_MONOTONIC, &clock_monotonic);