Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c3e0ef9a authored by Martin Schwidefsky's avatar Martin Schwidefsky
Browse files

[S390] fix cputime overflow in uptime_proc_show



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: stable@vger.kernel.org
Cc: Michael Abbott <michael.abbott@diamond.ac.uk>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 64861634
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -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)),