[PATCH v2 00/13] local_clock() vs noinstr

Peter Zijlstra posted 13 patches 2 years, 8 months ago
arch/arm64/include/asm/arch_timer.h      |  8 +----
arch/arm64/include/asm/io.h              | 12 +++----
arch/loongarch/include/asm/loongarch.h   |  2 +-
arch/loongarch/kernel/time.c             |  6 ++--
arch/s390/include/asm/timex.h            | 13 ++++---
arch/s390/kernel/time.c                  |  5 +++
arch/x86/include/asm/mshyperv.h          |  5 +++
arch/x86/include/asm/vdso/gettimeofday.h | 41 ++++++++++++++++------
arch/x86/kernel/kvmclock.c               |  4 +--
arch/x86/kernel/tsc.c                    | 38 +++++++++++++++-----
arch/x86/kvm/x86.c                       |  7 ++--
arch/x86/xen/time.c                      |  3 +-
drivers/clocksource/arm_arch_timer.c     | 60 ++++++++++++++++++++++++--------
drivers/clocksource/hyperv_timer.c       | 44 ++++++++++++++---------
drivers/cpuidle/cpuidle.c                |  8 ++---
drivers/cpuidle/poll_state.c             |  4 +--
include/clocksource/hyperv_timer.h       | 24 +++++--------
include/linux/math64.h                   |  2 +-
include/linux/rbtree_latch.h             |  2 +-
include/linux/sched/clock.h              | 17 ++++++++-
include/linux/seqlock.h                  | 15 ++++----
kernel/printk/printk.c                   |  2 +-
kernel/sched/clock.c                     | 19 ++++++----
kernel/time/sched_clock.c                | 24 +++++++++----
kernel/time/timekeeping.c                |  4 +--
25 files changed, 242 insertions(+), 127 deletions(-)
[PATCH v2 00/13] local_clock() vs noinstr
Posted by Peter Zijlstra 2 years, 8 months ago
Hi All,

latest version of the local_clock_noinstr() patches.

Most of the changes are in Hyper-V and x86/vdso/gettimeofday; Michael has been
very helpful navigating the Hyper-V spec and fixing their sched_clock
implementation.

---
 arch/arm64/include/asm/arch_timer.h      |  8 +----
 arch/arm64/include/asm/io.h              | 12 +++----
 arch/loongarch/include/asm/loongarch.h   |  2 +-
 arch/loongarch/kernel/time.c             |  6 ++--
 arch/s390/include/asm/timex.h            | 13 ++++---
 arch/s390/kernel/time.c                  |  5 +++
 arch/x86/include/asm/mshyperv.h          |  5 +++
 arch/x86/include/asm/vdso/gettimeofday.h | 41 ++++++++++++++++------
 arch/x86/kernel/kvmclock.c               |  4 +--
 arch/x86/kernel/tsc.c                    | 38 +++++++++++++++-----
 arch/x86/kvm/x86.c                       |  7 ++--
 arch/x86/xen/time.c                      |  3 +-
 drivers/clocksource/arm_arch_timer.c     | 60 ++++++++++++++++++++++++--------
 drivers/clocksource/hyperv_timer.c       | 44 ++++++++++++++---------
 drivers/cpuidle/cpuidle.c                |  8 ++---
 drivers/cpuidle/poll_state.c             |  4 +--
 include/clocksource/hyperv_timer.h       | 24 +++++--------
 include/linux/math64.h                   |  2 +-
 include/linux/rbtree_latch.h             |  2 +-
 include/linux/sched/clock.h              | 17 ++++++++-
 include/linux/seqlock.h                  | 15 ++++----
 kernel/printk/printk.c                   |  2 +-
 kernel/sched/clock.c                     | 19 ++++++----
 kernel/time/sched_clock.c                | 24 +++++++++----
 kernel/time/timekeeping.c                |  4 +--
 25 files changed, 242 insertions(+), 127 deletions(-)
RE: [PATCH v2 00/13] local_clock() vs noinstr
Posted by Michael Kelley (LINUX) 2 years, 8 months ago
From: Peter Zijlstra <peterz@infradead.org> Sent: Friday, May 19, 2023 3:21 AM
> 
> Hi All,
> 
> latest version of the local_clock_noinstr() patches.
> 
> Most of the changes are in Hyper-V and x86/vdso/gettimeofday; Michael has been
> very helpful navigating the Hyper-V spec and fixing their sched_clock
> implementation.
> 
> ---
>  arch/arm64/include/asm/arch_timer.h      |  8 +----
>  arch/arm64/include/asm/io.h              | 12 +++----
>  arch/loongarch/include/asm/loongarch.h   |  2 +-
>  arch/loongarch/kernel/time.c             |  6 ++--
>  arch/s390/include/asm/timex.h            | 13 ++++---
>  arch/s390/kernel/time.c                  |  5 +++
>  arch/x86/include/asm/mshyperv.h          |  5 +++
>  arch/x86/include/asm/vdso/gettimeofday.h | 41 ++++++++++++++++------
>  arch/x86/kernel/kvmclock.c               |  4 +--
>  arch/x86/kernel/tsc.c                    | 38 +++++++++++++++-----
>  arch/x86/kvm/x86.c                       |  7 ++--
>  arch/x86/xen/time.c                      |  3 +-
>  drivers/clocksource/arm_arch_timer.c     | 60 ++++++++++++++++++++++++--------
>  drivers/clocksource/hyperv_timer.c       | 44 ++++++++++++++---------
>  drivers/cpuidle/cpuidle.c                |  8 ++---
>  drivers/cpuidle/poll_state.c             |  4 +--
>  include/clocksource/hyperv_timer.h       | 24 +++++--------
>  include/linux/math64.h                   |  2 +-
>  include/linux/rbtree_latch.h             |  2 +-
>  include/linux/sched/clock.h              | 17 ++++++++-
>  include/linux/seqlock.h                  | 15 ++++----
>  kernel/printk/printk.c                   |  2 +-
>  kernel/sched/clock.c                     | 19 ++++++----
>  kernel/time/sched_clock.c                | 24 +++++++++----
>  kernel/time/timekeeping.c                |  4 +--
>  25 files changed, 242 insertions(+), 127 deletions(-)

Based on linux-next20230519, tested the full series in a Hyper-V
VM on x86/x64.   Did mainly a basic smoke test.  Sched clock
appears to work correctly.  Verified correct operation of the TSC page
clocksource and the MSR-based clocksource.  Verified that vDSO
gettimeofday() works with the Hyper-V TSC page clocksource and
is correctly disabled with the Hyper-V MSR-based clocksource.
Tested in a normal VM and in an "SEV-SNP with vTOM" VM.

Tested-by: Michael Kelley <mikelley@microsoft.com>  # Hyper-V