From: Sean Christopherson <seanjc@google.com>
To: Paolo Bonzini <pbonzini@redhat.com>,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
Paul Durrant <paul@xen.org>, David Woodhouse <dwmw@amazon.co.uk>,
Dongli Zhang <dongli.zhang@oracle.com>
Subject: Re: [PATCH v9 06/21] KVM: x86: Avoid NTP frequency skew for KVM clock on 32-bit host
Date: Wed, 12 Aug 2026 13:45:29 -0700 [thread overview]
Message-ID: <anzbaS86UUGNOmfn@google.com> (raw)
In-Reply-To: <20260810225500.869288-7-seanjc@google.com>
On Mon, Aug 10, 2026, Sean Christopherson wrote:
> From: David Woodhouse <dwmw@amazon.co.uk>
>
> Commit 53fafdbb8b21 ("KVM: x86: switch KVMCLOCK base to monotonic raw
> clock") did so only for 64-bit hosts, by capturing the boot offset from
> within the existing clocksource notifier update_pvclock_gtod().
>
> That notifier was added in commit 16e8d74d2da9 ("KVM: x86: notifier for
> clocksource changes") but only on x86_64, because its original purpose
> was just to disable the "master clock" mode which is only supported on
> x86_64.
>
> Now that the notifier is used for more than disabling master clock mode,
> enable it for the 32-bit build too so that get_kvmclock_base_ns() can be
> unaffected by NTP sync on 32-bit too.
>
> Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
> Reviewed-by: Paul Durrant <paul@xen.org>
> [sean: rebase on top of ktime_mono_to_any() usage]
> Signed-off-by: Sean Christopherson <seanjc@google.com>
> ---
...
> @@ -7118,9 +7111,9 @@ int kvm_x86_vendor_init(struct kvm_x86_init_ops *ops)
>
> if (pi_inject_timer == -1)
> pi_inject_timer = housekeeping_enabled(HK_TYPE_TIMER);
> -#ifdef CONFIG_X86_64
> pvclock_gtod_register_notifier(&pvclock_gtod_notifier);
From https://sashiko.dev/#/patchset/20260810225500.869288-1-seanjc%40google.com:
: Does this add unnecessary overhead to the timekeeper update path on 32-bit
: builds?
:
: The commit message notes a rebase on top of ktime_mono_to_any() usage. Because
: of that rebase, get_kvmclock_base_ns() now uses ktime_mono_to_any() directly
: and no longer reads from pvclock_gtod_data.
:
: Since all other readers of pvclock_gtod_data remain guarded by CONFIG_X86_64,
: is pvclock_gtod_data now effectively write-only on 32-bit? This would mean
: update_pvclock_gtod() runs on every host core timekeeping update just to
: populate an unused struct.
Huh. Indeed. Now that "Compute kvmclock base without pvclock_gtod_data" will
land before this patch, there's no need to register KVM's notifier on 32-bit,
and this patch is simply:
diff --git arch/x86/kvm/x86.c arch/x86/kvm/x86.c
index 67c762b3bf28..edafe13f74cf 100644
--- arch/x86/kvm/x86.c
+++ arch/x86/kvm/x86.c
@@ -926,19 +926,13 @@ static void update_pvclock_gtod(struct timekeeper *tk)
write_seqcount_end(&vdata->seq);
}
+#endif
static s64 get_kvmclock_base_ns(void)
{
/* Count up from boot time, but with the frequency of the raw clock. */
return ktime_to_ns(ktime_mono_to_any(ktime_get_raw(), TK_OFFS_BOOT));
}
-#else
-static s64 get_kvmclock_base_ns(void)
-{
- /* Master clock not used, so we can just use CLOCK_BOOTTIME. */
- return ktime_get_boottime_ns();
-}
-#endif
static uint32_t div_frac(uint32_t dividend, uint32_t divisor)
{
I'll post a v10, since this is a non-trivial change.
next prev parent reply other threads:[~2026-08-12 20:45 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-10 22:54 [PATCH v9 00/21] KVM: x86: Cleaning up the KVM clock mess, part 1 Sean Christopherson
2026-08-10 22:54 ` [PATCH v9 01/21] KVM: x86: Update "last guest TSC" snapshot prior to enabling IRQs/preemption Sean Christopherson
2026-08-10 22:54 ` [PATCH v9 02/21] KVM: x86: Improve accuracy of KVM clock when TSC scaling is in force Sean Christopherson
2026-08-12 20:08 ` Sean Christopherson
2026-08-10 22:54 ` [PATCH v9 03/21] KVM: x86: Explicitly disable TSC scaling without CONSTANT_TSC Sean Christopherson
2026-08-10 22:54 ` [PATCH v9 04/21] KVM: x86: Activate master clock immediately on vCPU creation Sean Christopherson
2026-08-10 22:54 ` [PATCH v9 05/21] KVM: x86: Compute kvmclock base without pvclock_gtod_data Sean Christopherson
2026-08-10 22:54 ` [PATCH v9 06/21] KVM: x86: Avoid NTP frequency skew for KVM clock on 32-bit host Sean Christopherson
2026-08-12 20:45 ` Sean Christopherson [this message]
2026-08-10 22:54 ` [PATCH v9 07/21] KVM: x86: Drop unnecessary CPU pinning when computing/getting kvmclock Sean Christopherson
2026-08-10 22:54 ` [PATCH v9 08/21] KVM: x86: Move "no master clock" fallback from __get_kvmclock() to get_kvmclock() Sean Christopherson
2026-08-10 22:54 ` [PATCH v9 09/21] KVM: x86: Wrap all of __get_kvmclock_master_clock() with CONFIG_X86_64=y Sean Christopherson
2026-08-10 22:54 ` [PATCH v9 10/21] KVM: x86: Fall back to non-master-clock if clockread fails in get_kvmclock() Sean Christopherson
2026-08-10 22:54 ` [PATCH v9 11/21] KVM: x86: Fix KVM clock precision in get_kvmclock() with TSC scaling Sean Christopherson
2026-08-10 22:54 ` [PATCH v9 12/21] KVM: x86: Use get_kvmclock() in kvm_get_wall_clock_epoch() Sean Christopherson
2026-08-10 22:54 ` [PATCH v9 13/21] KVM: x86: Fix compute_guest_tsc() to handle negative time deltas Sean Christopherson
2026-08-10 22:54 ` [PATCH v9 14/21] KVM: x86: Disable preemption, not IRQs, when getting TSC+freq pair Sean Christopherson
2026-08-10 22:54 ` [PATCH v9 15/21] KVM: x86: Make master clock logic in guest PV clock updates 64-bit only Sean Christopherson
2026-08-10 22:54 ` [PATCH v9 16/21] KVM: x86: Upscale TSC to "now", not master clock when updating PV clocks Sean Christopherson
2026-08-10 22:54 ` [PATCH v9 17/21] KVM: x86: Simplify and comment kvm_get_time_scale() Sean Christopherson
2026-08-10 22:54 ` [PATCH v9 18/21] KVM: x86: Remove implicit rdtsc() from kvm_compute_l1_tsc_offset() Sean Christopherson
2026-08-10 22:54 ` [PATCH v9 19/21] KVM: x86: Use kernel timekeeping snapshots for getting kvmclock time since boot Sean Christopherson
2026-08-10 22:54 ` [PATCH v9 20/21] KVM: x86: Use kernel timekeeping snapshot for monotonic clock Sean Christopherson
2026-08-10 22:54 ` [PATCH v9 21/21] KVM: x86: Use kernel timekeeping snapshot to get walltime+TSC Sean Christopherson
2026-08-11 13:58 ` [PATCH v9 00/21] KVM: x86: Cleaning up the KVM clock mess, part 1 Woodhouse, David
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=anzbaS86UUGNOmfn@google.com \
--to=seanjc@google.com \
--cc=dongli.zhang@oracle.com \
--cc=dwmw@amazon.co.uk \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=paul@xen.org \
--cc=pbonzini@redhat.com \
/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