From: Peter Hilber <peter.hilber@opensynergy.com>
To: linux-kernel@vger.kernel.org
Cc: Peter Hilber <peter.hilber@opensynergy.com>,
"D, Lakshmi Sowjanya" <lakshmi.sowjanya.d@intel.com>,
Thomas Gleixner <tglx@linutronix.de>,
jstultz@google.com, giometti@enneenne.com, corbet@lwn.net, "Dong,
Eddie" <eddie.dong@intel.com>,
"Hall, Christopher S" <christopher.s.hall@intel.com>,
Simon Horman <horms@kernel.org>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Marc Zyngier <maz@kernel.org>,
linux-arm-kernel@lists.infradead.org,
Sean Christopherson <seanjc@google.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
Wanpeng Li <wanpengli@tencent.com>,
Vitaly Kuznetsov <vkuznets@redhat.com>,
Mark Rutland <mark.rutland@arm.com>,
Daniel Lezcano <daniel.lezcano@linaro.org>,
Richard Cochran <richardcochran@gmail.com>,
kvm@vger.kernel.org, netdev@vger.kernel.org,
Stephen Boyd <sboyd@kernel.org>
Subject: [PATCH v3 0/8] treewide: Use clocksource ID for get_device_system_crosststamp()
Date: Thu, 1 Feb 2024 02:04:45 +0100 [thread overview]
Message-ID: <20240201010453.2212371-1-peter.hilber@opensynergy.com> (raw)
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
next reply other threads:[~2024-02-01 1:08 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-01 1:04 Peter Hilber [this message]
2024-02-01 1:04 ` [PATCH v3 1/8] x86/tsc: Fix major kernel-doc warnings for tsc.c Peter Hilber
2024-02-01 4:52 ` Randy Dunlap
2024-02-06 10:54 ` Peter Hilber
2024-02-06 20:34 ` Randy Dunlap
2024-02-01 1:04 ` [PATCH v3 2/8] timekeeping: Add clocksource ID to struct system_counterval_t Peter Hilber
2024-02-11 8:41 ` [tip: timers/ptp] " tip-bot2 for 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-11 8:41 ` [tip: timers/ptp] " tip-bot2 for Peter Hilber
2024-02-01 1:04 ` [PATCH v3 4/8] x86/kvm, ptp/kvm: " Peter Hilber
2024-02-11 8:41 ` [tip: timers/ptp] " tip-bot2 for 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-11 8:41 ` [tip: timers/ptp] " tip-bot2 for 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-11 8:41 ` [tip: timers/ptp] " tip-bot2 for 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-11 8:41 ` [tip: timers/ptp] " tip-bot2 for Peter Hilber
2024-02-01 1:04 ` [PATCH v3 8/8] kvmclock: Unexport kvmclock clocksource Peter Hilber
2024-02-11 8:41 ` [tip: timers/ptp] " tip-bot2 for Peter Hilber
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240201010453.2212371-1-peter.hilber@opensynergy.com \
--to=peter.hilber@opensynergy.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=bp@alien8.de \
--cc=christopher.s.hall@intel.com \
--cc=corbet@lwn.net \
--cc=daniel.lezcano@linaro.org \
--cc=dave.hansen@linux.intel.com \
--cc=eddie.dong@intel.com \
--cc=giometti@enneenne.com \
--cc=horms@kernel.org \
--cc=hpa@zytor.com \
--cc=jstultz@google.com \
--cc=kvm@vger.kernel.org \
--cc=lakshmi.sowjanya.d@intel.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=maz@kernel.org \
--cc=mingo@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=richardcochran@gmail.com \
--cc=sboyd@kernel.org \
--cc=seanjc@google.com \
--cc=tglx@linutronix.de \
--cc=vkuznets@redhat.com \
--cc=wanpengli@tencent.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®