linux/arch/s390
Heiko Carstens 8dd6066066 s390/idle: fix cpu idle time calculation
commit 3d7efa4edd upstream.

The idle time reported in /proc/stat sometimes incorrectly contains
huge values on s390. This is caused by a bug in arch_cpu_idle_time().

The kernel tries to figure out when a different cpu entered idle by
accessing its per-cpu data structure. There is an ordering problem: if
the remote cpu has an idle_enter value which is not zero, and an
idle_exit value which is zero, it is assumed it is idle since
"now". The "now" timestamp however is taken before the idle_enter
value is read.

Which in turn means that "now" can be smaller than idle_enter of the
remote cpu. Unconditionally subtracting idle_enter from "now" can thus
lead to a negative value (aka large unsigned value).

Fix this by moving the get_tod_clock() invocation out of the
loop. While at it also make the code a bit more readable.

A similar bug also exists for show_idle_time(). Fix this is as well.

Cc: <stable@vger.kernel.org>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-11-06 13:06:20 +01:00
..
appldata s390/appldata: reuse generic proc handler functions 2018-07-06 08:48:08 +02:00
boot s390/decompressor: add missing FORCE to build targets 2018-11-27 16:13:02 +01:00
configs s390: update defconfigs 2018-04-27 06:51:31 +02:00
crypto s390/crypto: xts-aes-s390 fix extra run-time crypto self tests finding 2019-10-05 13:09:55 +02:00
hypfs hypfs: Fix error number left in struct pointer member 2019-10-07 18:57:15 +02:00
include s390/uaccess: avoid (false positive) compiler warnings 2019-11-06 13:06:08 +01:00
kernel s390/idle: fix cpu idle time calculation 2019-11-06 13:06:20 +01:00
kvm KVM: s390: Test for bad access register and size at the start of S390_MEM_OP 2019-10-11 18:20:42 +02:00
lib s390/lib: use expoline for all bcr instructions 2018-08-07 13:38:13 +02:00
mm s390/cmm: fix information leak in cmm_timeout_handler() 2019-11-06 13:06:20 +01:00
net s390/bpf: use 32-bit index for tail calls 2019-09-21 07:16:51 +02:00
numa s390/mm: Fix ERROR: "__node_distance" undefined! 2018-11-27 16:13:03 +01:00
oprofile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
pci s390/pci: fix sleeping in atomic during hotplug 2019-01-09 17:38:41 +01:00
purgatory Kbuild updates for v4.19 2018-08-15 12:09:03 -07:00
scripts s390/build: add *.o.chkbss files to targets list 2018-07-02 12:32:23 +02:00
tools Minor code cleanups for PPC. 2018-08-19 10:38:36 -07:00
defconfig crypto: speck - remove Speck 2018-11-13 11:08:46 -08:00
Kbuild s390/kexec_file: Add purgatory 2018-04-16 09:10:22 +02:00
Kconfig Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2018-08-24 09:31:34 -07:00
Kconfig.debug Kconfig: consolidate the "Kernel hacking" menu 2018-08-02 08:06:48 +09:00
Makefile s390/boot: disable address-of-packed-member warning 2019-07-14 08:11:09 +02:00