Skip to content

Commit

Permalink
[S390] fix cputime overflow in uptime_proc_show
Browse files Browse the repository at this point in the history
For 32-bit architectures using standard jiffies the idletime calculation
in uptime_proc_show will quickly overflow. It takes (2^32 / HZ) seconds
of idle-time, or e.g. 12.45 days with no load on a quad-core with HZ=1000.
Switch to 64-bit calculations.

Cc: [email protected]
Cc: Michael Abbott <[email protected]>
Signed-off-by: Martin Schwidefsky <[email protected]>
  • Loading branch information
Martin Schwidefsky committed Dec 15, 2011
1 parent 6486163 commit c3e0ef9
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions fs/proc/uptime.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,20 @@ static int uptime_proc_show(struct seq_file *m, void *v)
{
struct timespec uptime;
struct timespec idle;
cputime64_t idletime;
u64 nsec;
u32 rem;
int i;
cputime_t idletime = 0;

idletime = 0;
for_each_possible_cpu(i)
idletime += kstat_cpu(i).cpustat.idle;

do_posix_clock_monotonic_gettime(&uptime);
monotonic_to_bootbased(&uptime);
cputime_to_timespec(idletime, &idle);
nsec = cputime64_to_jiffies64(idletime) * TICK_NSEC;
idle.tv_sec = div_u64_rem(nsec, NSEC_PER_SEC, &rem);
idle.tv_nsec = rem;
seq_printf(m, "%lu.%02lu %lu.%02lu\n",
(unsigned long) uptime.tv_sec,
(uptime.tv_nsec / (NSEC_PER_SEC / 100)),
Expand Down

0 comments on commit c3e0ef9

Please sign in to comment.