Commit 3e85ba03 authored by David Howells's avatar David Howells Committed by Linus Torvalds

tsacct: fix bacct_add_tsk()'s use of do_div()

Fix bacct_add_tsk()'s use of do_div() on an s64 by making ac_etime a u64
instead and dividing that.

Possibly this should be guarded lest the interval calculation turn up
negative, but the possible negativity of the result of the division is
cast away, and it shouldn't end up negative anyway.

This was introduced by patch f3cef7a9.
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
Cc: Jay Lan <jlan@engr.sgi.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 297c5d92
...@@ -28,14 +28,14 @@ ...@@ -28,14 +28,14 @@
void bacct_add_tsk(struct taskstats *stats, struct task_struct *tsk) void bacct_add_tsk(struct taskstats *stats, struct task_struct *tsk)
{ {
struct timespec uptime, ts; struct timespec uptime, ts;
s64 ac_etime; u64 ac_etime;
BUILD_BUG_ON(TS_COMM_LEN < TASK_COMM_LEN); BUILD_BUG_ON(TS_COMM_LEN < TASK_COMM_LEN);
/* calculate task elapsed time in timespec */ /* calculate task elapsed time in timespec */
do_posix_clock_monotonic_gettime(&uptime); do_posix_clock_monotonic_gettime(&uptime);
ts = timespec_sub(uptime, tsk->start_time); ts = timespec_sub(uptime, tsk->start_time);
/* rebase elapsed time to usec */ /* rebase elapsed time to usec (should never be negative) */
ac_etime = timespec_to_ns(&ts); ac_etime = timespec_to_ns(&ts);
do_div(ac_etime, NSEC_PER_USEC); do_div(ac_etime, NSEC_PER_USEC);
stats->ac_etime = ac_etime; stats->ac_etime = ac_etime;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment