[patch 00/15] lib/vdso: Bugfix and consolidation

From: Thomas Gleixner
Date: Tue Jan 14 2020 - 14:49:03 EST


The recent discussions about changes in the VDSO to support PPC
triggered this consolidation series which in turn unearthed a subtle
bug affecting ARM.

The bug affects only ARM 32bit systems which lack a VDSO capable
timer. The absence of the ARM architected timer causes the VDSO update
code to terminate early. As a result the parts of the VDSO data which
is usable without a VDSO capable clocksource are not updated either,
but the VDSO code uses them, i.e. it uses stale data and will serve
that forever. The fix is to make only the parts of the update
conditional which are related to te high resolution interfaces.

The rest of the series is addressing the following points:

- Allow architectures to compile out the high resolution parts of the
VDSO library when they know at compile time that no VDSO capable
clocksource will be available.

- Move the storage of the VDSO clockmode into generic code and remove
all the redundant copies of the storage and the handling of it from
the architectures.

This allows to remove the check for a valid clocksource at runtime
from the clock readout function and make it generic by checking
for a clock mode != NONE in the generic code. This generates better
code on PPC and does not affect x86/arm performance.

Thanks,

tglx

8<----------
arch/arm/Kconfig | 1
arch/arm/include/asm/clocksource.h | 5 -
arch/arm/include/asm/vdso/gettimeofday.h | 6 +
arch/arm/include/asm/vdso/vsyscall.h | 35 ---------
arch/arm64/Kconfig | 1
arch/arm64/include/asm/clocksource.h | 5 -
arch/arm64/include/asm/vdso/vsyscall.h | 9 --
arch/mips/Kconfig | 1
arch/mips/include/asm/clocksource.h | 18 ----
arch/mips/include/asm/vdso/vsyscall.h | 9 --
arch/mips/kernel/csrc-r4k.c | 2
arch/x86/Kconfig | 1
arch/x86/entry/vdso/vma.c | 8 +-
arch/x86/include/asm/clocksource.h | 23 ++++--
arch/x86/include/asm/mshyperv.h | 4 -
arch/x86/include/asm/vdso/gettimeofday.h | 6 -
arch/x86/include/asm/vdso/vsyscall.h | 15 ----
arch/x86/include/asm/vgtod.h | 6 -
arch/x86/kernel/kvmclock.c | 9 ++
arch/x86/kernel/pvclock.c | 2
arch/x86/kernel/time.c | 12 ---
arch/x86/kernel/tsc.c | 32 +++++---
arch/x86/kvm/trace.h | 4 -
arch/x86/kvm/x86.c | 22 +++---
arch/x86/xen/time.c | 36 ++++++---
b/arch/mips/include/asm/vdso/gettimeofday.h | 29 +++----
b/include/asm-generic/vdso/vsyscall.h | 14 ---
drivers/clocksource/arm_arch_timer.c | 8 +-
drivers/clocksource/hyperv_timer.c | 7 +
drivers/clocksource/mips-gic-timer.c | 8 +-
include/linux/clocksource.h | 102 ++++++++++++++++------------
include/vdso/datapage.h | 2
kernel/time/clocksource.c | 9 ++
kernel/time/namespace.c | 7 +
kernel/time/vsyscall.c | 43 +++++------
lib/vdso/gettimeofday.c | 43 +++++++----
36 files changed, 259 insertions(+), 285 deletions(-)