Re: [PATCH v8 05/17] KVM: x86: Avoid NTP frequency skew for KVM clock on 32-bit host
[email protected] Wed, 05 Aug 2026 00:02:21 +0000
| Newsgroups | org.kernel.vger.kvm |
|---|---|
| Message-ID | <[email protected]> |
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [Low] Unprotected 64-bit read of `pvclock_gtod_data.offs_boot` introduces a strict C11 data race and will trigger KCSAN warnings on 32-bit systems, though functional tearing is prevented by the freezer subsystem. -- --- Patch [5]: [PATCH v8 05/17] KVM: x86: Avoid NTP frequency skew for KVM clock on 32-bit host --- commit f1da2e2df5faddd4d0dcc9a823e72cc243ff1f13 Author: David Woodhouse <[email protected]> KVM: x86: Avoid NTP frequency skew for KVM clock on 32-bit host This commit removes the master clock check restriction for 32-bit hosts, enabling the clocksource notifier for 32-bit builds so get_kvmclock_base_ns() is unaffected by NTP sync. > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index 3107878a6fe5d..8f469fd9863f9 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c [ ... ] > @@ -915,13 +914,6 @@ 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_add(ktime_get_raw(), pvclock_gtod_data.offs_boot)); [Severity: Low] Will reading the 64-bit pvclock_gtod_data.offs_boot without seqcount protection or data_race() annotations trigger KCSAN data race warnings on 32-bit systems? By removing the ktime_get_boottime_ns() fallback, this read now executes on 32-bit architectures where it compiles to two non-atomic 32-bit accesses. If a KVM vCPU thread calls get_kvmclock_base_ns() while a timer interrupt runs timekeeping_update(), it overwrites offs_boot. Even though the value only actually changes during suspend when the freezer subsystem guarantees vCPU threads are frozen (preventing functional tearing), overwriting the identical value concurrently with an unprotected read still introduces a formal C11 data race. > -#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) -- Sashiko AI review ยท https://sashiko.dev/#/patchset/[email protected]?part=5