netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/8] treewide: Use clocksource ID for get_device_system_crosststamp()
@ 2024-02-01  1:04 Peter Hilber
  2024-02-01  1:04 ` [PATCH v3 2/8] timekeeping: Add clocksource ID to struct system_counterval_t Peter Hilber
                   ` (6 more replies)
  0 siblings, 7 replies; 10+ messages in thread
From: Peter Hilber @ 2024-02-01  1:04 UTC (permalink / raw)
  To: linux-kernel
  Cc: Peter Hilber, D, Lakshmi Sowjanya, Thomas Gleixner, jstultz,
	giometti, corbet, Dong, Eddie, Hall, Christopher S, Simon Horman,
	Andy Shevchenko, Marc Zyngier, linux-arm-kernel,
	Sean Christopherson, Paolo Bonzini, Ingo Molnar, Borislav Petkov,
	Dave Hansen, x86, H. Peter Anvin, Wanpeng Li, Vitaly Kuznetsov,
	Mark Rutland, Daniel Lezcano, Richard Cochran, kvm, netdev,
	Stephen Boyd

Overview
--------

This patch series changes struct system_counterval_t to identify the
clocksource through enum clocksource_ids, rather than through struct
clocksource *. The net effect of the patch series is that
get_device_system_crosststamp() callers can supply clocksource ids instead
of clocksource pointers. The pointers can be problematic to get hold of.

The series is also available at

        https://github.com/OpenSynergy/linux clocksource-id-for-xtstamp-v3

Motivation
----------

The immediate motivation for this patch series is to enable the virtio_rtc
RFC driver (v3 cf. [1]) to refer to the Arm Generic Timer clocksource
without requiring new helper functions in the arm_arch_timer driver. Other
future get_device_system_crosststamp() users may profit from this change as
well.

Clocksource structs are normally private to clocksource drivers. Therefore,
get_device_system_crosststamp() callers require that clocksource drivers
expose the clocksource of interest in some way.

Drivers such as virtio_rtc could obtain all information for calling
get_device_system_crosststamp() from their bound device, except for
clocksource identification. Often, such drivers' only direct relation with
the clocksource driver is clocksource identification. So using the
clocksource enum, rather than obtaining pointers in a clocksource driver
specific way, would reduce the coupling between the
get_device_system_crosststamp() callers and clocksource drivers.

Affected Code
-------------

This series modifies code which is relevant to
get_device_system_crosststamp(), in timekeeping, ptp/kvm, x86/kvm, and
x86/tsc.

There are two sorts of get_device_system_crosststamp() callers in the
current kernel:

1) On Intel platforms, some PTP hardware clocks, and the HDA controller,
obtain the clocksource pointer for get_device_system_crosststamp() using
convert_art_to_tsc() or convert_art_ns_to_tsc() from arch/x86.

2) The ptp_kvm driver uses kvm_arch_ptp_get_crosststamp(), which is
implemented for platforms with kvm_clock (x86) or arm_arch_timer.
Amongst other things, kvm_arch_ptp_get_crosststamp() returns a clocksource
pointer. The Arm implementation is in the arm_arch_timer driver.

Changes
-------

The series does the following:

- add clocksource ID to the get_device_system_crosststamp() param type

- add required clocksource ids and set them in
  get_device_system_crosststamp() users

- evaluate clocksource ID in get_device_system_crosststamp(), rather than
  clocksource pointer

- remove now obsolete clocksource pointer field and related code

This series should not alter any behavior. This series is a prerequisite
for the virtio_rtc driver [1].

Verification
------------

Out of the existing get_device_system_crosststamp() users, only ptp_kvm has
been tested (on x86-64 and arm64).

For each patch, with next-20240131 and mainline 1bbb19b6eb1b, on x86-64 and
arm64:

- built allmodconfig, allyesconfig, tinyconfig with GCC and LLVM (with a
  few unrelated features turned off)

- runtime-tested ptp_kvm, checking ioctl PTP_SYS_OFFSET_PRECISE return
  codes and clock synchronization success (reverted unrelated 
  "tty: serial: amba-pl011: Remove QDF2xxx workarounds" from linux-next
  on arm64, to get QEMU with console working)

Changelog
---------

v3:

- Drop RFC.

- Omit redundant clocksource_ids.h includes (Andy Shevchenko).

- Fix tsc.c kernel-doc warnings, omitting some redundant documentation
  (Simon Horman).

- Document relevant verification.

- Improve commit message wording.

v2:

- Align existing changes with sketch [2] by Thomas Gleixner (omitting
  additional clocksource base changes from [2]).

- Add follow-up improvements in ptp_kvm and kvmclock.

- Split patches differently (Thomas Gleixner).

- Refer to clocksource IDs as such in comments (Thomas Gleixner).

- Update comments which were still referring to clocksource pointers.

[1] https://lore.kernel.org/lkml/20231218073849.35294-1-peter.hilber@opensynergy.com/
[2] https://lore.kernel.org/lkml/87lec15i4b.ffs@tglx/


Peter Hilber (8):
  x86/tsc: Fix major kernel-doc warnings for tsc.c
  timekeeping: Add clocksource ID to struct system_counterval_t
  x86/tsc: Add clocksource ID, set system_counterval_t.cs_id
  x86/kvm, ptp/kvm: Add clocksource ID, set system_counterval_t.cs_id
  ptp/kvm, arm_arch_timer: Set system_counterval_t.cs_id to constant
  timekeeping: Evaluate system_counterval_t.cs_id instead of .cs
  treewide: Remove system_counterval_t.cs, which is never read
  kvmclock: Unexport kvmclock clocksource

 arch/x86/include/asm/kvmclock.h      |  2 --
 arch/x86/kernel/kvmclock.c           |  4 ++--
 arch/x86/kernel/tsc.c                | 28 +++++++++++++++-------------
 drivers/clocksource/arm_arch_timer.c |  6 +++---
 drivers/ptp/ptp_kvm_common.c         | 10 +++++-----
 drivers/ptp/ptp_kvm_x86.c            |  4 ++--
 include/linux/clocksource_ids.h      |  3 +++
 include/linux/ptp_kvm.h              |  4 ++--
 include/linux/timekeeping.h          | 10 ++++++----
 kernel/time/timekeeping.c            |  9 +++++----
 10 files changed, 43 insertions(+), 37 deletions(-)


base-commit: 06f658aadff0e483ee4f807b0b46c9e5cba62bfa
-- 
2.40.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2024-02-01 14:04 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-01  1:04 [PATCH v3 0/8] treewide: Use clocksource ID for get_device_system_crosststamp() Peter Hilber
2024-02-01  1:04 ` [PATCH v3 2/8] timekeeping: Add clocksource ID to struct system_counterval_t Peter Hilber
2024-02-01  1:04 ` [PATCH v3 3/8] x86/tsc: Add clocksource ID, set system_counterval_t.cs_id Peter Hilber
2024-02-01  1:04 ` [PATCH v3 4/8] x86/kvm, ptp/kvm: " Peter Hilber
2024-02-01  1:04 ` [PATCH v3 5/8] ptp/kvm, arm_arch_timer: Set system_counterval_t.cs_id to constant Peter Hilber
2024-02-01 13:52   ` Marc Zyngier
2024-02-01 14:04     ` Peter Hilber
2024-02-01  1:04 ` [PATCH v3 6/8] timekeeping: Evaluate system_counterval_t.cs_id instead of .cs Peter Hilber
2024-02-01  1:04 ` [PATCH v3 7/8] treewide: Remove system_counterval_t.cs, which is never read Peter Hilber
2024-02-01  1:04 ` [PATCH v3 8/8] kvmclock: Unexport kvmclock clocksource Peter Hilber

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).