From nobody Thu Aug 13 09:24:11 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1786059419; cv=none; d=zohomail.com; s=zohoarc; b=MJTXpFOiq2DiLuzNYnq+14qBZ6mqfh8exIx6sQ7JRr0rT2EUboaVEbXfA6nspAQMUHarCnGPUve8ga7adzDSPR+9X7rf5lbet4q/HNQ/MOX9EfpCdwgC/d/08BBkz3R4/j8JNlicRHA5V8r33TFPAZ07qwjDEnj+tsSQMqVOHwg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786059419; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=VnGiMJAeWdyvdLpQdGy9NuKyd6BkLuzFrwi8wF2quVo=; b=a8Snt1zAg9Op2QyQ02CpWNRGkZuSJmHibgS9xAtG9RuJF3B04XHCeoqlUlc5Huv0TnZwITyfLKLh/gI9zZMSWaDACLJW3ohz/zl6/SFj/Dpb0sjB1tY9QJp2ou5k6U/fYxQBIBZ+8k2HLazFM9oxyLgQIvb5IRhN26O1RlyA6cs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1786059419422916.1899155913052; Thu, 6 Aug 2026 16:36:59 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1385266.1627688 (Exim 4.92) (envelope-from ) id 1ws7dV-0006cw-8c; Thu, 06 Aug 2026 23:36:29 +0000 Received: by outflank-mailman (output) from mailman id 1385266.1627688; Thu, 06 Aug 2026 23:36:29 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ws7dV-0006cj-42; Thu, 06 Aug 2026 23:36:29 +0000 Received: by outflank-mailman (input) for mailman id 1385266; Thu, 06 Aug 2026 23:36:28 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3eBp1agYKCdsPB7KG9DLLDIB.9LJUBK-ABSBIIFPQP.UBKMOLGB9Q.LOD@flex--seanjc.bounces.google.com>) id 1ws7dU-0006a3-4O for xen-devel@lists.xenproject.org; Thu, 06 Aug 2026 23:36:28 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1ws7dT-00BpFw-Hd for xen-devel@lists.xenproject.org; Fri, 07 Aug 2026 01:36:27 +0200 Received: from [10.42.69.6] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3eBp1agYKCdsPB7KG9DLLDIB.9LJUBK-ABSBIIFPQP.UBKMOLGB9Q.LOD@flex--seanjc.bounces.google.com>) id 6a751a44-2eae-0a2a0a5409dd-0a2a45069178-32 for ; Fri, 07 Aug 2026 01:36:27 +0200 Received: from [209.85.214.199] (helo=mail-pl1-f199.google.com) by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3eBp1agYKCdsPB7KG9DLLDIB.9LJUBK-ABSBIIFPQP.UBKMOLGB9Q.LOD@flex--seanjc.bounces.google.com>) id 6a751a79-195a-0a2a45060019-d155d6c7c0f2-3 for ; Fri, 07 Aug 2026 01:36:27 +0200 Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2ce8a76df2dso47495605ad.2 for ; Thu, 06 Aug 2026 16:36:26 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=google.com header.i="@google.com" header.h="Content-Type:Cc:To:From:Subject:Message-ID:References:Mime-Version:In-Reply-To:Date:Reply-To" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059385; x=1786664185; darn=lists.xenproject.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=VnGiMJAeWdyvdLpQdGy9NuKyd6BkLuzFrwi8wF2quVo=; b=d+kiInm2fADfglJT76haTsw7CHKZ07SSlfYuJorup/spRNvkTY9+7JQteJU8USu07z 6eSMkWGRG+aiz56Kc9Ha/crhehSxXv3+vsPcbXYyt5R1qGCbYDhBKiCm6hZFx4GBAsPr ijTSulVZ0wddVnHDbiyIZq64dIfriYX4xRuYX5J2M4b+GIHM70YJAMDYTqg85XwjEacI 1ZP3pkm2sXGUS4ws1fvA9sLlvNmVaGiF9ejmthB4btiobAnbFGFBl6pN2YooYKoik2v4 KeYrzxS6avNoYx4g0PUaI9KJQQsslE+cyil1an85ANPTS+iQHcPid/qxFMz2CrTiQKDE If0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059385; x=1786664185; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=VnGiMJAeWdyvdLpQdGy9NuKyd6BkLuzFrwi8wF2quVo=; b=kTXKFnutqIdMf597YTHTM9S+SU6v4DoHat1Fkms8lj8bnac+mCWDiUkSvlNtTGEQlu RFVloznxVka9uSJpsoSmba5+lRFIBEN4Ld+KtjJdfb+TIQDgWK6OGjMSlm8YARq8DUe/ f2J+gylE07u42sJgTM4i9aWMe1yeKL6xAos3sKrlxzCvwPQ+DABqqlkf25iGw9zD9Nzo qbmYVoPhaSiTRjrMum7KIdDD+LgbqjFmyhfn4YNUqW9N1l1FwXX0a8QGRBpEWtA1Dsc8 IRMUVmZFYdS7lhBNHITPCieibWbXG/oT3wqzBvI2XfNzdYKhGfMHtWFuQHnyrz3Oh8vO JZAA== X-Forwarded-Encrypted: i=1; AHgh+RrArYAKB3SyFv9KZ/8D+XVk8At5Rs2Jmw9b9W/clwIfbULicIoXHMDrXiFmPQiFFv3s85StiAdCgHI=@lists.xenproject.org X-Gm-Message-State: AOJu0YxjlmpxxqhyFHPK7vn0aeRXThlmLMk5kfo8JxsFEkXHDVED4gOM /efZwP88fLXQTRmETKAvNA7CoJeqXn8VTtW3JWfrnbeQjhqlgZpXgYD7mMGLbtvAiMcCBIbwoR+ 6l+zw1Q== X-Received: from plzw6.prod.google.com ([2002:a17:902:9046:b0:2cc:6ddb:debc]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:dac1:b0:2c0:e5ee:f554 with SMTP id d9443c01a7336-2d0ca71b3d7mr204312595ad.8.1786059384888; Thu, 06 Aug 2026 16:36:24 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:18 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-2-seanjc@google.com> Subject: [PATCH v6 01/51] x86/apic: Provide helpers to set local APIC timer frequency in hz and khz From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner X-purgate-ID: tlsNG-16d1c6/1786059387-FD20877B-5EBF9333/0/0 X-purgate-type: clean X-purgate-size: 6199 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1786059421254158501 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add and use APIs to set the local APIC timer period (given a frequency) instead of open coding the subtle HZ math in all external callers, and make lapic_timer_period local to apic.c. Provide APIs to specify the frequency in both hertz and kilohertz so that Hyper-V and VMware code aren't forced to lose precision. Opportunistically take the frequency as a u64 to harden against the possibility that the frequency (in Khz) is greater than 4294967, i.e. if the APIC timer runs at ~4.29 GHz. As pointed out by Sashiko, 4294968 * 1000 =3D=3D 0x1_000002c0, and thus a Khz period of 4294968 would silently overflow the 32-bit unsigned integer used by most callers. Print out who set the period to maintain equivalent Hyper-V and VMware functionality, and in general to make it easier to triage/debug issues. Cc: Michael Kelley Signed-off-by: Sean Christopherson Reviewed-by: David Woodhouse --- arch/x86/include/asm/apic.h | 3 ++- arch/x86/kernel/apic/apic.c | 19 ++++++++++++++++++- arch/x86/kernel/cpu/mshyperv.c | 5 +---- arch/x86/kernel/cpu/vmware.c | 4 +--- arch/x86/kernel/jailhouse.c | 2 +- arch/x86/kernel/tsc.c | 2 +- arch/x86/kernel/tsc_msr.c | 2 +- 7 files changed, 25 insertions(+), 12 deletions(-) diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h index 9cd493d467d4..6946220a6008 100644 --- a/arch/x86/include/asm/apic.h +++ b/arch/x86/include/asm/apic.h @@ -63,7 +63,6 @@ extern int apic_verbosity; extern int local_apic_timer_c2_ok; =20 extern bool apic_is_disabled; -extern unsigned int lapic_timer_period; =20 extern enum apic_intr_mode_id apic_intr_mode; enum apic_intr_mode_id { @@ -138,6 +137,8 @@ void register_lapic_address(unsigned long address); extern void setup_boot_APIC_clock(void); extern void setup_secondary_APIC_clock(void); extern void lapic_update_tsc_freq(void); +extern void apic_set_timer_frequency_hz(u64 freq_hz, const char *source); +extern void apic_set_timer_frequency_khz(u64 freq_khz, const char *source); =20 #ifdef CONFIG_X86_64 static inline bool apic_force_enable(unsigned long addr) diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index 90025451ace2..9239dca91c41 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -37,6 +37,7 @@ #include #include #include +#include =20 #include =20 @@ -176,7 +177,7 @@ static struct resource lapic_resource =3D { }; =20 /* Measured in ticks per HZ. */ -unsigned int lapic_timer_period =3D 0; +static unsigned int lapic_timer_period; =20 static void apic_pm_activate(void); =20 @@ -796,6 +797,22 @@ bool __init apic_needs_pit(void) return lapic_timer_period =3D=3D 0; } =20 +void apic_set_timer_frequency_hz(u64 freq_hz, const char *source) +{ + u32 f_remainder; + u64 f_khz =3D div_u64_rem(freq_hz, HZ_PER_KHZ, &f_remainder); + + lapic_timer_period =3D div_u64(freq_hz, HZ); + + pr_info("Local APIC Timer Frequency set to %llu.%03u KHz (from '%s').\n", + f_khz, f_remainder, source); +} + +void apic_set_timer_frequency_khz(u64 freq_khz, const char *source) +{ + apic_set_timer_frequency_hz(freq_khz * HZ_PER_KHZ, source); +} + static int __init calibrate_APIC_clock(void) { struct clock_event_device *levt =3D this_cpu_ptr(&lapic_events); diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c index 185d4f677ec0..cadc7f872b4f 100644 --- a/arch/x86/kernel/cpu/mshyperv.c +++ b/arch/x86/kernel/cpu/mshyperv.c @@ -646,10 +646,7 @@ static void __init ms_hyperv_init_platform(void) u64 hv_lapic_frequency; =20 rdmsrq(HV_X64_MSR_APIC_FREQUENCY, hv_lapic_frequency); - hv_lapic_frequency =3D div_u64(hv_lapic_frequency, HZ); - lapic_timer_period =3D hv_lapic_frequency; - pr_info("Hyper-V: LAPIC Timer Frequency: %#x\n", - lapic_timer_period); + apic_set_timer_frequency_hz(hv_lapic_frequency, "Hyper-V hypervisor"); } =20 register_nmi_handler(NMI_UNKNOWN, hv_nmi_unknown, NMI_FLAG_FIRST, diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c index 34b73573b108..22842bf5b59e 100644 --- a/arch/x86/kernel/cpu/vmware.c +++ b/arch/x86/kernel/cpu/vmware.c @@ -424,9 +424,7 @@ static void __init vmware_platform_setup(void) =20 #ifdef CONFIG_X86_LOCAL_APIC /* Skip lapic calibration since we know the bus frequency. */ - lapic_timer_period =3D ecx / HZ; - pr_info("Host bus clock speed read from hypervisor : %u Hz\n", - ecx); + apic_set_timer_frequency_hz(ecx, "VMware hypervisor"); #endif } else { pr_warn("Failed to get TSC freq from the hypervisor\n"); diff --git a/arch/x86/kernel/jailhouse.c b/arch/x86/kernel/jailhouse.c index f58ce9220e0f..615a1f25c83a 100644 --- a/arch/x86/kernel/jailhouse.c +++ b/arch/x86/kernel/jailhouse.c @@ -65,7 +65,7 @@ static void jailhouse_get_wallclock(struct timespec64 *no= w) =20 static void __init jailhouse_timer_init(void) { - lapic_timer_period =3D setup_data.v1.apic_khz * (1000 / HZ); + apic_set_timer_frequency_khz(setup_data.v1.apic_khz, "Jailhouse hyperviso= r"); } =20 static unsigned long jailhouse_get_tsc(void) diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 723347e2cf7f..63e26805f8dd 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -717,7 +717,7 @@ unsigned long native_calibrate_tsc(void) * lapic_timer_period here to avoid having to calibrate the APIC * timer later. */ - lapic_timer_period =3D crystal_khz * 1000 / HZ; + apic_set_timer_frequency_khz(crystal_khz, "CPUID 0x15/0x16"); #endif =20 return crystal_khz * ebx_numerator / eax_denominator; diff --git a/arch/x86/kernel/tsc_msr.c b/arch/x86/kernel/tsc_msr.c index d74743c8d2a4..4bd5f2ae656b 100644 --- a/arch/x86/kernel/tsc_msr.c +++ b/arch/x86/kernel/tsc_msr.c @@ -212,7 +212,7 @@ unsigned long cpu_khz_from_msr(void) pr_err("Error MSR_FSB_FREQ index %d is unknown\n", index); =20 #ifdef CONFIG_X86_LOCAL_APIC - lapic_timer_period =3D (freq * 1000) / HZ; + apic_set_timer_frequency_khz(freq, "MSR_FSB_FREQ"); #endif =20 /* --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1786059416; cv=none; d=zohomail.com; s=zohoarc; b=ge+fQu28g2mw4DtLfRt0AFTCYWoM1b0aQqmoZBLGxUrQd5dqE99RhUz9c5izzTYQWMYE6GplNcg7I/AuJbrebYG+4HYc7Z6ldRNqan0J1uCG7867TD/mU3MC0XSoz16egHVzToLfnvx6kpBR1dB/xguqzPE4j2aTyLieAnkwau8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786059416; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=lGVITa15iYf7ywTb6PznrnwE5mV86GVcr9KZACd8UjM=; b=CgjVEtVUzhb3NbgSiDYCWwsbTT4YeL+fZGGblSV/WBPjyVNZ+YykEyl+8TX02Jt96dceTZmIHdqsNm4wFPc2K7QDfhTDozxmv/iwKWXe8pKWsyXpMdJ8d7Nar9hCpJ8qcmntXg7U8j8wvUNI1UD7ZHUgHXhp53HdoTC52z9ntZg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1786059416058179.53080241243288; Thu, 6 Aug 2026 16:36:56 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1385267.1627700 (Exim 4.92) (envelope-from ) id 1ws7dW-0006zf-I0; Thu, 06 Aug 2026 23:36:30 +0000 Received: by outflank-mailman (output) from mailman id 1385267.1627700; Thu, 06 Aug 2026 23:36:30 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ws7dW-0006zW-F0; Thu, 06 Aug 2026 23:36:30 +0000 Received: by outflank-mailman (input) for mailman id 1385267; Thu, 06 Aug 2026 23:36:29 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3eRp1agYKCdwQC8LHAEMMEJC.AMKVCL-BCTCJJGQRQ.VCLNPMHCAR.MPE@flex--seanjc.bounces.google.com>) id 1ws7dV-0006aA-8Y for xen-devel@lists.xenproject.org; Thu, 06 Aug 2026 23:36:29 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1ws7dU-00GcVS-D4 for xen-devel@lists.xenproject.org; Fri, 07 Aug 2026 01:36:28 +0200 Received: from [10.42.69.12] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3eRp1agYKCdwQC8LHAEMMEJC.AMKVCL-BCTCJJGQRQ.VCLNPMHCAR.MPE@flex--seanjc.bounces.google.com>) id 6a7519b9-e002-0a2a0a5209dd-0a2a450cbaea-48 for ; Fri, 07 Aug 2026 01:36:28 +0200 Received: from [209.85.210.200] (helo=mail-pf1-f200.google.com) by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3eRp1agYKCdwQC8LHAEMMEJC.AMKVCL-BCTCJJGQRQ.VCLNPMHCAR.MPE@flex--seanjc.bounces.google.com>) id 6a751a7a-f479-0a2a450c0019-d155d2c8dcb1-3 for ; Fri, 07 Aug 2026 01:36:28 +0200 Received: by mail-pf1-f200.google.com with SMTP id d2e1a72fcca58-8487ed7f7beso3066060b3a.0 for ; Thu, 06 Aug 2026 16:36:27 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=google.com header.i="@google.com" header.h="Content-Type:Cc:To:From:Subject:Message-ID:References:Mime-Version:In-Reply-To:Date:Reply-To" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059386; x=1786664186; darn=lists.xenproject.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=lGVITa15iYf7ywTb6PznrnwE5mV86GVcr9KZACd8UjM=; b=P5Mmiu0kxT8zdJ6oMfjjzlKWJroER5Z8qJszJtCnI2Jxz7iUDBTB3K8wrQxURhee4y TFvC3RmcKkPExJwp7RL8zPWMmRCiodcOQYp4hnzVMwn8pK7jmpiYsFXsvvlfnBrRE/bG q9ce8HmgSIuFqBWD3UpxgqiMSioNTTffVV1fNp7bmaM2s3UjuZ+jqI/yN5S8U1sQPSxr 4z0UGnN4goFFn0TNpGEVfs3W+obqbRGp3g+wh5pTEVqhM1cYZXDCQnQRR9JWTTfwBPon hz9vbrWXQElGSmTbtYWChUBSJxIdNuPZTOMU7MW5bm+Zo5it2ypgdqSccpeS7FAr4KT1 9lng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059386; x=1786664186; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=lGVITa15iYf7ywTb6PznrnwE5mV86GVcr9KZACd8UjM=; b=oYjhB2ufCvUpRN6n9DsIcH7pg4iNIqQhpMsBiDymnoHD35lFLWHQ2MTWDkdjIMYMSY PU44GNzi0qivY1e1q41wTUchIwxgxajhrI2IStJLiRfka4tdMYx70VFEvL1PC3Oa8JFO AMSSATUfkveQYVqSgEfu9kh5s2WjZrRveCuvgvo2KSc3YrSF8JzQqxXS5MhU0JhRWpWM BLxJUply9SUGlyfRXblEy4OxjTYlfaVO0xl/aMbsh8HgoLHP2Vp0cE1HoQuIYpKuEVO0 R37E6tdjW+WVqlF6z45e6YfZCRTW26d/uhIUeZzbNm5W9+R+G330RcOInG/58hklljY6 3CDw== X-Forwarded-Encrypted: i=1; AHgh+RqR3Z+eXpPjXcO1wdYD5FBGRDSIrqNWByrDds3nyojF24++tQOQpIrU+K74uCdvpY6JszardIfzgns=@lists.xenproject.org X-Gm-Message-State: AOJu0YxA284ru0lfGMc+tHOqqMJamVLF7AlI+9LCYSHVvFKum5GfTsYC Kx62gZs6B515tGmK87ZZNZGiDa2AD4q31HkW4AVumKsr/OBwel+5XEO54FuxKWKbrQXgLqdQ6DI wWptxAQ== X-Received: from pgnc18.prod.google.com ([2002:a63:7252:0:b0:c9e:6c82:64e8]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:1310:b0:84e:216d:7e52 with SMTP id d2e1a72fcca58-84f2e03175emr20642138b3a.14.1786059385989; Thu, 06 Aug 2026 16:36:25 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:19 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-3-seanjc@google.com> Subject: [PATCH v6 02/51] x86/apic: Add CONFIG_X86_LOCAL_APIC=n stubs for APIC timer frequency APIs From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner X-purgate-ID: tlsNG-d25034/1786059388-52530A5B-E5B61271/0/0 X-purgate-type: clean X-purgate-size: 3092 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1786059417205158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add stubs for the apic_set_timer_frequency_{,k}hz() APIs when the kernel is built without support for a local APIC, and drop #ifdefs in callers that don't need to check CONFIG_X86_LOCAL_APIC for other reasons. No functional change intended. Signed-off-by: Sean Christopherson Reviewed-by: David Woodhouse --- arch/x86/include/asm/apic.h | 2 ++ arch/x86/kernel/cpu/vmware.c | 2 -- arch/x86/kernel/tsc.c | 2 -- arch/x86/kernel/tsc_msr.c | 2 -- 4 files changed, 2 insertions(+), 6 deletions(-) diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h index 6946220a6008..9c5084f3317f 100644 --- a/arch/x86/include/asm/apic.h +++ b/arch/x86/include/asm/apic.h @@ -189,6 +189,8 @@ static inline void disable_local_APIC(void) { } # define setup_boot_APIC_clock x86_init_noop # define setup_secondary_APIC_clock x86_init_noop static inline void lapic_update_tsc_freq(void) { } +static inline void apic_set_timer_frequency_hz(u64 freq_hz, const char *so= urce) { } +static inline void apic_set_timer_frequency_khz(u64 freq_khz, const char *= source) { } static inline void init_bsp_APIC(void) { } static inline void apic_intr_mode_select(void) { } static inline void apic_intr_mode_init(void) { } diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c index 22842bf5b59e..2225df67d45f 100644 --- a/arch/x86/kernel/cpu/vmware.c +++ b/arch/x86/kernel/cpu/vmware.c @@ -422,10 +422,8 @@ static void __init vmware_platform_setup(void) x86_platform.calibrate_tsc =3D vmware_get_tsc_khz; x86_platform.calibrate_cpu =3D vmware_get_tsc_khz; =20 -#ifdef CONFIG_X86_LOCAL_APIC /* Skip lapic calibration since we know the bus frequency. */ apic_set_timer_frequency_hz(ecx, "VMware hypervisor"); -#endif } else { pr_warn("Failed to get TSC freq from the hypervisor\n"); } diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 63e26805f8dd..4392fddd616e 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -710,7 +710,6 @@ unsigned long native_calibrate_tsc(void) if (boot_cpu_data.x86_vfm =3D=3D INTEL_ATOM_GOLDMONT) setup_force_cpu_cap(X86_FEATURE_TSC_RELIABLE); =20 -#ifdef CONFIG_X86_LOCAL_APIC /* * The local APIC appears to be fed by the core crystal clock * (which sounds entirely sensible). We can set the global @@ -718,7 +717,6 @@ unsigned long native_calibrate_tsc(void) * timer later. */ apic_set_timer_frequency_khz(crystal_khz, "CPUID 0x15/0x16"); -#endif =20 return crystal_khz * ebx_numerator / eax_denominator; } diff --git a/arch/x86/kernel/tsc_msr.c b/arch/x86/kernel/tsc_msr.c index 4bd5f2ae656b..179e3a331ef9 100644 --- a/arch/x86/kernel/tsc_msr.c +++ b/arch/x86/kernel/tsc_msr.c @@ -211,9 +211,7 @@ unsigned long cpu_khz_from_msr(void) if (freq =3D=3D 0) pr_err("Error MSR_FSB_FREQ index %d is unknown\n", index); =20 -#ifdef CONFIG_X86_LOCAL_APIC apic_set_timer_frequency_khz(freq, "MSR_FSB_FREQ"); -#endif =20 /* * TSC frequency determined by MSR is always considered "known" --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1786059427; cv=none; d=zohomail.com; s=zohoarc; b=MjqJwRDzPOWGtIdzBD/tII83LeOrXaRRHGKx7lDx+9lw9RnIZq26qdST0D/wFfYIcpDQmpRSwmCoFijfOLqNWSAS/nr0qk/Pv/VvudNskmD29mMvgrOp007Fefo8BtX+cTuR1/GODbs5R1UaJ8m3UssTKomEWdmviDlTBBNRdrs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786059427; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=2SJsprQma6tQ2oU494vKbTkDMI4EE2yRA8rYyHQJqoI=; b=NR/D/Sx8jGYjFn8mouQrn8osofXQfzf8gnW+NSMu/5jhiP1n6CvlfJSNUMfht1z0zFvOhRL/ugCcLHFHJ1RfwNDo126v8/Ego0jbU5zw1fo/bF48cd2xquY6PF24wfqDxXQMUbkEKMIfLsM+lgNHNuH5iE95x2CaW6WTqc7Xjpc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1786059427267334.9811234151848; Thu, 6 Aug 2026 16:37:07 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1385268.1627710 (Exim 4.92) (envelope-from ) id 1ws7dX-0007Cp-Qh; Thu, 06 Aug 2026 23:36:31 +0000 Received: by outflank-mailman (output) from mailman id 1385268.1627710; Thu, 06 Aug 2026 23:36:31 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ws7dX-0007Ci-Me; Thu, 06 Aug 2026 23:36:31 +0000 Received: by outflank-mailman (input) for mailman id 1385268; Thu, 06 Aug 2026 23:36:30 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3exp1agYKCd4SEANJCGOOGLE.COMXEN-DEVELLISTS.XENPROJECT.ORG@flex--seanjc.bounces.google.com>) id 1ws7dW-0006wt-B6 for xen-devel@lists.xenproject.org; Thu, 06 Aug 2026 23:36:30 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1ws7dV-00BpFw-OJ for xen-devel@lists.xenproject.org; Fri, 07 Aug 2026 01:36:29 +0200 Received: from [10.42.69.3] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3exp1agYKCd4SEANJCGOOGLE.COMXEN-DEVELLISTS.XENPROJECT.ORG@flex--seanjc.bounces.google.com>) id 6a751a68-2eae-0a2a0a5409dd-0a2a4503dca0-12 for ; Fri, 07 Aug 2026 01:36:29 +0200 Received: from [209.85.210.200] (helo=mail-pf1-f200.google.com) by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3exp1agYKCd4SEANJCGOOGLE.COMXEN-DEVELLISTS.XENPROJECT.ORG@flex--seanjc.bounces.google.com>) id 6a751a7c-fae8-0a2a45030019-d155d2c8b58b-3 for ; Fri, 07 Aug 2026 01:36:29 +0200 Received: by mail-pf1-f200.google.com with SMTP id d2e1a72fcca58-8486ffba174so6231388b3a.1 for ; Thu, 06 Aug 2026 16:36:29 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=google.com header.i="@google.com" header.h="Content-Type:Cc:To:From:Subject:Message-ID:References:Mime-Version:In-Reply-To:Date:Reply-To" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059388; x=1786664188; darn=lists.xenproject.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=2SJsprQma6tQ2oU494vKbTkDMI4EE2yRA8rYyHQJqoI=; b=n4Hy1f/s0tj0vRdDTiDRCu5VS4gfXmQLfJcrwbMBZNuQ1kBE1EfSQHspcOCwyptVeh 51Lzvt8S3VPVfbT1F1KoYQjCe/GhJQG6viwMeGV3xGi+N8MfMTI0ceECgJqTDZkjECtU ta+xAIrWdDfw7GN5P1dsBm9AeLTkOX4Z608KT1OZP7r17f/3zmEiC+PpJufshDrPCcL8 tGKt+doHE/NO9mcYomTCl7se1XT+TxBEY+nSB284+o97Nr8HdRqRYJ+CZuMFPnni1fTm THxCHFxaraKTcWIEQNwuh+S5VomxDPy9qjBMt6nWTIB9MqrXBIbjB/ttQV1/o6e3dV3G nmvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059388; x=1786664188; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=2SJsprQma6tQ2oU494vKbTkDMI4EE2yRA8rYyHQJqoI=; b=ibixDnDakB/lb5yqDOOHzevpuGGtGIdDaQxW8FPvaeIqVkGWxKD8EIXxhpSIO0gVm0 m56uSa7nzD0vMWoGt0a9AltgTlUla5KJ9AcART2v5vPiuMZBsDAAncCqX23jFFjGML7t 79MBakHKYWFf/aTPE4ZU3zSnLIVH3rfdrtdANNyzn9a02MRy2EvW7bzWnqGfN+gJ/88N 551vMaoztgi5MMyy85StUw6+04UNsj/C41k7WOGI0PppBN5sTl64GdI8H1ejQSPm8gSQ mQz/Jhrk8WVIgkckiSRkjnQg15n6yHXqkvQRM4NYlBkKIbS9gLLPNzGhAF4DSY4Ra/Z3 inKw== X-Forwarded-Encrypted: i=1; AHgh+RrLYLgL9ESakyj5CZCuWRQ995Lii1QhVLGVwbR4CB7M1A9DWIIago0RWoz3gNsmPF36YLRZSQXXfj4=@lists.xenproject.org X-Gm-Message-State: AOJu0YysDo6Y9Z8pw9wMpQw+qnck42nc+ZdbVbArX7jONWwCm14O+GIr vQFkmRZ1zZYhYv19C9zGqQ24hqlINTTNCBzsPVxSZYWgRAfE3C9WU5Lx+JrcN0B4lwLWSMTextw KkRimug== X-Received: from pglr15.prod.google.com ([2002:a63:514f:0:b0:c9a:7d72:c316]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:2d0c:b0:84e:2382:f4f0 with SMTP id d2e1a72fcca58-84f2dfc8ed4mr19812672b3a.4.1786059387185; Thu, 06 Aug 2026 16:36:27 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:20 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-4-seanjc@google.com> Subject: [PATCH v6 03/51] x86/tsc: Ensure that TSC recalibration doesn't run if TSC frequency is known From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner X-purgate-ID: tlsNG-33051d/1786059389-764FC4E9-10560814/0/0 X-purgate-type: clean X-purgate-size: 1414 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1786059429471158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When attempting TSC recalibration post-boot, which is only done for ancient CPUS (P4 and K7) on SMP=3Dn kernels, assert that the TSC frequency isn't known (explicitly provided by hardware) by way of MSR or CPUID, and bail if the impossible happens. In practice, recalibration and TSC_KNOWN_FREQ are mutually exclusive, as TSC_KNOWN_FREQ will only be set when running on hardware that was released decades after recalibration was obsoleted, but but it's hard to see that, especially when looking at just the TSC code. Note, the WARN can likely be tripped by running in a virtual machine and concocting an impossible CPU model, e.g. by combining a P4 signature with CPUID 0x15. This is working as intended, as such a virtual CPU model is wildly out-of-spec and is not supported. Signed-off-by: Sean Christopherson --- arch/x86/kernel/tsc.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 4392fddd616e..bc4348585194 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -930,6 +930,9 @@ void recalibrate_cpu_khz(void) if (!boot_cpu_has(X86_FEATURE_TSC)) return; =20 + if (WARN_ON_ONCE(cpu_feature_enabled(X86_FEATURE_TSC_KNOWN_FREQ))) + return; + cpu_khz =3D x86_platform.calibrate_cpu(); tsc_khz =3D x86_platform.calibrate_tsc(); if (tsc_khz =3D=3D 0) --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1786059412; cv=none; d=zohomail.com; s=zohoarc; b=oKe37eKqUdqqSoOmMNzVa4EWT5Uz4iBoHU5UYlg5ckXV20kNgApAMSp1eTxdomSCLkoLvNb1EYyD4znh8IoZ0y1C9pnODRe6921RnZIndJVCaybxnWS7PtpP4SbBei35vayPCx28hDG2GMh0gMG4wUpD+gdaM5WOJavvTuMBlKs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786059412; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=Bl6f0kmYO+QvCHyY9ZYfUQzYrQcYJLjL3x7Z6ExdFrE=; b=BOEAkn7FrHbt+1pRpFwpt5qO9R234NhqiBeLLyD0dmzX/iEP8HoNuZ5yGjnwe4aFNCNCPVUGbAe4E7JALTUcyGVGDxiCQvfNM9sh2uxCxH4b6ClQgb0wg5nT/l25cZNtktdwjyvlEFqnIRKndoOBoFCpd8GAuKtSRMJQwFWc0GM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1786059412305125.2424896309393; Thu, 6 Aug 2026 16:36:52 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1385269.1627715 (Exim 4.92) (envelope-from ) id 1ws7dY-0007Em-49; Thu, 06 Aug 2026 23:36:32 +0000 Received: by outflank-mailman (output) from mailman id 1385269.1627715; Thu, 06 Aug 2026 23:36:32 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ws7dX-0007E0-TO; Thu, 06 Aug 2026 23:36:31 +0000 Received: by outflank-mailman (input) for mailman id 1385269; Thu, 06 Aug 2026 23:36:31 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3fBp1agYKCd8TFBOKDHPPHMF.DPNYFO-EFWFMMJTUT.YFOQSPKFDU.PSH@flex--seanjc.bounces.google.com>) id 1ws7dX-000791-D8 for xen-devel@lists.xenproject.org; Thu, 06 Aug 2026 23:36:31 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1ws7dW-00GcaU-QT for xen-devel@lists.xenproject.org; Fri, 07 Aug 2026 01:36:30 +0200 Received: from [10.42.69.1] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3fBp1agYKCd8TFBOKDHPPHMF.DPNYFO-EFWFMMJTUT.YFOQSPKFDU.PSH@flex--seanjc.bounces.google.com>) id 6a751a49-bab6-0a2a0a5309dd-0a2a4501d568-32 for ; Fri, 07 Aug 2026 01:36:30 +0200 Received: from [209.85.214.200] (helo=mail-pl1-f200.google.com) by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3fBp1agYKCd8TFBOKDHPPHMF.DPNYFO-EFWFMMJTUT.YFOQSPKFDU.PSH@flex--seanjc.bounces.google.com>) id 6a751a7d-5984-0a2a45010019-d155d6c8f1f5-3 for ; Fri, 07 Aug 2026 01:36:30 +0200 Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2cfc52ddc55so34439545ad.3 for ; Thu, 06 Aug 2026 16:36:30 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=google.com header.i="@google.com" header.h="Content-Type:Cc:To:From:Subject:Message-ID:References:Mime-Version:In-Reply-To:Date:Reply-To" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059389; x=1786664189; darn=lists.xenproject.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=Bl6f0kmYO+QvCHyY9ZYfUQzYrQcYJLjL3x7Z6ExdFrE=; b=Z+aQxQiE+OE1I3dn5dzeeW95DU07hYNTCDlCxjhYO+Aq6aPRS2RNr/2klJwuC+E4/x ftWoVyu/tz0Lb5p5trYqxrefnuqxmAPLuys0tsQNmUc8O9TEM4uQ2kqDWdXTJjIGpWeZ in5zUOHqVdgEBr56INMLsc79On8vJWHIGiI1yBfh+D/5A729uwtac9xfMdhtJsFofvys kjWroSa9NWPmsvak+Mm+bnXpbGt3Iq2j4PQwu0nA21rYUDWMV2zyw+B+mcCjgIVahJl9 tKVwvrZARasr9fVInvqmhj3+0e1/EZEJ3T/aczJDP4zCxVK2fvk7e/zgWMdGcEbOqP4d +R1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059389; x=1786664189; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=Bl6f0kmYO+QvCHyY9ZYfUQzYrQcYJLjL3x7Z6ExdFrE=; b=rrfebHGB4boAlvbqG3TrCdJj6XBNdiWhphIGVZwILC02WTPUNts2T6ARI/n4i62AdH wLlwjXhN3oyhDPdSBeTkfLDrrXunRj07HjHvMIBpOSfB1vJI9BKEtWdZs8CPKJL/2rRR VzaKY3KVjL/FO8hpWctDoVZBx+vHPcbtpgjMOh2MxYukUPd1WjWu+DCaruZ+IFmE9Ugt 5DVhtuTxdPUixHADkQXQP5p7C3MfJMQNJEafpCepR97MCvapIQa6DFtDtXnFvkGsonQz XMSe/7aL6TeW3h/1quRu2sFC2qZ3a+X4iDw8GdqdkgLu1JN4tLkBsP7gqczxfmzO+01F 1ZRg== X-Forwarded-Encrypted: i=1; AHgh+RrtFcl/L/ifj9/+w2Wdu35WGtEEKCvO69d6wRHt52dGO1j9cZERVjZFE4zMJSCgK+I+t32JZtw3Hrg=@lists.xenproject.org X-Gm-Message-State: AOJu0YzoK51m8zmU8itLWqjEfP5u7DJdKiwdt2Ze543xRr6TO7SUlETY lzJPsKh4v2ruDxIpUKyBsfeMHjlc2FM953+P3THHKbnk+CGLWQFf/2QGpyKSJOgOy3sCU0EnoX5 z80ihaA== X-Received: from pgav2.prod.google.com ([2002:a05:6a02:2dc2:b0:c85:9dd2:d11e]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:7349:b0:3c6:3c5b:f2e1 with SMTP id adf61e73a8af0-3cbadcfcacfmr5222309637.32.1786059388428; Thu, 06 Aug 2026 16:36:28 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:21 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-5-seanjc@google.com> Subject: [PATCH v6 04/51] x86/tsc: Restrict recalibrate_cpu_khz() export to p4-clockmod and powernow-k7 From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner X-purgate-ID: tlsNG-d62444/1786059390-BCB45757-AB75D175/0/0 X-purgate-type: clean X-purgate-size: 833 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1786059413605158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Export recalibrate_cpu_khz() only for its two users, p4-clockmod.ko and powernow-k7.ko, to help document that recalibration is relevant only to ancient CPUs. For all intents and purposes, no functional change intended. Signed-off-by: Sean Christopherson Reviewed-by: David Woodhouse --- arch/x86/kernel/tsc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index bc4348585194..09bf10f322ba 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -943,7 +943,7 @@ void recalibrate_cpu_khz(void) cpu_khz_old, cpu_khz); #endif } -EXPORT_SYMBOL_GPL(recalibrate_cpu_khz); +EXPORT_SYMBOL_FOR_MODULES(recalibrate_cpu_khz, "p4-clockmod,powernow-k7"); =20 =20 static unsigned long long cyc2ns_suspend; --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1786059422; cv=none; d=zohomail.com; s=zohoarc; b=fyWELEa4pFiFI+F5GBtwu2P6oJfm39MvHHdF/iRTcil8eH3L7Q2PZz7/A1IJGm3/Q05eFsUFUhpAKdIIX7FX+mU3vaIkan7ZeMac5J8B6NmLYs4Qk5KaVbuu6qWTQ309OTNHGYQ40N6Kh6jIXuvg08lnTV+bxyQfSBFd0l0geEM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786059422; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=JiQKL/d/a0vrWgDwSPI6P4lMZN4rNkkCCv7n67xdKiQ=; b=mhA86RRWQTH9m8yLIRz3STZoUQz/jY97U4hlnLaljTSn7st7jIY1BwhumcrqkuxJaTrrvga3ame3sRMkrfxIP4eC0zcTiKuprG/L58BRdUUDPv6Yn4RfQEWuKFIUXbfT7t2YZg/rpTTprF8/ac/g7XylxiGiDy7QiNOLypnu9cI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 17860594228801011.822475118074; Thu, 6 Aug 2026 16:37:02 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1385270.1627728 (Exim 4.92) (envelope-from ) id 1ws7db-0007hN-Ao; Thu, 06 Aug 2026 23:36:35 +0000 Received: by outflank-mailman (output) from mailman id 1385270.1627728; Thu, 06 Aug 2026 23:36:35 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ws7db-0007hC-6f; Thu, 06 Aug 2026 23:36:35 +0000 Received: by outflank-mailman (input) for mailman id 1385270; Thu, 06 Aug 2026 23:36:33 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3fhp1agYKCeEVHDQMFJRRJOH.FRPaHQ-GHYHOOLVWV.aHQSURMHFW.RUJ@flex--seanjc.bounces.google.com>) id 1ws7dZ-0007dT-KO for xen-devel@lists.xenproject.org; Thu, 06 Aug 2026 23:36:33 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1ws7dZ-00GcVS-1I for xen-devel@lists.xenproject.org; Fri, 07 Aug 2026 01:36:33 +0200 Received: from [10.42.69.12] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3fhp1agYKCeEVHDQMFJRRJOH.FRPaHQ-GHYHOOLVWV.aHQSURMHFW.RUJ@flex--seanjc.bounces.google.com>) id 6a751a81-e002-0a2a0a5209dd-0a2a450c8794-0 for ; Fri, 07 Aug 2026 01:36:33 +0200 Received: from [209.85.214.198] (helo=mail-pl1-f198.google.com) by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3fhp1agYKCeEVHDQMFJRRJOH.FRPaHQ-GHYHOOLVWV.aHQSURMHFW.RUJ@flex--seanjc.bounces.google.com>) id 6a751a7f-f479-0a2a450c0019-d155d6c6e99d-3 for ; Fri, 07 Aug 2026 01:36:32 +0200 Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2caf4173b1cso48599815ad.3 for ; Thu, 06 Aug 2026 16:36:32 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=google.com header.i="@google.com" header.h="Content-Type:Cc:To:From:Subject:Message-ID:References:Mime-Version:In-Reply-To:Date:Reply-To" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059391; x=1786664191; darn=lists.xenproject.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=JiQKL/d/a0vrWgDwSPI6P4lMZN4rNkkCCv7n67xdKiQ=; b=LR3ZngN0m0wafXvHznKSeHMsej0U8P7i0l+F9WvFiM2vXPABkAhlt2exRf4LiG2hC6 xge3aKkxCuAV3HkitlFMidsda69rjtPVNJz7WLh2k87ANrpOmluGxtrWewEt/+CswuBC GK21YW9wMpW9KGsQ5D7aI+1TOEmmguXmhjQaWV2cBNIalMIdDTlWXovVgqYCWxyixJ3J lE1dqeuPFpluWyzD2rgxSj2QdU+ywu688/t6azOfRWdHWWSVOd1S4C3qYCV8t6NwgVk+ iS9jnv3JcKW8IlZUwptc0DKPqDPWpFMmGdK7Kx7I4KcCfYdxBJRQ3htQ1ps9NLE/Pfsk DLsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059391; x=1786664191; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=JiQKL/d/a0vrWgDwSPI6P4lMZN4rNkkCCv7n67xdKiQ=; b=iPR9EyKUNXVQD4LIwKmhD2YotvBCEdSMcXec48rEuk8Lv8VLYI+pxDjhkj9FH7O5lo CCcaNTkFR7acMnxSP4iWXJQhE3Mt0LLyeP/mXG3++FPfgogfC89Hnse7ZzaUXpjk+1aF 6QoHBu8ZL4JXI3OXxDJ6cX9Vk7c/V0Xvu6y2dyA5RcXx+TDYBVeRR7P7vYU+Fo1T6n6j u64pZT8Ap/sqO88OV2Y0EfDLBM0GGPevGjvm9kZfKGNDjKD6EKp76KkgsjNkKegFkcxp IwLuc+AAnDfo3lnjGZqrO1qv4vcJ46ZGS7nOQ1T2/PPRDZZmutJDC2EpRnPsMA9yGmCt 5tXw== X-Forwarded-Encrypted: i=1; AHgh+RqvHo0k1SY5K3AzkZwDIQRinMBD52hifIomn2awZaTSvAPfdlzmflinyo2oIxrcCLnpZvr+PTZBUBE=@lists.xenproject.org X-Gm-Message-State: AOJu0YwmIGeV4JylSUyFChQ8A63TY0hu4ATt7DjPInf0EV4ET2Nc3znv 8USV5lgSf0BeOuJVjrnwa7xGvBes1ua/QJz/ioXMnxzhOM9uL5dj7EskE2NRHd6N926XoBgQvzc Q7M9OGg== X-Received: from pjbsr12.prod.google.com ([2002:a17:90b:4e8c:b0:383:a728:1317]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90a:ec86:b0:38e:bbf1:de34 with SMTP id 98e67ed59e1d1-3903c537a12mr20234960a91.7.1786059390540; Thu, 06 Aug 2026 16:36:30 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:22 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-6-seanjc@google.com> Subject: [PATCH v6 05/51] x86/sev: Mark TSC as reliable when configuring Secure TSC From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner X-purgate-ID: tlsNG-d25034/1786059393-024DFA5B-0FE27686/0/0 X-purgate-type: clean X-purgate-size: 1723 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1786059423190158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move the code to mark the TSC as reliable from sme_early_init() to snp_secure_tsc_init(). The only reader of TSC_RELIABLE is the aptly named check_system_tsc_reliable(), which runs in tsc_init(), i.e. after snp_secure_tsc_init(). This will allow consolidating the handling of TSC_KNOWN_FREQ and TSC_RELIABLE when overriding the TSC calibration routine. Cc: Tom Lendacky Reviewed-by: Nikunj A Dadhania Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/coco/sev/core.c | 2 ++ arch/x86/mm/mem_encrypt_amd.c | 3 --- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/arch/x86/coco/sev/core.c b/arch/x86/coco/sev/core.c index ecd77d3217f3..ed0ac52a765e 100644 --- a/arch/x86/coco/sev/core.c +++ b/arch/x86/coco/sev/core.c @@ -2037,6 +2037,8 @@ void __init snp_secure_tsc_init(void) secrets =3D (__force struct snp_secrets_page *)mem; =20 setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ); + setup_force_cpu_cap(X86_FEATURE_TSC_RELIABLE); + rdmsrq(MSR_AMD64_GUEST_TSC_FREQ, tsc_freq_mhz); =20 /* Extract the GUEST TSC MHZ from BIT[17:0], rest is reserved space */ diff --git a/arch/x86/mm/mem_encrypt_amd.c b/arch/x86/mm/mem_encrypt_amd.c index 2f8c32173972..6c3af974c7c2 100644 --- a/arch/x86/mm/mem_encrypt_amd.c +++ b/arch/x86/mm/mem_encrypt_amd.c @@ -535,9 +535,6 @@ void __init sme_early_init(void) */ x86_init.resources.dmi_setup =3D snp_dmi_setup; } - - if (sev_status & MSR_AMD64_SNP_SECURE_TSC) - setup_force_cpu_cap(X86_FEATURE_TSC_RELIABLE); } =20 void __init mem_encrypt_free_decrypted_mem(void) --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1786059420; cv=none; d=zohomail.com; s=zohoarc; b=WmIPoS4Q8dgLPVG42sgrfoqA4iIIGwnMhid7NOBjUZADfUy+Ij/Xbc+EB1rpZ4ZNAEl6RTTZ10Kg46kqP/6G40LuYjS7hR13vYzwPIMDIebfp9SyR2UunK7LIS1ezU/678IP0wKIm/p9lVmBTB6LlcpL4LJM6nAPCdoHd7pDdDA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786059420; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=tcL8w1SVbwtFzoahyKqy3HGwkprj7A9nnDUrJsX64pM=; b=UYIFN28XZQHxvVodyHMRix94mY1pMHoCVcZunHxWN9ecw4Jp4LKYU/FZAgYwJiPVwI0X5ki3/ltL6MKo8KFhhShbCzm07OsUCwA44ynDhMydljg7ImiRsmQ0jOgcWZSz+zaX7nny5PBF8jSzj+UxRH9HX2aMl7toUAf5panPJoo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1786059420078673.531881285924; Thu, 6 Aug 2026 16:37:00 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1385271.1627737 (Exim 4.92) (envelope-from ) id 1ws7dc-0007we-M6; Thu, 06 Aug 2026 23:36:36 +0000 Received: by outflank-mailman (output) from mailman id 1385271.1627737; Thu, 06 Aug 2026 23:36:36 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ws7dc-0007wT-IX; Thu, 06 Aug 2026 23:36:36 +0000 Received: by outflank-mailman (input) for mailman id 1385271; Thu, 06 Aug 2026 23:36:34 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3fxp1agYKCeIWIERNGKSSKPI.GSQbIR-HIZIPPMWXW.bIRTVSNIGX.SVK@flex--seanjc.bounces.google.com>) id 1ws7da-0007gB-Mn for xen-devel@lists.xenproject.org; Thu, 06 Aug 2026 23:36:34 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1ws7da-00GcaU-3n for xen-devel@lists.xenproject.org; Fri, 07 Aug 2026 01:36:34 +0200 Received: from [10.42.69.10] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3fxp1agYKCeIWIERNGKSSKPI.GSQbIR-HIZIPPMWXW.bIRTVSNIGX.SVK@flex--seanjc.bounces.google.com>) id 6a751a70-bab6-0a2a0a5309dd-0a2a450ae97a-10 for ; Fri, 07 Aug 2026 01:36:34 +0200 Received: from [209.85.210.199] (helo=mail-pf1-f199.google.com) by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3fxp1agYKCeIWIERNGKSSKPI.GSQbIR-HIZIPPMWXW.bIRTVSNIGX.SVK@flex--seanjc.bounces.google.com>) id 6a751a80-f2d2-0a2a450a0019-d155d2c7ed64-3 for ; Fri, 07 Aug 2026 01:36:33 +0200 Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-8484f26852dso3084112b3a.1 for ; Thu, 06 Aug 2026 16:36:33 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=google.com header.i="@google.com" header.h="Content-Type:Cc:To:From:Subject:Message-ID:References:Mime-Version:In-Reply-To:Date:Reply-To" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059392; x=1786664192; darn=lists.xenproject.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=tcL8w1SVbwtFzoahyKqy3HGwkprj7A9nnDUrJsX64pM=; b=DgFqVJTosbcOR4sDQQ29htYcgOWEzPZte/iAOYmjWIG7mDh/jCAcfKdpEU1WPqXEfW uzlYtZZTbPUGuKzQ5p4DTKIvYsa/qWOJ2feqFnsGE60Vrjf++givTPJBx4vIFQ/s1++m 15bJYnVFP0nO7WJYVShFD+vE5qvah1xnLNTNmLijiBGPSaBFPm038qagJ+BLXK/lryY+ ZStvDzWPy1fbwiMmpqhvg/3YDasTXNbQFtcUyYZcWFPZX/ZMP9yxkemEpAxgnSLx4s+a 4uu0a1jRF6M5SmetfaoN+QiGvUDstlrfdJ5tNHdeXC5CRiURfXZo4NqVnd4vHdvzXtg6 YBBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059392; x=1786664192; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=tcL8w1SVbwtFzoahyKqy3HGwkprj7A9nnDUrJsX64pM=; b=UTTijzli51J1/FrMrWRJLvi1OtkPHxXBEBrgMeMs52Q2FXOtpZYNa8ePWVRAdh8kKv xWliQ485rSWlTCtehZniitUQnPnOp97KT8vGha6PPqEYW/BKnnM/gNT5WSdi5+NB8XZI bYMtglH/+Tu9H7/q2lg0aCQ2l+p6aDD2s9vVmvydmqkfG6wosrOvNCehJwPtvFrHMWOb 2vJooTfLovoogWMZ9XnMeES5UMLmiyEmrLq9Mt4EKklpwJ3jGag9Xn3UBr6kg9ti63zM /V5aX6hQYPjNK85B49aPMPUC9PtjYIaH2PBDUYuLQnJcXPIphLRSDFq7XGmvqe6kBSvz wFZg== X-Forwarded-Encrypted: i=1; AHgh+RoMuNLEXsoD8oLR7S8pbCTqXq1ZmKaDxuu4DR71chipMQq/876Ze5/HDCjuDp1SPY7vIB213mR6q4M=@lists.xenproject.org X-Gm-Message-State: AOJu0YxjKRyfwq0ZYndv3+PbQJyM5je+eDCqcFkOYLZeU3ZuvZG3L30d cgzOfs+iQCj3ZFrChdyHbyto3K/RnyWyeUgi5bpZL9Wo8FfGRElZIScfFS9KaIMMPc+ZHhJ/zqX yWheV8Q== X-Received: from pgmc14.prod.google.com ([2002:a63:1c4e:0:b0:cbb:8a1e:efa4]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:10cd:b0:848:8445:6956 with SMTP id d2e1a72fcca58-84f4fe9f90emr5350899b3a.18.1786059391731; Thu, 06 Aug 2026 16:36:31 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:23 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-7-seanjc@google.com> Subject: [PATCH v6 06/51] x86/sev: Don't override CPU frequency calibration for SNP's Secure TSC From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner X-purgate-ID: tlsNG-4011c0/1786059394-53ED2CFC-FFA6726C/0/0 X-purgate-type: clean X-purgate-size: 1503 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1786059421184158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Don't override the kernel's CPU frequency calibration routine when registering SNP's Secure TSC calibration routine. SNP (the architecture) provides zero guarantees that the CPU runs at the same frequency as the TSC. The justification for clobbering the CPU routine was: Since the difference between CPU base and TSC frequency does not apply in this case, the same callback is being used. but that's simply not true. E.g. if APERF/MPERF is exposed to the VM, then the CPU frequency absolutely does matter. While relying on heuristics and/or the untrusted hypervisor to provide the CPU frequency isn't ideal, it's at least not outright wrong. Fixes: 73bbf3b0fbba ("x86/tsc: Init the TSC for Secure TSC guests") Cc: Nikunj A Dadhania Cc: Tom Lendacky Reviewed-by: Nikunj A Dadhania Signed-off-by: Sean Christopherson Reviewed-by: David Woodhouse --- arch/x86/coco/sev/core.c | 1 - 1 file changed, 1 deletion(-) diff --git a/arch/x86/coco/sev/core.c b/arch/x86/coco/sev/core.c index ed0ac52a765e..665de1aea0ee 100644 --- a/arch/x86/coco/sev/core.c +++ b/arch/x86/coco/sev/core.c @@ -2046,7 +2046,6 @@ void __init snp_secure_tsc_init(void) =20 snp_tsc_freq_khz =3D SNP_SCALE_TSC_FREQ(tsc_freq_mhz * 1000, secrets->tsc= _factor); =20 - x86_platform.calibrate_cpu =3D securetsc_get_tsc_khz; x86_platform.calibrate_tsc =3D securetsc_get_tsc_khz; =20 early_memunmap(mem, PAGE_SIZE); --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1786059419; cv=none; d=zohomail.com; s=zohoarc; b=hMJ9b2uda12v1O3YTfae1wkqYpgtIZXT9uSOkVB3kX6dV3yQTYFSP8noJ0nL8B4GhOEO8KWKgBc6t5gHFUqiEmEnc2c3eEXp1rpX7VWpfDpQQX0zcHBSfRdsk6l7iCO0XCHyvVmnuulnoAtMlzQP+pQjfF2az2d83fXSiqGOzQI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786059419; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=AA+qmVUXq1UZoUYGqhY11Guml9As0mrU+L3gWPkVgC8=; b=CrlJlN4whdf/BBKUUGuz/Vaelu6rvk5lU3ydPJL1nwB9e2ZmHQfkD8gzv+dOnT+GPkRLewzmobAHWqSM0biYGPb353wmIIh1f3766/+j/i+NEACrJyJynGDxuawTTrKFDqJTsILAmIVQh8Iscjfhu9FYbJ3Qp5WTPEejPQSweb4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1786059419596835.0115987276826; Thu, 6 Aug 2026 16:36:59 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1385272.1627746 (Exim 4.92) (envelope-from ) id 1ws7de-0008Bc-0D; Thu, 06 Aug 2026 23:36:38 +0000 Received: by outflank-mailman (output) from mailman id 1385272.1627746; Thu, 06 Aug 2026 23:36:37 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ws7dd-0008Ak-QD; Thu, 06 Aug 2026 23:36:37 +0000 Received: by outflank-mailman (input) for mailman id 1385272; Thu, 06 Aug 2026 23:36:35 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3gBp1agYKCeMXJFSOHLTTLQJ.HTRcJS-IJaJQQNXYX.cJSUWTOJHY.TWL@flex--seanjc.bounces.google.com>) id 1ws7db-0007kf-Nb for xen-devel@lists.xenproject.org; Thu, 06 Aug 2026 23:36:35 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1ws7db-00GcVS-4X for xen-devel@lists.xenproject.org; Fri, 07 Aug 2026 01:36:35 +0200 Received: from [10.42.69.12] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3gBp1agYKCeMXJFSOHLTTLQJ.HTRcJS-IJaJQQNXYX.cJSUWTOJHY.TWL@flex--seanjc.bounces.google.com>) id 6a751a81-e002-0a2a0a5209dd-0a2a450c8794-2 for ; Fri, 07 Aug 2026 01:36:35 +0200 Received: from [209.85.214.197] (helo=mail-pl1-f197.google.com) by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3gBp1agYKCeMXJFSOHLTTLQJ.HTRcJS-IJaJQQNXYX.cJSUWTOJHY.TWL@flex--seanjc.bounces.google.com>) id 6a751a81-f479-0a2a450c0019-d155d6c5e156-3 for ; Fri, 07 Aug 2026 01:36:34 +0200 Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2cee1ec30f2so33068775ad.3 for ; Thu, 06 Aug 2026 16:36:34 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=google.com header.i="@google.com" header.h="Content-Type:Cc:To:From:Subject:Message-ID:References:Mime-Version:In-Reply-To:Date:Reply-To" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059393; x=1786664193; darn=lists.xenproject.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=AA+qmVUXq1UZoUYGqhY11Guml9As0mrU+L3gWPkVgC8=; b=ixyfPz9/AtOU4gqhTNmQ7HEQbdluEmTCxFLp+2HsWDMb5m45kBlLXlQNlFII7dXEX7 pgYR+A0LWZO3abD7o0wWkpnenkpEbPLUidL9hw1t2FK0nv06h1mVGl8Bwft1b/WpDRIH e5jL/4X0cXdPjikP9B8ohzyJWqzDOU04M1IHCEU2YtUOT2udCqd7TPVol6KwRNmV4ENf Wl1lNsTWaZLxspm4OjCVjKAlKpYRS1PAGeaA2QhGxqcogoZ+Rycrmktvhtjp1F8K3xf/ d4jFkOZ7UnCDsQIWLXHgi969584ZimWhdcmlfElI7fxUU1McJ+vz8YhDRrTRi9wTHt2Z wlmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059393; x=1786664193; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=AA+qmVUXq1UZoUYGqhY11Guml9As0mrU+L3gWPkVgC8=; b=WRg7SJ5wxcOo+Ls7TCcws1EJcOE1XljSG8YzVyzG8rQBN4v9mY1hfSXWYJzW/IOp+X j5xOwqO/t7mqGe2MHUDdYLlwQpmhj5XSI7ni8j2zZZPjR+lt6kPQcvGtALfH654Ax/bD lPzW3czQm3dmb8YdMMD230rVTAxN+ef335KPXEyC0+ne8bAnaCV6vAaoviB2XZedLdqC gYdNoycOPyKAZ6XxyMs82yON0lKX6rCjvrxMP/SXhc3wmSFUJZ44OpJp2O0IhPOt+wpY Tv75sMDTKXbTjkroAG2UGkn0aap6Hc3TLCgnYI0m+rLY0k3WNk+Hj6IFdaD/bNE0rQNx 1rdw== X-Forwarded-Encrypted: i=1; AHgh+Rp4n2aiK4iAKjkEpEHpDdP8nwPGxKU+5ypyrc+u3BpXTc0dcktfAPGJq+LcWuX+NWfxhTr9hR3rg8A=@lists.xenproject.org X-Gm-Message-State: AOJu0YzKZGBU/gjf9tvDNzYJjflLE7MAWqrsYzXPJ05Zacr2s1KvoPRz qymHYX03/AuWt8BFGNKoAIiK8cXpEbHscYkJJjl24eG02b292t8VWOKrgjKibWnoImK9KCsgFPV kPzXbkg== X-Received: from plbjc21.prod.google.com ([2002:a17:903:25d5:b0:2ca:d66c:97b2]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:ef0a:b0:2c9:c517:d070 with SMTP id d9443c01a7336-2d0ca7afebcmr224927325ad.3.1786059392825; Thu, 06 Aug 2026 16:36:32 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:24 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-8-seanjc@google.com> Subject: [PATCH v6 07/51] x86/sev: Move check for SNP Secure TSC support to tsc_early_init() From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner X-purgate-ID: tlsNG-d25034/1786059395-77ED2A5B-32AC4DBD/0/0 X-purgate-type: clean X-purgate-size: 1583 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1786059421184158501 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move the check on having a Secure TSC to the common tsc_early_init() so that it's obvious that having a Secure TSC is conditional, and to prepare for adding TDX to the mix (blindly initializing *both* SNP and TDX TSC logic looks especially weird). No functional change intended. Cc: Tom Lendacky Reviewed-by: Nikunj A Dadhania Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/coco/sev/core.c | 3 --- arch/x86/kernel/tsc.c | 3 ++- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/arch/x86/coco/sev/core.c b/arch/x86/coco/sev/core.c index 665de1aea0ee..403dcea86452 100644 --- a/arch/x86/coco/sev/core.c +++ b/arch/x86/coco/sev/core.c @@ -2025,9 +2025,6 @@ void __init snp_secure_tsc_init(void) unsigned long tsc_freq_mhz; void *mem; =20 - if (!cc_platform_has(CC_ATTR_GUEST_SNP_SECURE_TSC)) - return; - mem =3D early_memremap_encrypted(sev_secrets_pa, PAGE_SIZE); if (!mem) { pr_err("Unable to get TSC_FACTOR: failed to map the SNP secrets page.\n"= ); diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 09bf10f322ba..c710c71a1bdf 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -1509,7 +1509,8 @@ void __init tsc_early_init(void) if (is_early_uv_system()) return; =20 - snp_secure_tsc_init(); + if (cc_platform_has(CC_ATTR_GUEST_SNP_SECURE_TSC)) + snp_secure_tsc_init(); =20 if (!determine_cpu_tsc_frequencies(true)) return; --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1786059426; cv=none; d=zohomail.com; s=zohoarc; b=Zghuo0rppa9Y7Q/Iry8TVO2KlWzrZleazaZ/UwV3o4mF4LCgau/2rp4PBSIb1hCfDmSXtO0dOSHuzftFpgKwCHcolgGBW+3xlXxDieu/pMwcOLU1QNcb7Lv8U01NAzKEB5lJL2Ko4c54oHWf/7X7PmICzaP+GnYux5R18QN57Zs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786059426; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=kH88onT2XQPjPMTP9foWuf2kpVwGIl3qVDy3ZQ/XBNk=; b=NInbsZtkQ3wt3LwnPDPf5kxhpFwxGo2pEGxnYA1O1WwqqYOE/2lGirB1aEeFAGwrxcFSSCZcsZGyesIjBNxWJerUuL7qY2BdLH6LW2G8JoGDz/H0nsctdHIYdjNWY+GgdrFEYVtZZhEOL+YCE2BMI5LG8gTylEt4/iqnL08Nz+E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1786059426568915.4117322022722; Thu, 6 Aug 2026 16:37:06 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1385274.1627751 (Exim 4.92) (envelope-from ) id 1ws7de-0008Fe-GG; Thu, 06 Aug 2026 23:36:38 +0000 Received: by outflank-mailman (output) from mailman id 1385274.1627751; Thu, 06 Aug 2026 23:36:38 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ws7de-0008EQ-6p; Thu, 06 Aug 2026 23:36:38 +0000 Received: by outflank-mailman (input) for mailman id 1385274; Thu, 06 Aug 2026 23:36:37 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3gRp1agYKCeQYKGTPIMUUMRK.IUSdKT-JKbKRROYZY.dKTVXUPKIZ.UXM@flex--seanjc.bounces.google.com>) id 1ws7dc-0007wv-Sl for xen-devel@lists.xenproject.org; Thu, 06 Aug 2026 23:36:36 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1ws7dc-00GcaU-9U for xen-devel@lists.xenproject.org; Fri, 07 Aug 2026 01:36:36 +0200 Received: from [10.42.69.1] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3gRp1agYKCeQYKGTPIMUUMRK.IUSdKT-JKbKRROYZY.dKTVXUPKIZ.UXM@flex--seanjc.bounces.google.com>) id 6a751a49-bab6-0a2a0a5309dd-0a2a4501d568-40 for ; Fri, 07 Aug 2026 01:36:36 +0200 Received: from [209.85.210.200] (helo=mail-pf1-f200.google.com) by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3gRp1agYKCeQYKGTPIMUUMRK.IUSdKT-JKbKRROYZY.dKTVXUPKIZ.UXM@flex--seanjc.bounces.google.com>) id 6a751a82-5984-0a2a45010019-d155d2c8bc06-3 for ; Fri, 07 Aug 2026 01:36:36 +0200 Received: by mail-pf1-f200.google.com with SMTP id d2e1a72fcca58-848d21bbb55so4633309b3a.0 for ; Thu, 06 Aug 2026 16:36:35 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=google.com header.i="@google.com" header.h="Content-Type:Cc:To:From:Subject:Message-ID:References:Mime-Version:In-Reply-To:Date:Reply-To" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059394; x=1786664194; darn=lists.xenproject.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=kH88onT2XQPjPMTP9foWuf2kpVwGIl3qVDy3ZQ/XBNk=; b=WgpBj2tnuNJ8SKIkDltzyjZYZdaZ4+v5LrHck/UlzPGVAaC0Y+kWkaw7cQoy0DjGB/ Koa0/gX/mEToB0MINePIOkunIjb6f6S7sdX0pL1Fy67Y9pARoXS5xt4df38bIU6LwBAd maiiV7PBAT3ShzRssQ/ghWB8VQLcM+zhMAraRJ95hmS6IBKFowXlwJBPpPwSBaetWY/U nqnM5X6M9fSZvCaCJS0kBFWoxZ44BehTNxPe1eiAhL+XKnZoNX3F+SxvUXp606yW6Nm/ XwYAXiihNRxJDzwwVvmRDnWjFSOxfreg2UYK/RMOx2wPux5Bijeq6bxP44qD1IuF9I3s apQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059394; x=1786664194; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=kH88onT2XQPjPMTP9foWuf2kpVwGIl3qVDy3ZQ/XBNk=; b=ZQuOQh9JBLwvjrb/DXSmp3fLrCv4pUxkuiUf871DeJ3ItpP62L2Lt+0TcJT1+t6NvY 4hSz3K6cpOpj1bQhxtgKMf1ZaB+aoi9QIqEIOkCN/kYaCMZSfkYXn7jJd9efzvWkRMUb uw3D05cEJw2ZqnE42/5nIquxx5vVkpSUFiAdC4EXTD+eVlfiEfym4soIF7vpb5jRKPfh RFSkDVOpfeGaE/edDg8gdGvImdltTnrluVL8QT/cqN2bHQGKNrQMFKCFzsPERcxdithO Ev8GdVs3oGqND+WUJhqhueUfiTmiTEj1b8N1jGxDNKCRpAO4fPA9R9UUk5VFMAv35I01 rFHg== X-Forwarded-Encrypted: i=1; AHgh+RpZMiycyxlC7LBHRni2KqoN/d82d1ecAJ8JS3qiAH9HczEmWCxym2W6TbBOplgdppSWTBXpyZ3YY5E=@lists.xenproject.org X-Gm-Message-State: AOJu0YyAvwnQIc5B1tAHSQNLfEbgzMJK0aYXa5SJNUEK25YUzIQwuId5 U2GSOvcLaQPcM2Tg6UQaq6t35I+jfQlpCieiwIKZ0QlBtz275PP3T/AGEm9ako0ZGOR0M1g2bC2 lzoyWEA== X-Received: from pgei3.prod.google.com ([2002:a05:6a02:5263:b0:c82:7761:9936]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:1ca2:b0:847:8ccc:d7c6 with SMTP id d2e1a72fcca58-84f2e0278d5mr21014018b3a.31.1786059393911; Thu, 06 Aug 2026 16:36:33 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:25 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-9-seanjc@google.com> Subject: [PATCH v6 08/51] x86/sev: Shove SNP's secure/trusted TSC frequency directly into "calibration" From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner X-purgate-ID: tlsNG-d62444/1786059396-BEA66757-721236B2/0/0 X-purgate-type: clean X-purgate-size: 7245 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1786059427264158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" As a first step towards dropping .calibrate_{cpu,tsc}() and explicitly defining precedence/priority for "calibration" routines, pass the secure TSC frequency obtained from SNP firmware directly to determine_cpu_tsc_frequencies() instead of overriding the .calibrate_tsc() hook. Unlike the native calibration routines, all of the paravirtual overrides, including SNP and TDX, are constant in the sense that the frequency provided by the hypervisor or trusted firmware is fixed, known, and always available during early boot. More importantly, for CoCo (SNP and TDX) VMs, it's imperative that the kernel uses the frequency provided by the trusted firmware, not by the untrusted hypervisor. Enforcing the priority between sources by carefully ordering seemingly unrelated init calls, so that the trusted override "wins", is brittle and all but impossible to follow. Explicitly ignore tsc_early_khz if the exact TSC frequency was obtained from trusted firmware, as per commit bd35c77e32e4 ("x86/tsc: Add tsc_early_khz command line parameter"), the goal of the param is to play nice with setups that provide partial frequency information in CPUID, i.e. is NOT intended to be a hard override. Neither SNP's secure TSC nor TDX was supported when commit bd35c77e32e4 landed back in 2020, i.e. lack of consideration for the interaction was purely due to oversight when SNP and TDX support came along. Reviewed-by: Nikunj A Dadhania Tested-by: Nikunj A Dadhania Signed-off-by: Sean Christopherson Reviewed-by: David Woodhouse --- .../admin-guide/kernel-parameters.txt | 4 +++ arch/x86/coco/sev/core.c | 14 +++-------- arch/x86/include/asm/sev.h | 4 +-- arch/x86/kernel/tsc.c | 25 ++++++++++++++----- 4 files changed, 29 insertions(+), 18 deletions(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentatio= n/admin-guide/kernel-parameters.txt index 87bb1fb31696..aa4eb568d9fb 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -7946,6 +7946,10 @@ Kernel parameters with CPUID.16h support and partial CPUID.15h support. Format: =20 + Note, tsc_early_khz is ignored if the TSC frequency is + provided by trusted firmware when running as an SNP + guest. + tsx=3D [X86] Control Transactional Synchronization Extensions (TSX) feature in Intel processors that support TSX control. diff --git a/arch/x86/coco/sev/core.c b/arch/x86/coco/sev/core.c index 403dcea86452..bc5ae9ef74da 100644 --- a/arch/x86/coco/sev/core.c +++ b/arch/x86/coco/sev/core.c @@ -99,7 +99,6 @@ static const char * const sev_status_feat_names[] =3D { */ static u64 snp_tsc_scale __ro_after_init; static u64 snp_tsc_offset __ro_after_init; -static unsigned long snp_tsc_freq_khz __ro_after_init; =20 DEFINE_PER_CPU(struct sev_es_runtime_data*, runtime_data); DEFINE_PER_CPU(struct sev_es_save_area *, sev_vmsa); @@ -2014,15 +2013,10 @@ void __init snp_secure_tsc_prepare(void) pr_debug("SecureTSC enabled"); } =20 -static unsigned long securetsc_get_tsc_khz(void) -{ - return snp_tsc_freq_khz; -} - -void __init snp_secure_tsc_init(void) +unsigned int __init snp_secure_tsc_init(void) { + unsigned long snp_tsc_freq_khz, tsc_freq_mhz; struct snp_secrets_page *secrets; - unsigned long tsc_freq_mhz; void *mem; =20 mem =3D early_memremap_encrypted(sev_secrets_pa, PAGE_SIZE); @@ -2043,7 +2037,7 @@ void __init snp_secure_tsc_init(void) =20 snp_tsc_freq_khz =3D SNP_SCALE_TSC_FREQ(tsc_freq_mhz * 1000, secrets->tsc= _factor); =20 - x86_platform.calibrate_tsc =3D securetsc_get_tsc_khz; - early_memunmap(mem, PAGE_SIZE); + + return snp_tsc_freq_khz; } diff --git a/arch/x86/include/asm/sev.h b/arch/x86/include/asm/sev.h index 594cfa19cbd4..05ebf0b73ef4 100644 --- a/arch/x86/include/asm/sev.h +++ b/arch/x86/include/asm/sev.h @@ -530,7 +530,7 @@ int snp_send_guest_request(struct snp_msg_desc *mdesc, = struct snp_guest_req *req int snp_svsm_vtpm_send_command(u8 *buffer); =20 void __init snp_secure_tsc_prepare(void); -void __init snp_secure_tsc_init(void); +unsigned int snp_secure_tsc_init(void); enum es_result savic_register_gpa(u64 gpa); enum es_result savic_unregister_gpa(u64 *gpa); u64 savic_ghcb_msr_read(u32 reg); @@ -637,7 +637,7 @@ static inline int snp_send_guest_request(struct snp_msg= _desc *mdesc, struct snp_guest_req *req) { return -ENODEV; } static inline int snp_svsm_vtpm_send_command(u8 *buffer) { return -ENODEV;= } static inline void __init snp_secure_tsc_prepare(void) { } -static inline void __init snp_secure_tsc_init(void) { } +static inline unsigned int __init snp_secure_tsc_init(void) { return 0; } static inline void sev_evict_cache(void *va, int npages) {} static inline enum es_result savic_register_gpa(u64 gpa) { return ES_UNSUP= PORTED; } static inline enum es_result savic_unregister_gpa(u64 *gpa) { return ES_UN= SUPPORTED; } diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index c710c71a1bdf..6898584610a7 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -1440,15 +1440,16 @@ static int __init init_tsc_clocksource(void) */ device_initcall(init_tsc_clocksource); =20 -static bool __init determine_cpu_tsc_frequencies(bool early) +static bool __init determine_cpu_tsc_frequencies(bool early, + unsigned int known_tsc_khz) { /* Make sure that cpu and tsc are not already calibrated */ WARN_ON(cpu_khz || tsc_khz); =20 if (early) { cpu_khz =3D x86_platform.calibrate_cpu(); - if (tsc_early_khz) - tsc_khz =3D tsc_early_khz; + if (known_tsc_khz) + tsc_khz =3D known_tsc_khz; else tsc_khz =3D x86_platform.calibrate_tsc(); } else { @@ -1503,6 +1504,8 @@ static void __init tsc_enable_sched_clock(void) =20 void __init tsc_early_init(void) { + unsigned int known_tsc_khz =3D 0; + if (!boot_cpu_has(X86_FEATURE_TSC)) return; /* Don't change UV TSC multi-chassis synchronization */ @@ -1510,9 +1513,19 @@ void __init tsc_early_init(void) return; =20 if (cc_platform_has(CC_ATTR_GUEST_SNP_SECURE_TSC)) - snp_secure_tsc_init(); + known_tsc_khz =3D snp_secure_tsc_init(); =20 - if (!determine_cpu_tsc_frequencies(true)) + /* + * Ignore the user-provided TSC frequency if the exact frequency was + * obtained from trusted firmware, as the user-provided frequency is + * intended as a "starting point", not a known, guaranteed frequency. + */ + if (!known_tsc_khz) + known_tsc_khz =3D tsc_early_khz; + else if (tsc_early_khz) + pr_err("Ignoring 'tsc_early_khz' in favor of trusted firmware.\n"); + + if (!determine_cpu_tsc_frequencies(true, known_tsc_khz)) return; tsc_enable_sched_clock(); } @@ -1533,7 +1546,7 @@ void __init tsc_init(void) =20 if (!tsc_khz) { /* We failed to determine frequencies earlier, try again */ - if (!determine_cpu_tsc_frequencies(false)) { + if (!determine_cpu_tsc_frequencies(false, 0)) { mark_tsc_unstable("could not calculate TSC khz"); setup_clear_cpu_cap(X86_FEATURE_TSC_DEADLINE_TIMER); return; --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pj1-f72.google.com (mail-pj1-f72.google.com [209.85.216.72]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CBFB2411F91 for ; Thu, 6 Aug 2026 23:36:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.72 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059399; cv=none; b=Uz7UlW+H3MfoaQ1Yvr1xHRVLCEsGeF7aMvH7hvGL+CMQllDlsd9N+Ih18oBU0JbYm0tShG+QV5pbveXJkV0qWadkk3qN3u+mA3rgRcfyFgMG3I5fR7R/u89aKyipdkhJgUrgmQLFukauSTNN3iFVWqTefcMnxLhdaq03PlSwTno= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059399; c=relaxed/simple; bh=Ip3+9AZjdh0bvA2Vl8RDcUNvlhnW8rCYLw17acrPYF0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Z/yq+CgbSi9QQRYZwSzHW5Ou7oepL2ediE0ehUHibIDL2qGoALMh8Cta1aWOFe+WvSDiOqlRh4yXknq2RHIrjynHGc1BEIFCP6IjORlwWgFQ2pPGi4KHlHaD60iEZbBqHog/UhcEGbqISXZvJO9AHcdsYLKYKPZ00nAUwR5oMCs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=m7kMl+Mc; arc=none smtp.client-ip=209.85.216.72 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="m7kMl+Mc" Received: by mail-pj1-f72.google.com with SMTP id 98e67ed59e1d1-38ce7fabf76so4358822a91.2 for ; Thu, 06 Aug 2026 16:36:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059395; x=1786664195; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=rOLPH8cbFzmNmyBMg+VXArbJGugFBL/MCFG1XvEwkdc=; b=m7kMl+McXQyK9xA73uFP82umikkjT46BQpNphWMHBzFgvnSx9z9erW0dTZ+XnmegZw UYbxRHW6+qDIdQ7bqGASxk7Fw1W0Fa1qlC0MBJudI6JQSuEbADDOkFY0HhwOuGRNeOyR CpaB76qaWkIQsnFvsgyY3ONOKueFuDhpmm3XTagSP90smUFZq/IbHAsInvzfHCo4SLF3 p+7vw+4WNV5qxLJYL/KSbcQpA5fOR6+FZYZB7f8+cmCoxMqLMCuebTQF2KN1zjr7b+de MudaXY8sxMngBzTdG23X4Qhm7P40KRXRwoIxkiVGWdjCkh3g8RI6A4rWLPTi88xgGth3 uM4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059395; x=1786664195; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=rOLPH8cbFzmNmyBMg+VXArbJGugFBL/MCFG1XvEwkdc=; b=npaNlFesVep9+mfRhqz4hFJDpEd6k5i64zAd6ogw7YuIK62uVO/p5kOv3GARKaOpdK 8ZzvchbabE4TPamAfONB77iG/M1mEi0yJWVDyA8jgbQILDd4EVOs+2gDNsHF7V79MulI l7JRRyTiXxA5bN6iYbravSNHZvtrk4ns5ZkS0pUd6NPIif+pKgYdFHSkIP12DYlf44cG Vly6yWHkq/ax61wYCD3B+ZCmaokBphMQHcRzBP9RxxGdDvmqCIY7QVrVT40VJefbzUlf DxWC9Yd0FETo9B+k5vRSJccVPba3czhI/AK16HIFLsyfyGgFF8nrc3Z0gd1xxmvqCjlF KlKA== X-Forwarded-Encrypted: i=1; AHgh+RqxYsALpT34cITX8B1r7VC1Tb/l7IIJ6fcF7F8FrzFtdP7o7LUQa0vGynimro60m7ronknm6sWW/TH0zf4=@vger.kernel.org X-Gm-Message-State: AOJu0YwwwDl/zrqgRuY8Si2rOXwwNXiUKlz+5/I/cciUTcHXABdyXKuT WdgBGa0+m4Xb+x10Sf8KQbriLyeMWMXaGzEquojMe6DrAU+YEq6K8sPVwxJIRtRNVkHPVFjOoue 1h0R0DA== X-Received: from pjte20.prod.google.com ([2002:a17:90a:c214:b0:38e:7f69:82cf]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:5683:b0:38e:6aa7:68ad with SMTP id 98e67ed59e1d1-3903c54fbc4mr18735745a91.5.1786059395009; Thu, 06 Aug 2026 16:36:35 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:26 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-10-seanjc@google.com> Subject: [PATCH v6 09/51] x86/tsc: Add a standalone helper for getting TSC info from CPUID.0x15 From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Extract retrieval of TSC frequency information from CPUID into a standalone helper so that TDX guest support can reuse the logic. Opportunistically drop native_calibrate_tsc()'s "=3D=3D 0" and "!=3D 0" che= cks in favor of the kernel's preferred style. No functional change intended. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/kernel/tsc.c | 61 +++++++++++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 23 deletions(-) diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 6898584610a7..d405ff4e45e0 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -645,46 +645,62 @@ static unsigned long quick_pit_calibrate(void) return delta; } =20 +struct cpuid_tsc_info { + unsigned int denominator; + unsigned int numerator; + unsigned int crystal_khz; +}; + +static int cpuid_get_tsc_info(struct cpuid_tsc_info *info) +{ + unsigned int ecx_hz, edx; + + if (boot_cpu_data.cpuid_level < CPUID_LEAF_TSC) + return -ENOENT; + + /* CPUID 15H TSC/Crystal ratio, plus optionally Crystal Hz */ + cpuid(CPUID_LEAF_TSC, &info->denominator, &info->numerator, &ecx_hz, &edx= ); + + if (!info->denominator || !info->numerator) + return -ENOENT; + + /* + * Note: some CPUs provide the multiplier information, but not the core + * crystal frequency. The multiplier information is still useful for + * such CPUs, as the crystal frequency can be gleaned from CPUID.0x16. + */ + info->crystal_khz =3D ecx_hz / 1000; + return 0; +} + /** * native_calibrate_tsc - determine TSC frequency * Determine TSC frequency via CPUID, else return 0. */ unsigned long native_calibrate_tsc(void) { - unsigned int eax_denominator, ebx_numerator, ecx_hz, edx; - unsigned int crystal_khz; + struct cpuid_tsc_info info; =20 if (boot_cpu_data.x86_vendor !=3D X86_VENDOR_INTEL) return 0; =20 - if (boot_cpu_data.cpuid_level < CPUID_LEAF_TSC) + if (cpuid_get_tsc_info(&info)) return 0; =20 - eax_denominator =3D ebx_numerator =3D ecx_hz =3D edx =3D 0; - - /* CPUID 15H TSC/Crystal ratio, plus optionally Crystal Hz */ - cpuid(CPUID_LEAF_TSC, &eax_denominator, &ebx_numerator, &ecx_hz, &edx); - - if (ebx_numerator =3D=3D 0 || eax_denominator =3D=3D 0) - return 0; - - crystal_khz =3D ecx_hz / 1000; - /* * Denverton SoCs don't report crystal clock, and also don't support * CPUID_LEAF_FREQ for the calculation below, so hardcode the 25MHz * crystal clock. */ - if (crystal_khz =3D=3D 0 && - boot_cpu_data.x86_vfm =3D=3D INTEL_ATOM_GOLDMONT_D) - crystal_khz =3D 25000; + if (!info.crystal_khz && boot_cpu_data.x86_vfm =3D=3D INTEL_ATOM_GOLDMONT= _D) + info.crystal_khz =3D 25000; =20 /* * TSC frequency reported directly by CPUID is a "hardware reported" * frequency and is the most accurate one so far we have. This * is considered a known frequency. */ - if (crystal_khz !=3D 0) + if (info.crystal_khz) setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ); =20 /* @@ -692,15 +708,14 @@ unsigned long native_calibrate_tsc(void) * clock, but we can easily calculate it to a high degree of accuracy * by considering the crystal ratio and the CPU speed. */ - if (crystal_khz =3D=3D 0 && boot_cpu_data.cpuid_level >=3D CPUID_LEAF_FRE= Q) { + if (!info.crystal_khz && boot_cpu_data.cpuid_level >=3D CPUID_LEAF_FREQ) { unsigned int eax_base_mhz, ebx, ecx, edx; =20 cpuid(CPUID_LEAF_FREQ, &eax_base_mhz, &ebx, &ecx, &edx); - crystal_khz =3D eax_base_mhz * 1000 * - eax_denominator / ebx_numerator; + info.crystal_khz =3D eax_base_mhz * 1000 * info.denominator / info.numer= ator; } =20 - if (crystal_khz =3D=3D 0) + if (!info.crystal_khz) return 0; =20 /* @@ -716,9 +731,9 @@ unsigned long native_calibrate_tsc(void) * lapic_timer_period here to avoid having to calibrate the APIC * timer later. */ - apic_set_timer_frequency_khz(crystal_khz, "CPUID 0x15/0x16"); + apic_set_timer_frequency_khz(info.crystal_khz, "CPUID 0x15/0x16"); =20 - return crystal_khz * ebx_numerator / eax_denominator; + return info.crystal_khz * info.numerator / info.denominator; } =20 static unsigned long cpu_khz_from_cpuid(void) --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1786059424; cv=none; d=zohomail.com; s=zohoarc; b=Ouu02x930Ult3eudhV3DWavPTH/u+pMeWX8G4JfhTXZci0NlOfGdRJMtwZt3U4dHVLeRI7jYd5iBQRSwcNVvZDdA+YDGcrJ3UKCQPoiEZVl6AambsB/0vZzzGM5WKUEZaKy/a3314M+TCaHYaUiNUGloMZfonCBOSWNr7uZ/jNw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786059424; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=QkWxTw8zJYn5bKvqCmD8koA0mP/8bnNFfn6ySpGUKjQ=; b=Xg2eoPj+t4jBfmYuyDXteewU5M7k2ULvEvZTrXONnEA33CFNWBPvZ6xd+LF7+rNaGXp3dG4r16wFYwH/F1F2YdE3QGlDO+kfXInOJ6cSq0XjjZk1iScMtRhstuFiiV6o6ljw5opUo+Heuk0QSibnXndWIX8BfWyXofb1p8No34Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1786059424069756.044482457911; Thu, 6 Aug 2026 16:37:04 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1385276.1627765 (Exim 4.92) (envelope-from ) id 1ws7dg-0000KK-RF; Thu, 06 Aug 2026 23:36:40 +0000 Received: by outflank-mailman (output) from mailman id 1385276.1627765; Thu, 06 Aug 2026 23:36:40 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ws7dg-0000Jt-JL; Thu, 06 Aug 2026 23:36:40 +0000 Received: by outflank-mailman (input) for mailman id 1385276; Thu, 06 Aug 2026 23:36:39 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3hBp1agYKCecbNJWSLPXXPUN.LXVgNW-MNeNUURbcb.gNWYaXSNLc.XaP@flex--seanjc.bounces.google.com>) id 1ws7df-0008UC-A3 for xen-devel@lists.xenproject.org; Thu, 06 Aug 2026 23:36:39 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1ws7de-00GcaU-Mr for xen-devel@lists.xenproject.org; Fri, 07 Aug 2026 01:36:38 +0200 Received: from [10.42.69.10] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3hBp1agYKCecbNJWSLPXXPUN.LXVgNW-MNeNUURbcb.gNWYaXSNLc.XaP@flex--seanjc.bounces.google.com>) id 6a751a70-bab6-0a2a0a5309dd-0a2a450ae97a-16 for ; Fri, 07 Aug 2026 01:36:38 +0200 Received: from [209.85.210.197] (helo=mail-pf1-f197.google.com) by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3hBp1agYKCecbNJWSLPXXPUN.LXVgNW-MNeNUURbcb.gNWYaXSNLc.XaP@flex--seanjc.bounces.google.com>) id 6a751a85-f2d2-0a2a450a0019-d155d2c5cd50-3 for ; Fri, 07 Aug 2026 01:36:38 +0200 Received: by mail-pf1-f197.google.com with SMTP id d2e1a72fcca58-84857446424so4590880b3a.1 for ; Thu, 06 Aug 2026 16:36:38 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=google.com header.i="@google.com" header.h="Content-Transfer-Encoding:Content-Type:Cc:To:From:Subject:Message-ID:References:Mime-Version:In-Reply-To:Date:Reply-To" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059397; x=1786664197; darn=lists.xenproject.org; h=content-transfer-encoding:content-type:cc:to:from:subject :message-id:references:mime-version:in-reply-to:date:reply-to:from :to:cc:subject:date:message-id:reply-to:content-type; bh=QkWxTw8zJYn5bKvqCmD8koA0mP/8bnNFfn6ySpGUKjQ=; b=fJHLnSiqbKcx+tpzrPBosh7ZXY5G0rsX5Fvcp+/DjjmreXQ05GHGKbRh3/7mkj0MQN z7qH/WwlM22VEphBuA6YD2eOwtCqDNeDCd7DEenINVqwTX1jXd6FKmwTGiP6Cdn7JZac wViJoOks7DytdFEfLEaHOGQFaLRd6UF0V/LZyxZpFRCpzisGeWGvNonNv+GwzjDD4i9h zzv3ee5xwQPoaTmFERWhAiABc0OaxIfbQdWr1ScJq5E7OfB3kgsKBVlsLlmBrTz5NbHn 4Odd8jfoQQERmhNXiMgy0Paq5YIY8d5HFoFd+LNXm/cufEeUAqeGj8ntCCnf9ADsS+jT C+4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059397; x=1786664197; h=content-transfer-encoding:content-type:cc:to:from:subject :message-id:references:mime-version:in-reply-to:date:reply-to :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=QkWxTw8zJYn5bKvqCmD8koA0mP/8bnNFfn6ySpGUKjQ=; b=BD35hR5geCUCSlAfpimeafDg4+LIuOYL0Bo5XNbdMjfBfx2Oku7WCHcUxdmbHb6Ibp bek1NoFtcBHl0kVN86X8V6zi869rjQZe7Cr45G9HzLJZmb63Yzm4x3Ab67FYhUhkKHL+ /m1XO+tB+bTxiRdEbjsDHTOerrV/EG+PPr1+5sQMmxlxbjsZmOtsNDdpBjnMn8brKevH hmU84mVSI5z6/2rPeK92BZXJV86eqHA9mDXd7wUWBGIepR0oH+Q7yhz4Y4NDo5xqnZIP x+B2eYZ2Pg2dMEqaOGuIBbwEZSLlQv0oxRUmctWRKQjMIWF0wJO38kUg0yYR/d4OUwCF gqCA== X-Forwarded-Encrypted: i=1; AHgh+RooYxWkuyztSGgLJZP3xr9nYLVOaZHvxt4W2rFPsrAw/kGFHub70xudot8gsebQcC66Tc3MKHvTGqk=@lists.xenproject.org X-Gm-Message-State: AOJu0YzPHCq/YLkJmclDPoiAk4fy3LraDYvd6GFVLlLgDfAKHyLdVQ6G ZQAc4KI+OwkeOzbauUIKuHLf6H7LQyGaf68X9Np81ibWwxOKZb+UfDFhY4mbFvjIqmWq0PPjmE6 Cl1AmCA== X-Received: from pfqy1.prod.google.com ([2002:aa7:9e01:0:b0:848:46e6:1aac]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:3692:b0:84e:24f:2677 with SMTP id d2e1a72fcca58-84f2dfc0601mr21949181b3a.4.1786059396135; Thu, 06 Aug 2026 16:36:36 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:27 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-11-seanjc@google.com> Subject: [PATCH v6 10/51] x86/tdx: Force TSC frequency with CPUID-based info provided by the TDX-Module From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable X-purgate-ID: tlsNG-4011c0/1786059398-52EDACFC-0339FAF7/0/0 X-purgate-type: clean X-purgate-size: 6604 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1786059425256158500 Content-Type: text/plain; charset="utf-8" When running as a TDX guest, explicitly set the TSC frequency to a known value, using CPUID-based information, instead of potentially relying on a hypervisor-controlled PV routine. For TDX guests, CPUID.0x15 is always emulated by the TDX-Module, i.e. the information from CPUID is more trustworthy than the information provided by the hypervisor. To maintain backwards compatibility with TDX guest kernels that use native calibration, and because it's the least awful option, retain native_calibrate_tsc()'s stuffing of the local APIC bus period using the core crystal frequency. While it's entirely possible for the hypervisor to emulate the APIC timer at a different frequency than the core crystal frequency, the commonly accepted interpretation of Intel's SDM is that APIC timer runs at the core crystal frequency when that latter is enumerated via CPUID: The APIC timer frequency will be the processor=E2=80=99s bus clock or core crystal clock frequency (when TSC/core crystal clock ratio is enumerated in CPUID leaf 0x15). If the hypervisor is malicious and deliberately runs the APIC timer at the wrong frequency, nothing would stop the hypervisor from modifying the frequency at any time, i.e. attempting to manually calibrate the frequency out of paranoia would be futile. Deliberately leave CPU frequency calibration as is, since the TDX-Module doesn't provide any guarantees with respect to CPUID.0x16. Expose and use cpuid_get_tsc_info() instead of providing a wrapper to get the TSC and core crystal frequency, as TDX is the only anticipated user outside of the TSC code, i.e. adding a helper to dedup the math won't actually dedup anything. Having TDX use "struct cpuid_tsc_info" also avoids the temptation of declaring a local "tsc_khz" variable and thus unintentionally creating a shadow of the global "tsc_khz". Cc: Kiryl Shutsemau (Meta) Signed-off-by: Sean Christopherson Reviewed-by: David Woodhouse --- .../admin-guide/kernel-parameters.txt | 4 ++-- arch/x86/coco/tdx/tdx.c | 20 ++++++++++++++++--- arch/x86/include/asm/tdx.h | 2 ++ arch/x86/include/asm/tsc.h | 7 +++++++ arch/x86/kernel/tsc.c | 11 ++++------ 5 files changed, 32 insertions(+), 12 deletions(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentatio= n/admin-guide/kernel-parameters.txt index aa4eb568d9fb..5a3d40a4a4ec 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -7947,8 +7947,8 @@ Kernel parameters Format: =20 Note, tsc_early_khz is ignored if the TSC frequency is - provided by trusted firmware when running as an SNP - guest. + provided by trusted firmware when running as an SNP or + TDX guest. =20 tsx=3D [X86] Control Transactional Synchronization Extensions (TSX) feature in Intel processors that diff --git a/arch/x86/coco/tdx/tdx.c b/arch/x86/coco/tdx/tdx.c index f904a636d449..ec28a15e26ac 100644 --- a/arch/x86/coco/tdx/tdx.c +++ b/arch/x86/coco/tdx/tdx.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -1121,9 +1122,6 @@ void __init tdx_early_init(void) =20 setup_force_cpu_cap(X86_FEATURE_TDX_GUEST); =20 - /* TSC is the only reliable clock in TDX guest */ - setup_force_cpu_cap(X86_FEATURE_TSC_RELIABLE); - cc_vendor =3D CC_VENDOR_INTEL; =20 /* Configure the TD */ @@ -1193,3 +1191,19 @@ void __init tdx_early_init(void) =20 tdx_announce(); } + +unsigned int __init tdx_tsc_init(void) +{ + struct cpuid_tsc_info info; + + if (WARN_ON_ONCE(cpuid_get_tsc_info(&info) || !info.crystal_khz)) + return 0; + + apic_set_timer_frequency_khz(info.crystal_khz, "TDX-Module via CPUID"); + + /* TSC is the only reliable clock in TDX guest */ + setup_force_cpu_cap(X86_FEATURE_TSC_RELIABLE); + setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ); + + return info.crystal_khz * info.numerator / info.denominator; +} diff --git a/arch/x86/include/asm/tdx.h b/arch/x86/include/asm/tdx.h index 89e97d5761d8..d23ff06db41a 100644 --- a/arch/x86/include/asm/tdx.h +++ b/arch/x86/include/asm/tdx.h @@ -68,6 +68,7 @@ struct ve_info { #ifdef CONFIG_INTEL_TDX_GUEST =20 void __init tdx_early_init(void); +unsigned int __init tdx_tsc_init(void); =20 void tdx_get_ve_info(struct ve_info *ve); =20 @@ -89,6 +90,7 @@ void __init tdx_dump_td_ctls(u64 td_ctls); #else =20 static inline void tdx_early_init(void) { }; +static inline unsigned int tdx_tsc_init(void) { return 0; } static inline void tdx_halt(void) { }; =20 static inline bool tdx_early_handle_ve(struct pt_regs *regs) { return fals= e; } diff --git a/arch/x86/include/asm/tsc.h b/arch/x86/include/asm/tsc.h index 4d2d2f21ff06..b6b86e24e1bf 100644 --- a/arch/x86/include/asm/tsc.h +++ b/arch/x86/include/asm/tsc.h @@ -82,6 +82,13 @@ static inline cycles_t get_cycles(void) } #define get_cycles get_cycles =20 +struct cpuid_tsc_info { + unsigned int denominator; + unsigned int numerator; + unsigned int crystal_khz; +}; +extern int cpuid_get_tsc_info(struct cpuid_tsc_info *info); + extern void tsc_early_init(void); extern void tsc_init(void); extern void mark_tsc_unstable(char *reason); diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index d405ff4e45e0..f3febe406fa8 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -34,6 +34,7 @@ #include #include #include +#include =20 unsigned int __read_mostly cpu_khz; /* TSC clocks / usec, not used here */ EXPORT_SYMBOL(cpu_khz); @@ -645,13 +646,7 @@ static unsigned long quick_pit_calibrate(void) return delta; } =20 -struct cpuid_tsc_info { - unsigned int denominator; - unsigned int numerator; - unsigned int crystal_khz; -}; - -static int cpuid_get_tsc_info(struct cpuid_tsc_info *info) +int cpuid_get_tsc_info(struct cpuid_tsc_info *info) { unsigned int ecx_hz, edx; =20 @@ -1529,6 +1524,8 @@ void __init tsc_early_init(void) =20 if (cc_platform_has(CC_ATTR_GUEST_SNP_SECURE_TSC)) known_tsc_khz =3D snp_secure_tsc_init(); + else if (boot_cpu_has(X86_FEATURE_TDX_GUEST)) + known_tsc_khz =3D tdx_tsc_init(); =20 /* * Ignore the user-provided TSC frequency if the exact frequency was --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1786059423; cv=none; d=zohomail.com; s=zohoarc; b=PqO03fDAJaGs6Y+O2h+hRyiMSTDkXBNdsN7lMATFTQDvfk0FH6WNk/9iEOzA5tSkL+oFU8qP25TbPvPszayODUe8jo2HC7+WH9voUQqnykNSRlNs1GXJmq418vxMNThukmTSiDzYsPkbIcWTARsv9RVmrp8AUwUFi+zcJhOFpJs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786059423; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=BTA01HvIZtLfKHw73sD4lcjm5hs9HMIraXdGO98hTIs=; b=X1SN6/PlLiGNMaTQSheljKEpIF9sT2304DpdyHMv8InSONfzHNSPgEt6Vi4sgamt6X/ayd2dfVOln43D9PIP6LrQU62lFlqX5HNGK58cbVFzeO34YTACXPHrUIuePRjuzajkJqBFe89Z5DGTyF2zfEIpOgPBaTuTPypGk/1MvDM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1786059423064356.72751493023236; Thu, 6 Aug 2026 16:37:03 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1385278.1627771 (Exim 4.92) (envelope-from ) id 1ws7di-0000aC-Bk; Thu, 06 Aug 2026 23:36:42 +0000 Received: by outflank-mailman (output) from mailman id 1385278.1627771; Thu, 06 Aug 2026 23:36:42 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ws7di-0000Z9-66; Thu, 06 Aug 2026 23:36:42 +0000 Received: by outflank-mailman (input) for mailman id 1385278; Thu, 06 Aug 2026 23:36:40 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3hRp1agYKCegcOKXTMQYYQVO.MYWhOX-NOfOVVScdc.hOXZbYTOMd.YbQ@flex--seanjc.bounces.google.com>) id 1ws7dg-0000Ig-F2 for xen-devel@lists.xenproject.org; Thu, 06 Aug 2026 23:36:40 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1ws7df-00GcT3-Ro for xen-devel@lists.xenproject.org; Fri, 07 Aug 2026 01:36:39 +0200 Received: from [10.42.69.11] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3hRp1agYKCegcOKXTMQYYQVO.MYWhOX-NOfOVVScdc.hOXZbYTOMd.YbQ@flex--seanjc.bounces.google.com>) id 6a751a35-5cb7-0a2a0a5109dd-0a2a450bb002-36 for ; Fri, 07 Aug 2026 01:36:39 +0200 Received: from [209.85.210.197] (helo=mail-pf1-f197.google.com) by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3hRp1agYKCegcOKXTMQYYQVO.MYWhOX-NOfOVVScdc.hOXZbYTOMd.YbQ@flex--seanjc.bounces.google.com>) id 6a751a86-b7e8-0a2a450b0019-d155d2c5ed0a-3 for ; Fri, 07 Aug 2026 01:36:39 +0200 Received: by mail-pf1-f197.google.com with SMTP id d2e1a72fcca58-8484f26852dso3084165b3a.1 for ; Thu, 06 Aug 2026 16:36:39 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=google.com header.i="@google.com" header.h="Content-Type:Cc:To:From:Subject:Message-ID:References:Mime-Version:In-Reply-To:Date:Reply-To" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059398; x=1786664198; darn=lists.xenproject.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=BTA01HvIZtLfKHw73sD4lcjm5hs9HMIraXdGO98hTIs=; b=KLzF5lYbfJcAarXUGcqkhaTeNAVsD0XO0D6/e+mae/DJPv1S3Smidgd+lbVDRvXfoG 58IJ69eubmfkaiRLxzmAm8CjRwaCdR3DUmTTory+Y46AS0JPIEXQRtJkduoY+fG0CLue J+Ku5KDeNUVB7rTATBJsLuVXoBQmbNc/KsHJ+jRoZ85aHqfsIcNEMaar6wO+/k6LYv7i QUHeivxexhweFpGmqeQ0nDK5OUg1WS8tnoBpOUj/r/q0hGd2dYAn6Ju9uJcTj+AcLtfZ nXsLrML1KVOB1++MD4rWDHsNX/YoozWMAPE/4aZR6OdtTOUIYLEMy2Ot1th6R7tFdiNy Oe7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059398; x=1786664198; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=BTA01HvIZtLfKHw73sD4lcjm5hs9HMIraXdGO98hTIs=; b=Ybeaf0DXjTwFIe/UQ4lX2D3RyrL4ykKtAb136CtzSdSh/zpVnFoYrD9CXnxWiid4RW IxMP/FAfBoYgzEE5Z8xbgoLPGtzhnpAXZLcLdO8Y8oolgAmdhT/3vmfxLwtoq+3A8rtv RKiciaj0nIhXGn8mR2MVawBB6fT8SdmHXdiPl+XurNmI1UatxcdVZQX5TWCWSpxWBfwL s9pIPcWQHwICn7+fYdphtShf44gB2b52d9LTOH6R67k1iGCDbwOuldvGQ9FEGE42dbBo QeYK5l2OzQ4o2K//btKEG9hXtsHYdZmJvmvAoAQM3lKn6g1mBlLZ/rhjZ3bqpc7CBfGh Qt0Q== X-Forwarded-Encrypted: i=1; AHgh+Rpx/1cvQGXP96dTDgwqx8AMY9QPaT3M+ZqPLVtlLsZJoAaFGkX0xKR9Ltxc5Lkss/jT59Yu4QFx4LQ=@lists.xenproject.org X-Gm-Message-State: AOJu0Yy8BZLLU5UB6pxdEy/2PUhZP0aWdPS6JPRvFbBY5R4xIjWXUEfr dTyvRIrbx7BwW3eaYKNcHvTpXAD3VqkFzf5qKP4CrOvS2/H37lfXlvnXwORcX3llf6uirWZOGYs 4JsckFA== X-Received: from pfbkx25.prod.google.com ([2002:a05:6a00:6f19:b0:847:8449:eef1]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:1388:b0:848:30c3:45dd with SMTP id d2e1a72fcca58-84f4fdbf18amr5180418b3a.11.1786059397399; Thu, 06 Aug 2026 16:36:37 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:28 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-12-seanjc@google.com> Subject: [PATCH v6 11/51] x86/tsc: Add dedicated hypervisor hooks for getting known TSC/CPU frequencies From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner X-purgate-ID: tlsNG-42698a/1786059399-1B6D29EA-230C55CD/0/0 X-purgate-type: clean X-purgate-size: 12640 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1786059423348158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add dedicated hypervisor hooks for getting known TSC/CPU frequencies instead of overriding seemingly generic platform hooks, and explicitly prioritize hypervisor-provided frequencies over native methods, but do NOT clobber the frequency obtained from trusted firmware. While shuffling the hooks around is arguably "six of one, half dozen of the other", scoping them to x86_hyper_init makes their purpose more obvious, and allows for explicitly defining the priority of sources (as is done here). As is already done when trusted firmware provides the TSC frequency, ignore tsc_early_khz if the exact TSC frequency was obtained from the hypervisor, as attempting to refine the TSC frequency when running in a VM is all but guaranteed to cause problems sooner or later due to the calibration sources being emulated devices in the vast majority of setups. Cc: David Woodhouse Reviewed-by: Michael Kelley Signed-off-by: Sean Christopherson Reviewed-by: David Woodhouse --- .../admin-guide/kernel-parameters.txt | 3 +- arch/x86/include/asm/acrn.h | 5 ---- arch/x86/include/asm/x86_init.h | 4 +++ arch/x86/kernel/cpu/acrn.c | 10 +++++-- arch/x86/kernel/cpu/mshyperv.c | 6 ++-- arch/x86/kernel/cpu/vmware.c | 8 ++--- arch/x86/kernel/jailhouse.c | 6 ++-- arch/x86/kernel/kvmclock.c | 6 ++-- arch/x86/kernel/tsc.c | 29 ++++++++++++++----- arch/x86/xen/time.c | 4 +-- 10 files changed, 50 insertions(+), 31 deletions(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentatio= n/admin-guide/kernel-parameters.txt index 5a3d40a4a4ec..1ab56fbdc35d 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -7948,7 +7948,8 @@ Kernel parameters =20 Note, tsc_early_khz is ignored if the TSC frequency is provided by trusted firmware when running as an SNP or - TDX guest. + TDX guest, or when the hypervisor provides the exact + frequency via a paravirtual interface. =20 tsx=3D [X86] Control Transactional Synchronization Extensions (TSX) feature in Intel processors that diff --git a/arch/x86/include/asm/acrn.h b/arch/x86/include/asm/acrn.h index db42b477c41d..a892179c61c6 100644 --- a/arch/x86/include/asm/acrn.h +++ b/arch/x86/include/asm/acrn.h @@ -32,11 +32,6 @@ static inline u32 acrn_cpuid_base(void) return 0; } =20 -static inline unsigned long acrn_get_tsc_khz(void) -{ - return cpuid_eax(ACRN_CPUID_TIMING_INFO); -} - /* * Hypercalls for ACRN * diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_ini= t.h index 953d3199408a..0c89bf40f507 100644 --- a/arch/x86/include/asm/x86_init.h +++ b/arch/x86/include/asm/x86_init.h @@ -123,6 +123,8 @@ struct x86_init_pci { * @msi_ext_dest_id: MSI supports 15-bit APIC IDs * @init_mem_mapping: setup early mappings during init_mem_mapping() * @init_after_bootmem: guest init after boot allocator is finished + * @get_tsc_khz: get the TSC frequency (returns 0 if frequency is unknown) + * @get_cpu_khz: get the CPU frequency (returns 0 if frequency is unknown) */ struct x86_hyper_init { void (*init_platform)(void); @@ -131,6 +133,8 @@ struct x86_hyper_init { bool (*msi_ext_dest_id)(void); void (*init_mem_mapping)(void); void (*init_after_bootmem)(void); + unsigned int (*get_tsc_khz)(void); + unsigned int (*get_cpu_khz)(void); }; =20 /** diff --git a/arch/x86/kernel/cpu/acrn.c b/arch/x86/kernel/cpu/acrn.c index dc119af83524..ad8f2da8003b 100644 --- a/arch/x86/kernel/cpu/acrn.c +++ b/arch/x86/kernel/cpu/acrn.c @@ -24,13 +24,15 @@ static u32 __init acrn_detect(void) return acrn_cpuid_base(); } =20 +static unsigned int __init acrn_get_tsc_khz(void) +{ + return cpuid_eax(ACRN_CPUID_TIMING_INFO); +} + static void __init acrn_init_platform(void) { /* Install system interrupt handler for ACRN hypervisor callback */ sysvec_install(HYPERVISOR_CALLBACK_VECTOR, sysvec_acrn_hv_callback); - - x86_platform.calibrate_tsc =3D acrn_get_tsc_khz; - x86_platform.calibrate_cpu =3D acrn_get_tsc_khz; } =20 static bool acrn_x2apic_available(void) @@ -78,4 +80,6 @@ const __initconst struct hypervisor_x86 x86_hyper_acrn = =3D { .type =3D X86_HYPER_ACRN, .init.init_platform =3D acrn_init_platform, .init.x2apic_available =3D acrn_x2apic_available, + .init.get_tsc_khz =3D acrn_get_tsc_khz, + .init.get_cpu_khz =3D acrn_get_tsc_khz, }; diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c index cadc7f872b4f..4a0cdda0c49e 100644 --- a/arch/x86/kernel/cpu/mshyperv.c +++ b/arch/x86/kernel/cpu/mshyperv.c @@ -395,7 +395,7 @@ static int hv_nmi_unknown(unsigned int val, struct pt_r= egs *regs) } #endif =20 -static unsigned long hv_get_tsc_khz(void) +static unsigned int __init hv_get_tsc_khz(void) { unsigned long freq; =20 @@ -573,8 +573,8 @@ static void __init ms_hyperv_init_platform(void) =20 if (ms_hyperv.features & HV_ACCESS_FREQUENCY_MSRS && ms_hyperv.misc_features & HV_FEATURE_FREQUENCY_MSRS_AVAILABLE) { - x86_platform.calibrate_tsc =3D hv_get_tsc_khz; - x86_platform.calibrate_cpu =3D hv_get_tsc_khz; + x86_init.hyper.get_tsc_khz =3D hv_get_tsc_khz; + x86_init.hyper.get_cpu_khz =3D hv_get_tsc_khz; setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ); } =20 diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c index 2225df67d45f..3f1dab69d90e 100644 --- a/arch/x86/kernel/cpu/vmware.c +++ b/arch/x86/kernel/cpu/vmware.c @@ -64,7 +64,7 @@ struct vmware_steal_time { u64 reserved[7]; }; =20 -static unsigned long vmware_tsc_khz __ro_after_init; +static unsigned long vmware_tsc_khz __initdata; static u8 vmware_hypercall_mode __ro_after_init; =20 unsigned long vmware_hypercall_slow(unsigned long cmd, @@ -137,7 +137,7 @@ static inline int __vmware_platform(void) return eax !=3D UINT_MAX && ebx =3D=3D VMWARE_HYPERVISOR_MAGIC; } =20 -static unsigned long vmware_get_tsc_khz(void) +static unsigned int __init vmware_get_tsc_khz(void) { return vmware_tsc_khz; } @@ -419,8 +419,8 @@ static void __init vmware_platform_setup(void) } =20 vmware_tsc_khz =3D tsc_khz; - x86_platform.calibrate_tsc =3D vmware_get_tsc_khz; - x86_platform.calibrate_cpu =3D vmware_get_tsc_khz; + x86_init.hyper.get_tsc_khz =3D vmware_get_tsc_khz; + x86_init.hyper.get_cpu_khz =3D vmware_get_tsc_khz; =20 /* Skip lapic calibration since we know the bus frequency. */ apic_set_timer_frequency_hz(ecx, "VMware hypervisor"); diff --git a/arch/x86/kernel/jailhouse.c b/arch/x86/kernel/jailhouse.c index 615a1f25c83a..595cd28f9a9f 100644 --- a/arch/x86/kernel/jailhouse.c +++ b/arch/x86/kernel/jailhouse.c @@ -68,7 +68,7 @@ static void __init jailhouse_timer_init(void) apic_set_timer_frequency_khz(setup_data.v1.apic_khz, "Jailhouse hyperviso= r"); } =20 -static unsigned long jailhouse_get_tsc(void) +static unsigned int __init jailhouse_get_tsc(void) { return precalibrated_tsc_khz; } @@ -210,8 +210,6 @@ static void __init jailhouse_init_platform(void) x86_init.mpparse.parse_smp_cfg =3D jailhouse_parse_smp_config; x86_init.pci.arch_init =3D jailhouse_pci_arch_init; =20 - x86_platform.calibrate_cpu =3D jailhouse_get_tsc; - x86_platform.calibrate_tsc =3D jailhouse_get_tsc; x86_platform.get_wallclock =3D jailhouse_get_wallclock; x86_platform.legacy.rtc =3D 0; x86_platform.legacy.warm_reset =3D 0; @@ -293,5 +291,7 @@ const struct hypervisor_x86 x86_hyper_jailhouse __refco= nst =3D { .detect =3D jailhouse_detect, .init.init_platform =3D jailhouse_init_platform, .init.x2apic_available =3D jailhouse_x2apic_available, + .init.get_tsc_khz =3D jailhouse_get_tsc, + .init.get_cpu_khz =3D jailhouse_get_tsc, .ignore_nopv =3D true, }; diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index cb3d0ca1fa22..4f8299303a19 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -136,7 +136,7 @@ static inline void kvm_sched_clock_init(bool stable) * poll of guests can be running and trouble each other. So we preset * lpj here */ -static unsigned long kvm_get_tsc_khz(void) +static unsigned int __init kvm_get_tsc_khz(void) { setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ); return pvclock_tsc_khz(this_cpu_pvti()); @@ -343,8 +343,8 @@ void __init kvmclock_init(void) flags =3D pvclock_read_flags(&hv_clock_boot[0].pvti); kvm_sched_clock_init(flags & PVCLOCK_TSC_STABLE_BIT); =20 - x86_platform.calibrate_tsc =3D kvm_get_tsc_khz; - x86_platform.calibrate_cpu =3D kvm_get_tsc_khz; + x86_init.hyper.get_tsc_khz =3D kvm_get_tsc_khz; + x86_init.hyper.get_cpu_khz =3D kvm_get_tsc_khz; x86_platform.get_wallclock =3D kvm_get_wallclock; x86_platform.set_wallclock =3D kvm_set_wallclock; #ifdef CONFIG_X86_LOCAL_APIC diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index f3febe406fa8..7f1ca6df0004 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -1451,13 +1451,17 @@ static int __init init_tsc_clocksource(void) device_initcall(init_tsc_clocksource); =20 static bool __init determine_cpu_tsc_frequencies(bool early, + unsigned int known_cpu_khz, unsigned int known_tsc_khz) { /* Make sure that cpu and tsc are not already calibrated */ WARN_ON(cpu_khz || tsc_khz); =20 if (early) { - cpu_khz =3D x86_platform.calibrate_cpu(); + if (known_cpu_khz) + cpu_khz =3D known_cpu_khz; + else + cpu_khz =3D x86_platform.calibrate_cpu(); if (known_tsc_khz) tsc_khz =3D known_tsc_khz; else @@ -1514,7 +1518,7 @@ static void __init tsc_enable_sched_clock(void) =20 void __init tsc_early_init(void) { - unsigned int known_tsc_khz =3D 0; + unsigned int known_cpu_khz =3D 0, known_tsc_khz =3D 0; =20 if (!boot_cpu_has(X86_FEATURE_TSC)) return; @@ -1522,22 +1526,33 @@ void __init tsc_early_init(void) if (is_early_uv_system()) return; =20 + if (x86_init.hyper.get_cpu_khz) + known_cpu_khz =3D x86_init.hyper.get_cpu_khz(); + if (cc_platform_has(CC_ATTR_GUEST_SNP_SECURE_TSC)) known_tsc_khz =3D snp_secure_tsc_init(); else if (boot_cpu_has(X86_FEATURE_TDX_GUEST)) known_tsc_khz =3D tdx_tsc_init(); =20 + /* + * If the TSC frequency wasn't provided by trusted firmware, try to get + * it from the hypervisor (which is untrusted when running as a CoCo gues= t). + */ + if (!known_tsc_khz && x86_init.hyper.get_tsc_khz) + known_tsc_khz =3D x86_init.hyper.get_tsc_khz(); + /* * Ignore the user-provided TSC frequency if the exact frequency was - * obtained from trusted firmware, as the user-provided frequency is - * intended as a "starting point", not a known, guaranteed frequency. + * obtained from trusted firmware or the hypervisor, as the user- + * provided frequency is intended as a "starting point", not a known, + * guaranteed frequency. */ if (!known_tsc_khz) known_tsc_khz =3D tsc_early_khz; else if (tsc_early_khz) - pr_err("Ignoring 'tsc_early_khz' in favor of trusted firmware.\n"); + pr_err("Ignoring 'tsc_early_khz' in favor of firmware/hypervisor.\n"); =20 - if (!determine_cpu_tsc_frequencies(true, known_tsc_khz)) + if (!determine_cpu_tsc_frequencies(true, known_cpu_khz, known_tsc_khz)) return; tsc_enable_sched_clock(); } @@ -1558,7 +1573,7 @@ void __init tsc_init(void) =20 if (!tsc_khz) { /* We failed to determine frequencies earlier, try again */ - if (!determine_cpu_tsc_frequencies(false, 0)) { + if (!determine_cpu_tsc_frequencies(false, 0, 0)) { mark_tsc_unstable("could not calculate TSC khz"); setup_clear_cpu_cap(X86_FEATURE_TSC_DEADLINE_TIMER); return; diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c index d62c14334b35..1adb44fdddb2 100644 --- a/arch/x86/xen/time.c +++ b/arch/x86/xen/time.c @@ -38,7 +38,7 @@ static u64 xen_sched_clock_offset __read_mostly; =20 /* Get the TSC speed from Xen */ -static unsigned long xen_tsc_khz(void) +static unsigned int __init xen_tsc_khz(void) { struct pvclock_vcpu_time_info *info =3D &HYPERVISOR_shared_info->vcpu_info[0].time; @@ -569,7 +569,7 @@ static void __init xen_init_time_common(void) static_call_update(pv_steal_clock, xen_steal_clock); paravirt_set_sched_clock(xen_sched_clock); =20 - x86_platform.calibrate_tsc =3D xen_tsc_khz; + x86_init.hyper.get_tsc_khz =3D xen_tsc_khz; x86_platform.get_wallclock =3D xen_get_wallclock; } =20 --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2204E4931EF for ; Thu, 6 Aug 2026 23:36:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.71 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059402; cv=none; b=mT/8cRU6+TfaZuYE3j/rjFWhd27dMIZKpYMyWl6QvCl7wCcXdMjWloCOEyIu047K7oypEl/Xs3FzrX6a3i07FvEadkMVNYRTD4XI7EAzmE4DwxLrkaETUeSXIEJK1C3w5Iej2aXVtzjMs3b2avNX2wn7LfNH2fnCGFW9InMSn10= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059402; c=relaxed/simple; bh=kNb3vvgtLbRH7N/DprLb1mmCclzI0d/ujF+Or08Q6XI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=JTcQEnAAliVBzewLBAlalR7s+aOmBz6BFvQizZdqv6cCGe1vXSLA0uJWeRyjGsjQUockXeJnul56L26zR2ES4lf8YpxXaYzatoGat9RDt7FvEM25FAJJXJJzWwySUEesredGe+pYXfOOFr+Gf32WvEgeNtJaTNl+pO5e98R9xwE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=ZF2Ukkqd; arc=none smtp.client-ip=209.85.216.71 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ZF2Ukkqd" Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-3811279d51aso4526960a91.1 for ; Thu, 06 Aug 2026 16:36:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059399; x=1786664199; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=yV4aOROKwLK4YUA2A0rPmI+8Xp1hkN/OxQzRiMqFKuI=; b=ZF2Ukkqd3umSY9eABbgOdeiNs5Foc92GSZ4cnzVJB7XoRxtMpjgraQ7/g1nlLF8ftw Xs/4yzafrN3MwoL8Lsa1b07NHrVjJ/FmZ1xvFxZsLMxQIQMk4uZa/Rcs5BRDJW1UipTJ y0Zpq7AAx+S5cwmAz27YAD+A8XgWMva1Kq5npzOuWksEILOqkDSapQlCbZaKgnddPfRP XKg6AvfcfvTH1KhVTOgtnwGA6bpYdXN2ZhevxVOPQNDNCk3cQ0eSe2m/4y0m8m01355r PCyumVeC8sEl4I5sEvWffI9u5FkvNx0+sWSj0s9US7KL9gLNqW2ha3zVisicX4l49o+P 6jaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059399; x=1786664199; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=yV4aOROKwLK4YUA2A0rPmI+8Xp1hkN/OxQzRiMqFKuI=; b=pfMG/+g0Wbr25Ig1bydArAnOU/IiUUZ5UeHk+3i6dhfIQh6J+xorcCJwCJaa9lmoX5 gBjoJsTP+0Pwq+m4YVs7rvoN9BKA/nZ7BEZELiVallRtbxRYjDgJiM5qvzdMtARKwtgf O9LURRuEmFPwFTxlAN4V82EkvrnN+GJuxLHt2LlMJAgLkBSuoeM/HY59KzZXFo2UNTY9 43Th9XyYg8yve9PMZbpExTEYLDi70r5tt5vLJhsWdoGq2Y8J4ns17OwIaMv8a2RfpUxT PwtlHMGuKzcbksuRJP7/iOC8aEisvz3ZvYfM5T7Tw1nm9PBQOZBdQHXPQdghRbHMfbOk dQ6A== X-Forwarded-Encrypted: i=1; AHgh+RrSrRlGhAylvPOiewUcq07PlR9joftFSxfjdeLy2605s3jfxEFYV0SD/kFKnHkstoBTSClTSX8gF5i3uoo=@vger.kernel.org X-Gm-Message-State: AOJu0Yzq06rwm5VtXzkbbkBSxJasRBf1i6DmW5uXbiKQ+bjzUSiFtI+m gSpaKoCHXd8B7PeL5Y71nO9S/m36/T2FzQVRpw7t9HBJpRDT5UWqY0zEZFaPkYV8pZw9ZDbOc26 5m1eMJg== X-Received: from pjbqa7.prod.google.com ([2002:a17:90b:4fc7:b0:38e:bbd1:f3c8]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90a:c88e:b0:38e:488f:7068 with SMTP id 98e67ed59e1d1-3903c5373b4mr20563002a91.2.1786059398528; Thu, 06 Aug 2026 16:36:38 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:29 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-13-seanjc@google.com> Subject: [PATCH v6 12/51] x86/acrn: Register TSC/CPU frequency callbacks iff frequency is actually in CPUID From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Register ACRN's TSC/CPU frequency overrides if and only if the exact TSC frequency is actually provided in CPUID. This will allow marking the TSC as reliable as appropriate, and avoids relying on the caller to handle "failure". For all intents and purposes, no functional change intended. Signed-off-by: Sean Christopherson Reviewed-by: David Woodhouse --- arch/x86/kernel/cpu/acrn.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/arch/x86/kernel/cpu/acrn.c b/arch/x86/kernel/cpu/acrn.c index ad8f2da8003b..dc71a6fdd461 100644 --- a/arch/x86/kernel/cpu/acrn.c +++ b/arch/x86/kernel/cpu/acrn.c @@ -19,6 +19,8 @@ #include #include =20 +static unsigned int acrn_tsc_khz_cpuid __initdata; + static u32 __init acrn_detect(void) { return acrn_cpuid_base(); @@ -26,13 +28,19 @@ static u32 __init acrn_detect(void) =20 static unsigned int __init acrn_get_tsc_khz(void) { - return cpuid_eax(ACRN_CPUID_TIMING_INFO); + return acrn_tsc_khz_cpuid; } =20 static void __init acrn_init_platform(void) { /* Install system interrupt handler for ACRN hypervisor callback */ sysvec_install(HYPERVISOR_CALLBACK_VECTOR, sysvec_acrn_hv_callback); + + acrn_tsc_khz_cpuid =3D cpuid_eax(ACRN_CPUID_TIMING_INFO); + if (acrn_tsc_khz_cpuid) { + x86_init.hyper.get_tsc_khz =3D acrn_get_tsc_khz; + x86_init.hyper.get_cpu_khz =3D acrn_get_tsc_khz; + } } =20 static bool acrn_x2apic_available(void) @@ -80,6 +88,4 @@ const __initconst struct hypervisor_x86 x86_hyper_acrn = =3D { .type =3D X86_HYPER_ACRN, .init.init_platform =3D acrn_init_platform, .init.x2apic_available =3D acrn_x2apic_available, - .init.get_tsc_khz =3D acrn_get_tsc_khz, - .init.get_cpu_khz =3D acrn_get_tsc_khz, }; --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pf1-f200.google.com (mail-pf1-f200.google.com [209.85.210.200]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B5481493210 for ; Thu, 6 Aug 2026 23:36:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.200 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059402; cv=none; b=ktqYJbjmNKlnL2Swur4jG3EGd79bJaFdW/avScf73G75sOoKJGRMW2K3xMF8+s6q4ri3jb7X3uKIqsojalCSe5SGBwr3CPP55bOnuJkTkjqDwvL3SMQZfp5ptfs6ETR4vYWjSAFtdrLFdNNDwRPR7y3l7zG1Jlu2bhxqsZG5ezg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059402; c=relaxed/simple; bh=4z1GlPe+fx1kTpwR5eIkMwvFEvBptpYbjy53SQyI3Fc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=BOqICOMAW0+9FtvpcHnYjDHQJgUbBDqsTe6XKVYyXRAZKVzvqRXDhKwnkP4Y4ODj7VV16z9vbYx3K2oCOqRrp34Ivn6w0IJWMdaRt4vYo7D2E35SRRIoGugmZ3Hqsd3EtlZNHMojF28BKCbTspfVXfplkbazPTe1agKNgkGYrmY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=CZVso5hG; arc=none smtp.client-ip=209.85.210.200 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="CZVso5hG" Received: by mail-pf1-f200.google.com with SMTP id d2e1a72fcca58-848474825ffso2105019b3a.0 for ; Thu, 06 Aug 2026 16:36:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059400; x=1786664200; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=kmrkRlf4iOUyRYugkcn9gxIXBFL0cMozIwMb4/CeDNQ=; b=CZVso5hG5zGbxJowGYCYPV5Bw8AqpJTc/Lm0/N8poGgRplp3fgX+qD4wmH81HJl7ww sk9FyNOkDZbOcrr4W7A1WWmp/wvV/JKnRxDZH7X05meVxUSAlBuzw2bPr5yCUYimn/n6 SkM5WTgUjvwXu0Vd9VKZNZwtlha9/QaRnZQY7u85+iQBY0zaEhQGbZKppTEhAPkXQ78S 6WC0WIk5PipMQVMPaEhAiA5d7B0JRwP9VQ0uQnERNMaG9sRLDqRQLiHbJBMnhTGj3X/3 UScXGMmrwQtsmwDyOd4yXdXWVHmyn5GyocbMCgWgeVM7Ess0KWCDY2eiCGmwJCJC3J9j /9aQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059400; x=1786664200; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=kmrkRlf4iOUyRYugkcn9gxIXBFL0cMozIwMb4/CeDNQ=; b=SV0bHVwW9vELz+M/m3nEaBiDjYRv2a/IZAgOsjQz/B1siLltidLLrseBCk1k+GtME/ Dq3d5o64STgqAI0lDY+1euX7W9GLnN8ZQZO1vdUNCQNxYpN8/21MtkCVSJKUGJNJ3W/5 Nfvn6N3EwJRfAsuA8k9BwC/VPCG5Azvj3/rJSwa/jlwqoE9cE3HwFh71Q5AErHfmk8kK kvKG2U60cD00t11m3Vm30ByJGPWMC3KLxpjTZHjoEvjRX1kpkB+2EBjPSQuAHyv0C36/ /BbotbH6oG/93CXH286iIJEnRctfpw0brJVzSxE23ZcdsuhsTReTj44+Iod/NFLi8X9t PsUw== X-Forwarded-Encrypted: i=1; AHgh+Ro1u6bktJeVuAYkqsNVLMcZ3A3W8lBPw5i49MmxGj+e+X9Ir60qw0nLZ2y7/7WFjWwBQXFIgY9foDtQI4w=@vger.kernel.org X-Gm-Message-State: AOJu0YwYBRIaRnlputC0B8O8ZB3YkvT+vJjcHVrlezUQ0jzAOOy7zI/H YSQMdNfvais/yGDgAoHDL6FQ/KfE+ESIhLKJ0iOmgMRYh2J5A/q/PsfmPvkR4NQ9G9GtYeHbtJx 043PtIg== X-Received: from pfbcz9.prod.google.com ([2002:aa7:9309:0:b0:847:aa6c:47fc]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:4648:b0:842:63f5:d097 with SMTP id d2e1a72fcca58-84f41ba51c5mr11209793b3a.3.1786059399712; Thu, 06 Aug 2026 16:36:39 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:30 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-14-seanjc@google.com> Subject: [PATCH v6 13/51] x86/acrn: Mark TSC frequency as known when using ACRN for calibration From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Mark the TSC frequency as known when using ACRN's PV CPUID information. Per commit 81a71f51b89e ("x86/acrn: Set up timekeeping") and common sense, the TSC freq is explicitly provided by the hypervisor. Signed-off-by: Sean Christopherson Reviewed-by: David Woodhouse --- arch/x86/kernel/cpu/acrn.c | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/x86/kernel/cpu/acrn.c b/arch/x86/kernel/cpu/acrn.c index dc71a6fdd461..3818f6ae0629 100644 --- a/arch/x86/kernel/cpu/acrn.c +++ b/arch/x86/kernel/cpu/acrn.c @@ -40,6 +40,7 @@ static void __init acrn_init_platform(void) if (acrn_tsc_khz_cpuid) { x86_init.hyper.get_tsc_khz =3D acrn_get_tsc_khz; x86_init.hyper.get_cpu_khz =3D acrn_get_tsc_khz; + setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ); } } =20 --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D946E494251 for ; Thu, 6 Aug 2026 23:36:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.199 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059405; cv=none; b=NOpapXAWnRIAnYRNMJr12O8s9WELcs8lb96NZju4wJAy2gL9JULBTWZ00eAjis9vjMkk2g2SHf8wvmxQg2cBqWg86HKfJXyyXbDjmnoRdpiYCI/go/Wr56wzh2bRaoskDXH7m+W7tQXz2ZxHk/eJElX5OuCyYt58eKn8LHokkyA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059405; c=relaxed/simple; bh=M65IyX8rm7dTt45KlwDHi8ahXU+KWS/raGfMe6r6K7w=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=p06fcf4XHdqCjHc+9kgbSIuXWPMMi8o2ezMC6Rn4dd3QkB5WmgR/CY3046ZeDWSFSBBkri0EO00kAxvBNPstdoGxQJdXpQUG6XHhp4qJnjkK1XZFCpisM5Xp3AG0ZxvhNwKmKcq0CCzoagXwxomBqC1oEU0GyR95cRhwlcLY5Fs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=grN5KYSv; arc=none smtp.client-ip=209.85.215.199 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="grN5KYSv" Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-cb11535e6a1so2334873a12.0 for ; Thu, 06 Aug 2026 16:36:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059401; x=1786664201; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=xHY7WhZzoR4x+WtFqsSoEfBU4PaM9Rhz3R83jbux6ZU=; b=grN5KYSvTPkU9iZxvDYixscdd/ScZGt50gIQHRPY3J29UlhVnpppkXtrQw0Q43LqKO GPgHPIG3UrN3ok6VU+DmIjC/JXeP3otskUIJh16bcexanzHdXoPasfoGFC6O6n5sMMG5 MVYhQyOkAKe9ZLN0wkRblq+1pFxkUQ05ko+sJra5SBfZ0sk1L5HlzWgtSZJJiHW4YYdI m/y1cwIXLqtDh8vHp9X7X/hU1+r2JPefayDJNzlzs9Ohm9SrYlIv4mrNWgW9koc7iV4m jj6srDpOGKcd7mlOcSz8bbWS2C3y43NmRfNH53TQnPNiB/sJuTlpRiflla4Ty7ej0KZ3 XMsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059401; x=1786664201; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=xHY7WhZzoR4x+WtFqsSoEfBU4PaM9Rhz3R83jbux6ZU=; b=jrJ3WnMCOWV1N2ZyCY98fM6eeuzarahfjG9AvxOkx84e5X3V/kZ9gtiwJXxiD08dia hnexdq2P0rvlvPKLRxGekHRD15kuoWQMrVkwuH2KJ3QmQKAmVkP8N5UXjH4mP4WOfgsh TCtDSuuZIGF0gWEjE5fouqRETXbKxIw5PjnBBXBImDH4ueoHDz66SLmi3vzBjsQOSsXu iMGgfYIyPWdXcDWGXLhBNm+ThzLFDzWTUypeI720SwBXh/R28O9dNHMqGLsnWZcLGTCy pHGdJyl9OOlMbSr1J2SdkRNEXKi1k0xGn06f96H7rOcFr5AFnI180I1DN86C6uBBGX9b fqtg== X-Forwarded-Encrypted: i=1; AHgh+RqGRKm9LVoK3+7ZqBAwB3D5oFsuYTq2D98CdQFwZSm6HmTBswMt6nEtbcI2Xf+BLrJAVXkDXT5/2Vm/8rY=@vger.kernel.org X-Gm-Message-State: AOJu0YwYxoX7LxHfaUTL3gH6VWDznlKQhFy27AMu/HwweNFRNgcWHBa8 I+6gk6HncLj8Esbzo/9XdOZZbresDK71wTZr/mmOB2X0dGhAfO5SZztcwVqGcFub1gRlZ2dincP V3giV2Q== X-Received: from pfbbu11.prod.google.com ([2002:a05:6a00:410b:b0:848:8b16:23d6]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:2383:b0:842:5b66:3c7f with SMTP id d2e1a72fcca58-84f2dedf356mr20263411b3a.0.1786059400868; Thu, 06 Aug 2026 16:36:40 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:31 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-15-seanjc@google.com> Subject: [PATCH v6 14/51] x86/tsc: Consolidate forcing of X86_FEATURE_TSC_KNOWN_FREQ for PV code From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that all paravirt code that explicitly specifies the TSC frequency also sets X86_FEATURE_TSC_KNOWN_FREQ, replace all of the one-off code and simply set X86_FEATURE_TSC_KNOWN_FREQ if the TSC frequency is known. Do NOT force set TSC_KNOWN_FREQ if the "known" TSC frequency was provided by the user. Per commit bd35c77e32e4 ("x86/tsc: Add tsc_early_khz command line parameter"), one of the goals of the param is to allow the refined calibration work "to do meaningful error checking". No functional change intended. Reviewed-by: Michael Kelley Signed-off-by: Sean Christopherson Reviewed-by: David Woodhouse --- arch/x86/coco/sev/core.c | 1 - arch/x86/coco/tdx/tdx.c | 1 - arch/x86/kernel/cpu/acrn.c | 1 - arch/x86/kernel/cpu/mshyperv.c | 1 - arch/x86/kernel/cpu/vmware.c | 2 -- arch/x86/kernel/jailhouse.c | 1 - arch/x86/kernel/kvmclock.c | 1 - arch/x86/kernel/tsc.c | 13 ++++++++++--- arch/x86/xen/time.c | 1 - 9 files changed, 10 insertions(+), 12 deletions(-) diff --git a/arch/x86/coco/sev/core.c b/arch/x86/coco/sev/core.c index bc5ae9ef74da..72313b36b6f5 100644 --- a/arch/x86/coco/sev/core.c +++ b/arch/x86/coco/sev/core.c @@ -2027,7 +2027,6 @@ unsigned int __init snp_secure_tsc_init(void) =20 secrets =3D (__force struct snp_secrets_page *)mem; =20 - setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ); setup_force_cpu_cap(X86_FEATURE_TSC_RELIABLE); =20 rdmsrq(MSR_AMD64_GUEST_TSC_FREQ, tsc_freq_mhz); diff --git a/arch/x86/coco/tdx/tdx.c b/arch/x86/coco/tdx/tdx.c index ec28a15e26ac..21a574e60e0f 100644 --- a/arch/x86/coco/tdx/tdx.c +++ b/arch/x86/coco/tdx/tdx.c @@ -1203,7 +1203,6 @@ unsigned int __init tdx_tsc_init(void) =20 /* TSC is the only reliable clock in TDX guest */ setup_force_cpu_cap(X86_FEATURE_TSC_RELIABLE); - setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ); =20 return info.crystal_khz * info.numerator / info.denominator; } diff --git a/arch/x86/kernel/cpu/acrn.c b/arch/x86/kernel/cpu/acrn.c index 3818f6ae0629..dc71a6fdd461 100644 --- a/arch/x86/kernel/cpu/acrn.c +++ b/arch/x86/kernel/cpu/acrn.c @@ -40,7 +40,6 @@ static void __init acrn_init_platform(void) if (acrn_tsc_khz_cpuid) { x86_init.hyper.get_tsc_khz =3D acrn_get_tsc_khz; x86_init.hyper.get_cpu_khz =3D acrn_get_tsc_khz; - setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ); } } =20 diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c index 4a0cdda0c49e..3bca987e05c3 100644 --- a/arch/x86/kernel/cpu/mshyperv.c +++ b/arch/x86/kernel/cpu/mshyperv.c @@ -575,7 +575,6 @@ static void __init ms_hyperv_init_platform(void) ms_hyperv.misc_features & HV_FEATURE_FREQUENCY_MSRS_AVAILABLE) { x86_init.hyper.get_tsc_khz =3D hv_get_tsc_khz; x86_init.hyper.get_cpu_khz =3D hv_get_tsc_khz; - setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ); } =20 if (ms_hyperv.priv_high & HV_ISOLATION) { diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c index 3f1dab69d90e..cbe8b59ab79f 100644 --- a/arch/x86/kernel/cpu/vmware.c +++ b/arch/x86/kernel/cpu/vmware.c @@ -390,8 +390,6 @@ static void __init vmware_set_capabilities(void) { setup_force_cpu_cap(X86_FEATURE_CONSTANT_TSC); setup_force_cpu_cap(X86_FEATURE_TSC_RELIABLE); - if (vmware_tsc_khz) - setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ); if (vmware_hypercall_mode =3D=3D CPUID_VMWARE_FEATURES_ECX_VMCALL) setup_force_cpu_cap(X86_FEATURE_VMCALL); else if (vmware_hypercall_mode =3D=3D CPUID_VMWARE_FEATURES_ECX_VMMCALL) diff --git a/arch/x86/kernel/jailhouse.c b/arch/x86/kernel/jailhouse.c index 595cd28f9a9f..8107c28eb2bc 100644 --- a/arch/x86/kernel/jailhouse.c +++ b/arch/x86/kernel/jailhouse.c @@ -255,7 +255,6 @@ static void __init jailhouse_init_platform(void) pr_debug("Jailhouse: PM-Timer IO Port: %#x\n", pmtmr_ioport); =20 precalibrated_tsc_khz =3D setup_data.v1.tsc_khz; - setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ); =20 pci_probe =3D 0; =20 diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index 4f8299303a19..35a879d33e9e 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -138,7 +138,6 @@ static inline void kvm_sched_clock_init(bool stable) */ static unsigned int __init kvm_get_tsc_khz(void) { - setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ); return pvclock_tsc_khz(this_cpu_pvti()); } =20 diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 7f1ca6df0004..f42872c9ae99 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -1541,11 +1541,18 @@ void __init tsc_early_init(void) if (!known_tsc_khz && x86_init.hyper.get_tsc_khz) known_tsc_khz =3D x86_init.hyper.get_tsc_khz(); =20 + /* + * Mark the TSC frequency as known if it was obtained from a hypervisor + * or trusted firmware. + */ + if (known_tsc_khz) + setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ); + /* * Ignore the user-provided TSC frequency if the exact frequency was - * obtained from trusted firmware or the hypervisor, as the user- - * provided frequency is intended as a "starting point", not a known, - * guaranteed frequency. + * obtained from trusted firmware or the hypervisor, and don't mark the + * frequency as known, as the user-provided frequency is intended as a + * "starting point", not a known, guaranteed frequency */ if (!known_tsc_khz) known_tsc_khz =3D tsc_early_khz; diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c index 1adb44fdddb2..487ad838c441 100644 --- a/arch/x86/xen/time.c +++ b/arch/x86/xen/time.c @@ -43,7 +43,6 @@ static unsigned int __init xen_tsc_khz(void) struct pvclock_vcpu_time_info *info =3D &HYPERVISOR_shared_info->vcpu_info[0].time; =20 - setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ); return pvclock_tsc_khz(info); } =20 --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1786059423; cv=none; d=zohomail.com; s=zohoarc; b=QOOk+UaoUH2AWIiyCcS/AJm5sGKcubzQmNk075krFuqIP6aC4VnbTI0XW5pVDSjuysxxxkW6933nBryPf3esUOzYmp13MI4/xCu1fC0bob08IBzt76LvQL0EK4IcD4e2xLGuQ9JyRMxr/O/At9bHvHp+mdLbVqc8+df6rFijNnI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786059423; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=wbY0NuQ4jmVaTb967BiKKQEFZ81rzIFWsnI6s/GLKnk=; b=FbyT3rQYYzvGzLz9LXy+A4HB5abq9W1SUXxvX92lJpEkd7Xfzgx2LsAzd+Jr9+z0FRDhJuSBOg2qPdK3ccHNorgrXEIUDxJOzXT9P3jJhPLOyzycla586AnVXvPIM/s5LYVy4kzCTW7zlm7tDgM9flAk5H+0D0f6muS+Mjqh/ZQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1786059423331589.8819985163506; Thu, 6 Aug 2026 16:37:03 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1385284.1627782 (Exim 4.92) (envelope-from ) id 1ws7dm-000177-Re; Thu, 06 Aug 2026 23:36:46 +0000 Received: by outflank-mailman (output) from mailman id 1385284.1627782; Thu, 06 Aug 2026 23:36:46 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ws7dm-00016d-M3; Thu, 06 Aug 2026 23:36:46 +0000 Received: by outflank-mailman (input) for mailman id 1385284; Thu, 06 Aug 2026 23:36:45 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3ihp1agYKCe0hTPcYRVddVaT.RdbmTc-STkTaaXhih.mTcegdYTRi.dgV@flex--seanjc.bounces.google.com>) id 1ws7dl-0000zb-1s for xen-devel@lists.xenproject.org; Thu, 06 Aug 2026 23:36:45 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1ws7dk-00GcT3-Eh for xen-devel@lists.xenproject.org; Fri, 07 Aug 2026 01:36:44 +0200 Received: from [10.42.69.9] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3ihp1agYKCe0hTPcYRVddVaT.RdbmTc-STkTaaXhih.mTcegdYTRi.dgV@flex--seanjc.bounces.google.com>) id 6a751a63-5cb7-0a2a0a5109dd-0a2a45099b3a-14 for ; Fri, 07 Aug 2026 01:36:44 +0200 Received: from [209.85.216.71] (helo=mail-pj1-f71.google.com) by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3ihp1agYKCe0hTPcYRVddVaT.RdbmTc-STkTaaXhih.mTcegdYTRi.dgV@flex--seanjc.bounces.google.com>) id 6a751a8a-be1a-0a2a45090019-d155d847b8c1-3 for ; Fri, 07 Aug 2026 01:36:44 +0200 Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-38e667368f0so4358162a91.2 for ; Thu, 06 Aug 2026 16:36:43 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=google.com header.i="@google.com" header.h="Content-Type:Cc:To:From:Subject:Message-ID:References:Mime-Version:In-Reply-To:Date:Reply-To" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059402; x=1786664202; darn=lists.xenproject.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=wbY0NuQ4jmVaTb967BiKKQEFZ81rzIFWsnI6s/GLKnk=; b=wU0/80f/2tfxf6oVmy6NECSHzNhhT0Ndg5wkXXqKAGhqPiuL+EINjJO3oVS8DLXj1p /HUcwVU/OTHEEuAovapscHBEkt7Wtwu1nYVMGW2ob28WO1fsIRTFGqIBLPV+2D/iMSBT XyYnb2rxXP0GLJ6De2Cjka/B7+TO0fHWSmmGQnHMcRK/oxwRzEEVSaZdC6v56cipmKn6 b0ZGtLc0UiD8gwnViVlsB9S/ClDqx2tTPJFqH2XulN8Yr7nfRpwy3Tfo+PAyOkgn9/Z+ 5ynifEuCAm/y2nu8IBT2YeRs7dyv79e5r5QY91HeBIswEB7wL7XMWJXj+jbHGl2+PqWK t9Aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059402; x=1786664202; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=wbY0NuQ4jmVaTb967BiKKQEFZ81rzIFWsnI6s/GLKnk=; b=CZbx8Mx958nQAE7y4AfTwtE5qYUn2BHzwCvm02wpOrzwOBf44xo5cPY+jeiNiI4T1P RWaatoZ/4WOy05zk1ABLwL4QiikvEXff9UM1kIlaZ6azwG6t+LPsNsOfJ/jebj9IrAiM V4h/hD7thojso+ZJ7POOIDBx083F1DNHLOx+Us1B73PlB9X5UC48mh5V1pRmEiaNv5Uz KwhEkull4TmWOkd/XWrgcoM8lCLPue1dQvlQ7QBpi82/Pef6kA1ZVSjxIlroHyGxCHp1 EW+kqX1K8Up8LpqJU4T12YgKsYICxqnsRJ5Lba78zQZ6udunjfsDCAzlpCHWkHN5uixx vr9g== X-Forwarded-Encrypted: i=1; AHgh+Ro10JlYN7uXMq5wdLHHq8IBB/8dlHc9PEDgagA202qntvLP6zSx07oBNhOUFPjwMubOmkafvTSvGt4=@lists.xenproject.org X-Gm-Message-State: AOJu0YwrUa3B3M5+sxN7NrfYUw6JHoKaGB/vhwafgGBarCgAm53lpsLq ryrXsQrTp6dyF/4g8sbZT3731EXww3qFuPAD4HRu/ThidEL37fWsSeqrl8pY5YL7TvjPT8jc5or bThwn2g== X-Received: from pjbcv18.prod.google.com ([2002:a17:90a:fd12:b0:38e:7f2c:2c4b]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:264c:b0:37f:e326:6557 with SMTP id 98e67ed59e1d1-3903c598e8amr20096574a91.4.1786059402046; Thu, 06 Aug 2026 16:36:42 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:32 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-16-seanjc@google.com> Subject: [PATCH v6 15/51] x86/tsc: Kill off x86_platform_ops.calibrate_{cpu,tsc}() hooks From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner X-purgate-ID: tlsNG-bad1c0/1786059404-BEAD8034-89559CF6/0/0 X-purgate-type: clean X-purgate-size: 5639 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1786059425243158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that getting the CPU and/or TSC frequencies from the hypervisor uses dedicated hooks, drop x86_platform_ops.calibrate_{cpu,tsc}() and instead directly invoke the correct helper at each phase of (re)calibration. In addition to eliminating unnecessary code, this makes it a bit more obvious when the "late" path invokes pit_hpet_ptimer_calibrate_cpu() instead of x86_platform_ops.calibrate_cpu(). No functional change intended. Signed-off-by: Sean Christopherson Reviewed-by: David Woodhouse --- arch/x86/include/asm/tsc.h | 2 -- arch/x86/include/asm/x86_init.h | 4 ---- arch/x86/kernel/tsc.c | 28 ++++++++++++---------------- arch/x86/kernel/x86_init.c | 2 -- 4 files changed, 12 insertions(+), 24 deletions(-) diff --git a/arch/x86/include/asm/tsc.h b/arch/x86/include/asm/tsc.h index b6b86e24e1bf..c09ec485abcd 100644 --- a/arch/x86/include/asm/tsc.h +++ b/arch/x86/include/asm/tsc.h @@ -95,8 +95,6 @@ extern void mark_tsc_unstable(char *reason); extern int unsynchronized_tsc(void); extern int check_tsc_unstable(void); extern void mark_tsc_async_resets(char *reason); -extern unsigned long native_calibrate_cpu_early(void); -extern unsigned long native_calibrate_tsc(void); extern unsigned long long native_sched_clock_from_tsc(u64 tsc); =20 extern int tsc_clocksource_reliable; diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_ini= t.h index 0c89bf40f507..e879e6e83428 100644 --- a/arch/x86/include/asm/x86_init.h +++ b/arch/x86/include/asm/x86_init.h @@ -295,8 +295,6 @@ struct x86_hyper_runtime { =20 /** * struct x86_platform_ops - platform specific runtime functions - * @calibrate_cpu: calibrate CPU - * @calibrate_tsc: calibrate TSC, if different from CPU * @get_wallclock: get time from HW clock like RTC etc. * @set_wallclock: set time back to HW clock * @iommu_shutdown: set by an IOMMU driver for shutdown if necessary @@ -320,8 +318,6 @@ struct x86_hyper_runtime { * @guest: guest incarnations callbacks */ struct x86_platform_ops { - unsigned long (*calibrate_cpu)(void); - unsigned long (*calibrate_tsc)(void); void (*get_wallclock)(struct timespec64 *ts); int (*set_wallclock)(const struct timespec64 *ts); void (*iommu_shutdown)(void); diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index f42872c9ae99..1d41ef1db27c 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -672,7 +672,7 @@ int cpuid_get_tsc_info(struct cpuid_tsc_info *info) * native_calibrate_tsc - determine TSC frequency * Determine TSC frequency via CPUID, else return 0. */ -unsigned long native_calibrate_tsc(void) +static unsigned long native_calibrate_tsc(void) { struct cpuid_tsc_info info; =20 @@ -904,7 +904,7 @@ static unsigned long pit_hpet_ptimer_calibrate_cpu(void) /** * native_calibrate_cpu_early - can calibrate the cpu early in boot */ -unsigned long native_calibrate_cpu_early(void) +static unsigned long native_calibrate_cpu_early(void) { unsigned long flags, fast_calibrate =3D cpu_khz_from_cpuid(); =20 @@ -918,7 +918,7 @@ unsigned long native_calibrate_cpu_early(void) return fast_calibrate; } =20 - +#ifndef CONFIG_SMP /** * native_calibrate_cpu - calibrate the cpu */ @@ -931,6 +931,7 @@ static unsigned long native_calibrate_cpu(void) =20 return tsc_freq; } +#endif =20 void recalibrate_cpu_khz(void) { @@ -943,8 +944,8 @@ void recalibrate_cpu_khz(void) if (WARN_ON_ONCE(cpu_feature_enabled(X86_FEATURE_TSC_KNOWN_FREQ))) return; =20 - cpu_khz =3D x86_platform.calibrate_cpu(); - tsc_khz =3D x86_platform.calibrate_tsc(); + cpu_khz =3D native_calibrate_cpu(); + tsc_khz =3D native_calibrate_tsc(); if (tsc_khz =3D=3D 0) tsc_khz =3D cpu_khz; else if (abs(cpu_khz - tsc_khz) * 10 > tsc_khz) @@ -1458,17 +1459,19 @@ static bool __init determine_cpu_tsc_frequencies(bo= ol early, WARN_ON(cpu_khz || tsc_khz); =20 if (early) { + /* + * Early CPU calibration can only use methods that are available + * early in boot (obviously). + */ if (known_cpu_khz) cpu_khz =3D known_cpu_khz; else - cpu_khz =3D x86_platform.calibrate_cpu(); + cpu_khz =3D native_calibrate_cpu_early(); if (known_tsc_khz) tsc_khz =3D known_tsc_khz; else - tsc_khz =3D x86_platform.calibrate_tsc(); + tsc_khz =3D native_calibrate_tsc(); } else { - /* We should not be here with non-native cpu calibration */ - WARN_ON(x86_platform.calibrate_cpu !=3D native_calibrate_cpu); cpu_khz =3D pit_hpet_ptimer_calibrate_cpu(); } =20 @@ -1571,13 +1574,6 @@ void __init tsc_init(void) return; } =20 - /* - * native_calibrate_cpu_early can only calibrate using methods that are - * available early in boot. - */ - if (x86_platform.calibrate_cpu =3D=3D native_calibrate_cpu_early) - x86_platform.calibrate_cpu =3D native_calibrate_cpu; - if (!tsc_khz) { /* We failed to determine frequencies earlier, try again */ if (!determine_cpu_tsc_frequencies(false, 0, 0)) { diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c index 252c5827d063..b7a48e622f48 100644 --- a/arch/x86/kernel/x86_init.c +++ b/arch/x86/kernel/x86_init.c @@ -147,8 +147,6 @@ static void enc_kexec_finish_noop(void) {} static bool is_private_mmio_noop(u64 addr) {return false; } =20 struct x86_platform_ops x86_platform __ro_after_init =3D { - .calibrate_cpu =3D native_calibrate_cpu_early, - .calibrate_tsc =3D native_calibrate_tsc, .get_wallclock =3D mach_get_cmos_time, .set_wallclock =3D mach_set_cmos_time, .iommu_shutdown =3D iommu_shutdown_noop, --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A1118495027 for ; Thu, 6 Aug 2026 23:36:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.70 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059406; cv=none; b=UkuCc2OlwXXvHgU9w9F225NIJtMGvl0Tii3AEHc7GbUnGShJpwu/izpuekxZO3SzFxHNMH5mihGiyFmcm2BPQSCtqN5W7VCRE2JkWGFXLoeoOiUdRaU7BNRrZWV5REP0b/iE7LQ9E0DwxLKdXBA94mPifMKbGi1WrMUhKTBCxUE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059406; c=relaxed/simple; bh=JVq3rGO4pg6RPeAnx1wMiHtknekbd2VNIRn3YGfu0ao=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=NxVXnDDgBIIfGl/TsHgzmz4T44dC2+CCXyrIhGiHP/1pT5kz2V2qzKgwI+XHWzKyftgYK6gDnJUO+jOl1h8bIPkgnSWcQJyMZ1Bt8gwac+dQvfdBOeG7c9U92i6jzPRciOEeex0bQ4wkUCHwrw+87o2KCwKKSYJ+xRHlbpDqgQY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=BlO+072r; arc=none smtp.client-ip=209.85.216.70 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="BlO+072r" Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-38e22137fb3so3727475a91.0 for ; Thu, 06 Aug 2026 16:36:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059404; x=1786664204; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=VAfqOqpweyKvsFpq/agEYC9CEWnfcmlui4k8L8ZR5pE=; b=BlO+072rpsy9DCM83gKW5v7E1PZyyJ67zTdD/BlALmywcI2sQZNZHXQBXAKw4ZqNI9 orlED5c7TiX1o7l5Zut9YzGld5blVDOpn4O9mYoe7uazWZ3HR54VXdik5t5XvyUMmZvS +TsFLGAHZJX4cHUParMffVovk8u+L9n5xjp7cu9DW6uVpOrFhdKFyUu23sRcU4P85abh lcJFYNcoagmvLj0NScnYB1g/UzRNDUojXfe6Q+bVTVdYnVBsi6rAnIxhswNTgjBQnyxt CzOjlFI/YqrwrR/TmfQQX/JACg7XjCCJIyF+KkCFJZ8NUpmy+enpfNSOQp0OU/SPRfR3 UupQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059404; x=1786664204; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=VAfqOqpweyKvsFpq/agEYC9CEWnfcmlui4k8L8ZR5pE=; b=efZhXIgNztElBGIKvdBiKm/mjQ2vwXR0jNdsRo6WEDWdgYWxo9gU1fY13N0qC+T1Uq VE6n82cq1Ja9abh6LH5acbwalFHAoTaCUD9TSDSKZq1kGGoukpqxfUqEOtpbhrxE1qMe VEKLfyuX1yaVYoayKcZii/8phEUabr34y/PuEJdI/gGpDDwoCT8YyckgywyaRxfKpXUm qGR/xdzUfSokggb6A86UQBgg8+SiGxCaQk3KKjaLIQBPOZDICkr6RBIp/8uMvASJDuKb AmNlZMi0J+K/uQaNs56zwPDYyrlugAtW4R85j/mD5VAA68jFymTs9AgWG90QgqPGBNcA 0rzw== X-Forwarded-Encrypted: i=1; AHgh+RpivuHlSSf20kRhU3M+bnQOMlUODnjC9rJ8dU5Zrc2xVC1YYG53R1QcfAuIMKptHcmF/HBrZTCcLvrkpYE=@vger.kernel.org X-Gm-Message-State: AOJu0Yw09WT/OvQ67ZDkh1vSRCzm94Yj0KsPzH//owwwsZRSs/NogS3c rHWy7YYBzwCWsSn/JKH4Ma4cUb69JE4ZfzpUHKpaafQO1cP4waBjoZ0PrvVFaK7woZjCv5efiHW jmK8Ysw== X-Received: from pjbcu4.prod.google.com ([2002:a17:90a:fa84:b0:381:7fb0:5a60]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:288b:b0:38e:8300:af51 with SMTP id 98e67ed59e1d1-3903c54d040mr19813478a91.8.1786059403683; Thu, 06 Aug 2026 16:36:43 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:33 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-17-seanjc@google.com> Subject: [PATCH v6 16/51] x86/tsc: Rename pit_hpet_ptimer_calibrate_cpu() => native_calibrate_cpu_late() From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Rename the late CPU calibration routine so that its relationship to the early routine is more obvious and intuitive. No functional change intended. Signed-off-by: Sean Christopherson --- arch/x86/kernel/tsc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 1d41ef1db27c..dd9e04e325d6 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -752,7 +752,7 @@ static unsigned long cpu_khz_from_cpuid(void) * calibrate cpu using pit, hpet, and ptimer methods. They are available * later in boot after acpi is initialized. */ -static unsigned long pit_hpet_ptimer_calibrate_cpu(void) +static unsigned long native_calibrate_cpu_late(void) { u64 tsc1, tsc2, delta, ref1, ref2; unsigned long tsc_pit_min =3D ULONG_MAX, tsc_ref_min =3D ULONG_MAX; @@ -927,7 +927,7 @@ static unsigned long native_calibrate_cpu(void) unsigned long tsc_freq =3D native_calibrate_cpu_early(); =20 if (!tsc_freq) - tsc_freq =3D pit_hpet_ptimer_calibrate_cpu(); + tsc_freq =3D native_calibrate_cpu_late(); =20 return tsc_freq; } @@ -1472,7 +1472,7 @@ static bool __init determine_cpu_tsc_frequencies(bool= early, else tsc_khz =3D native_calibrate_tsc(); } else { - cpu_khz =3D pit_hpet_ptimer_calibrate_cpu(); + cpu_khz =3D native_calibrate_cpu_late(); } =20 /* --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 31A304C77CB for ; Thu, 6 Aug 2026 23:36:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.199 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059408; cv=none; b=PFeMNnlVaHrz1c76Wn9TOenDW/jH8e/m6Ee9J8oQiPqTYDBQ1wlPxE+mEtyTOPHUdfUvm42zuTVwuORjVNayPUfrLYzpDWGw8Mla6CEfeUZ8ob6Ya6gGbpSGz+/nN1tKYmdn/93WK56y3veCWX/P4UJylAqpDXuByatEFXf6GtA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059408; c=relaxed/simple; bh=zUwj/tUghTiTEVoKSWMsQNbnRAFLb6fHDZIqhxq4ECM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=uuECdd9XNx8+559nZb/X8mFalesi0kdSxWXiubAPKp088cG3AcGKOpoBK924S25mVPkLu3VL6m0F+OdFDmQsSRmcs8SQT2y8iM25a6nXS3c54gmLdmDNXrx2hgU4rYPdY/rqdOb9/ALOUMgXYnuzOMrafvLUFhx9da+NX7W3i9Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=QOGCG0tu; arc=none smtp.client-ip=209.85.214.199 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="QOGCG0tu" Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2cea6a46766so46521955ad.0 for ; Thu, 06 Aug 2026 16:36:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059405; x=1786664205; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=as+YzjPRM0DAZztxhbx3Raa/ax9+dW0ZzZ4Dw8q0B68=; b=QOGCG0tu18x7UqhQoq1sTMznk6mLlwZxmrn25kI8bEQeaG+rcZAQfVqGtCQLmPJ1Ng PbVxhpEyFQf1Tt5Zd1HTSNTJtlx5oBdidjECPfcZPBpNhGFhkUL2OYveXfIt3ciRE+bJ SznTi/Y5UaBJ8LuoeC90gWrqyy2kk4xwJIH31gKxFaRO2XBQ7/FV2nL5uvRvxCM/sT61 dFyWn/ZIg4wbGWaLo4wzuUB3GuV1cBCwbt4ol25c9nD9GlsYZm071zNhKl2LatVK6rS+ Ic5MAksOk+nRjSJK8EsovnvRkzqJs47qe6U9XEdTa7kH9bZJDv7v8o87HqJqArWbciL2 pCGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059405; x=1786664205; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=as+YzjPRM0DAZztxhbx3Raa/ax9+dW0ZzZ4Dw8q0B68=; b=Qlm+a0GDkESy3uS0lWsFIz/ukNuvgRAaaTHb2vmAwdgIITmQ1sPG9UKkveFWnbxjPc g+NxQx/HN8Z92gU0jdkP+bjBYnMQ5VbZyMxReL0+Jn8U6fiikH7o2G+byzXntsiXiObK HVNfxPbCBmV3TCxtBP4h4mWPTWlM0C0v4bFZ5XtrCmCJIqWdhi04K5c5gNiEBooy0rod uVBxCPoVeJkw6+WzKrXJ/2VYMQ1QdDRdvtKvqlq0HHs/Mtbwxdj6Q4vThM8yTqQd9Gzf mHwPO0+nr3tC6lm7Dafmg3D9hEpfZ2ESzvt6Xghlo4waJRsKWzFL/3tW4hY4X2Ej/vB6 wX/Q== X-Forwarded-Encrypted: i=1; AHgh+Rrvl4cUr0BPHzv7RQkninEEOiR8nUCAr0nfluZuiBCkqcPRGcNhS9xSw6jBCTuQoV8fr8ZvB+E0qUMC46o=@vger.kernel.org X-Gm-Message-State: AOJu0YzxIPvzvCP/8wapd9fc9UeOnI7+I7nAoMvUc0WWY+LERiJ97tQs IQYMbbAWju6IzZ8kV3PI71Io4PdLKcjCt+kOU0at4ZVDGxfz+wHew4Fyqg1x/kSJglxxWUULcA5 NAMOYPA== X-Received: from plblh12.prod.google.com ([2002:a17:903:290c:b0:2cf:277e:c60c]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:f708:b0:2ba:6518:a6d4 with SMTP id d9443c01a7336-2d0ca9624bdmr224800085ad.20.1786059405010; Thu, 06 Aug 2026 16:36:45 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:34 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-18-seanjc@google.com> Subject: [PATCH v6 17/51] x86/tsc: Fold native_calibrate_cpu() into recalibrate_cpu_khz() From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Fold the guts of native_calibrate_cpu() into its sole remaining caller, recalibrate_cpu_khz() to eliminate the extra SMP=3Dn #ifdef, and so that it= 's more obvious that directly invoking the early vs. late calibration routines in determine_cpu_tsc_frequencies() is intentional. No functional change intended. Signed-off-by: Sean Christopherson Reviewed-by: David Woodhouse --- arch/x86/kernel/tsc.c | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index dd9e04e325d6..d95e4f059f17 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -918,21 +918,6 @@ static unsigned long native_calibrate_cpu_early(void) return fast_calibrate; } =20 -#ifndef CONFIG_SMP -/** - * native_calibrate_cpu - calibrate the cpu - */ -static unsigned long native_calibrate_cpu(void) -{ - unsigned long tsc_freq =3D native_calibrate_cpu_early(); - - if (!tsc_freq) - tsc_freq =3D native_calibrate_cpu_late(); - - return tsc_freq; -} -#endif - void recalibrate_cpu_khz(void) { #ifndef CONFIG_SMP @@ -944,7 +929,9 @@ void recalibrate_cpu_khz(void) if (WARN_ON_ONCE(cpu_feature_enabled(X86_FEATURE_TSC_KNOWN_FREQ))) return; =20 - cpu_khz =3D native_calibrate_cpu(); + cpu_khz =3D native_calibrate_cpu_early(); + if (!cpu_khz) + cpu_khz =3D native_calibrate_cpu_late(); tsc_khz =3D native_calibrate_tsc(); if (tsc_khz =3D=3D 0) tsc_khz =3D cpu_khz; --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pf1-f197.google.com (mail-pf1-f197.google.com [209.85.210.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 78DE549DD51 for ; Thu, 6 Aug 2026 23:36:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059409; cv=none; b=Hv+EwpbfOQwrCXMIsXRllk/C8E/VDq9F+wMWEn2KZNpDvS0AtzDuMVrn0WZ1aVJjBnpw1Ngzwj8fTeLE5EhbKYcbsrs4II324436oD3KS3L/GtUPPxFGI6V5HFkaChL70FzYUZ+gkOWvH2npXRBYzpc4iBGml2w3cp6UH9QzJGE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059409; c=relaxed/simple; bh=1uALf830n7JEUnTGzELSb3OUZCMrXoPiNs3kWl6RzcI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=h4oNKxQsYA5HxALo/RolCJXbLgRqN78MgpRhmCwjvanhX9uZrJ2hknn5gT68Sh52Z8I999MerFXP5G0XIhPI3hHXi73GrGWtt8luqWKwTigKvZSMKbNIMAHLmjJFBZtWdEqoF6UXnjwHIBEyfbqvwfwAhNo9HX2GM4+Eow0vwaI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=XgKTSrG/; arc=none smtp.client-ip=209.85.210.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="XgKTSrG/" Received: by mail-pf1-f197.google.com with SMTP id d2e1a72fcca58-84f0d3ab2f4so2321030b3a.1 for ; Thu, 06 Aug 2026 16:36:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059406; x=1786664206; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=bafmbn4x7WGy8QY/EzYypINgs3wQBC6UPHmanD+knFs=; b=XgKTSrG/75sOzeYYPf1MfnDvKkv8+u60mgM3NzQ73LgLSbp2LusOilCrIuic32Wpbf 95YNJLs4/euEYKf0UNw7pgr0v6g0xVnAGN2A7w4bjCG3fpFDD4IVgfOwA4tvrL6Xc2VY s7qD8+SgBmLaOqwK7E9iSeKEhDk0hh1R9Z8FnRVIKQlN3MDKIoSyvnnld2BjgIVGbnaA TDNSyo7mnEzFEHf/M8USZRSXLcFoXUfL4T18kH9nsk5bw0RMG495Sbzjpep+mm0CgHWr FybDSczkcFW617slxvRhI3ilwfaeP0xxF4UO1AW3uUCd4pOvlM26Fyo6ZEzOYrU6GVlZ /yww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059406; x=1786664206; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=bafmbn4x7WGy8QY/EzYypINgs3wQBC6UPHmanD+knFs=; b=DHI+kO5QZt6CrEzh9JESD0bYX5DihqyiBNO41rOE/i68Ymcnr5pivXqxTr6iC45fhW scnAFTumg1efKt4exYXKJ+tCvtsUoKtXWukXew08J+Yo5xAfmS9BsQbiFUOM9Dc5c+lQ zzhWMWANKkU5DDOqq5F2Q0fwVQpa0UDBZb/aQvj4MxoAvgZzI7t9nVZTZ2gxQAYu0pql ezvTvhcFDFa3p8/iVFYnp7SRbV+m0iMzLeobKJRhsC25YzBDrQ58r3cu+rtBNjEmCrEh ggZ4jJnf7+ripl3dDxS98RRsTzOeovAFFq1zL7bn5W+ovwOOi0rio96h75A7sudV42TT yCvQ== X-Forwarded-Encrypted: i=1; AHgh+RpbVSIOmf03mDR30vzspCrOhgIjIrpVQvhgs3z/BVxlhgF3NzZrSZ/fd3DMBqo+j49nuZlEzY8s32XKW40=@vger.kernel.org X-Gm-Message-State: AOJu0YyZEbG5RGFn6LEboXLncpMn8v9usFs8E7Fvia8g3bzBdKloL9sS mHw1xNiVSsrHDY7hMlaqu7gs3uhXctJfgWes4fe+4diA9QBQosPl2dyo99KepLEJ756rqe7Uy8X GOTKiBQ== X-Received: from pfks7.prod.google.com ([2002:a05:6a00:1947:b0:84e:2400:dc7d]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:409b:b0:842:5b63:6112 with SMTP id d2e1a72fcca58-84f2e12d036mr22581852b3a.32.1786059406261; Thu, 06 Aug 2026 16:36:46 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:35 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-19-seanjc@google.com> Subject: [PATCH v6 18/51] x86/kvmclock: Rename kvm_get_tsc_khz() to kvmclock_get_tsc_khz() From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Rename kvm_get_tsc_khz() to kvmclock_get_tsc_khz() in anticipation of adding support for getting TSC info from PV CPUID, i.e. in a KVM specific way, but without non-kvmclock. No functional change intended. Signed-off-by: Sean Christopherson --- arch/x86/kernel/kvmclock.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index 35a879d33e9e..061a22d31dea 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -136,7 +136,7 @@ static inline void kvm_sched_clock_init(bool stable) * poll of guests can be running and trouble each other. So we preset * lpj here */ -static unsigned int __init kvm_get_tsc_khz(void) +static unsigned int __init kvmclock_get_tsc_khz(void) { return pvclock_tsc_khz(this_cpu_pvti()); } @@ -146,7 +146,7 @@ static void __init kvm_get_preset_lpj(void) unsigned long khz; u64 lpj; =20 - khz =3D kvm_get_tsc_khz(); + khz =3D kvmclock_get_tsc_khz(); =20 lpj =3D ((u64)khz * 1000); do_div(lpj, HZ); @@ -342,8 +342,8 @@ void __init kvmclock_init(void) flags =3D pvclock_read_flags(&hv_clock_boot[0].pvti); kvm_sched_clock_init(flags & PVCLOCK_TSC_STABLE_BIT); =20 - x86_init.hyper.get_tsc_khz =3D kvm_get_tsc_khz; - x86_init.hyper.get_cpu_khz =3D kvm_get_tsc_khz; + x86_init.hyper.get_tsc_khz =3D kvmclock_get_tsc_khz; + x86_init.hyper.get_cpu_khz =3D kvmclock_get_tsc_khz; x86_platform.get_wallclock =3D kvm_get_wallclock; x86_platform.set_wallclock =3D kvm_set_wallclock; #ifdef CONFIG_X86_LOCAL_APIC --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 560F549EF3D for ; Thu, 6 Aug 2026 23:36:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059412; cv=none; b=R5qmr2tuLHREB1AwOC7thOZ6IU+lVyeHtYcsS1YCY1ZvraSdXcRPNJI3xqGhcIf/5UlQKxaFSNc94T8SahUwp4sDmKniiZUKbHfivDjNHOvffje65U6zaT9a6mWjKCVAS2S+Yw8I6QAdAAWUzdvx3jGc7IK0AyUI2qhcBOf4S+s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059412; c=relaxed/simple; bh=hNEb8xDuzhPNI6tvifSOafJznm7WdTSs3VtHjZgwixU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=ry3eh55viecaYP92+BqWyNiRUjA/A83Rih2ICLj9672k5jaqS7UQ08zIz2ckMyRzPaB+qnHI77xfvEIVC1uN/SezbHkp22vpTqKTmeHXszJ9V8BeAdQeL+PMThNEOsDXOL5Jyy8hAGnIOgNnYGk0CmgnTdGU3xQS38oRXncJgcY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=f+3SeEuU; arc=none smtp.client-ip=209.85.210.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="f+3SeEuU" Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-84865f326efso3250050b3a.0 for ; Thu, 06 Aug 2026 16:36:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059408; x=1786664208; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=kOFXKheX158XT5RdBZeZqj6PvfchU0LO18FYNMDj3A4=; b=f+3SeEuUGZdqvkJjB9P3mmwyxZKY+8jTQ75eC5gRfXo5VFDqyWPUUbActIjpbMK7lu eAIYwqBShq2vBgslCjqWJm5zK7Vm+oYipUj+jrx1noqLVD2Edre+FmHUadEg3vwPK0M7 ubbB+mhlOfLb2FX/RvPE7Ivcyhlo+b2ZMoJYjZFb/OrbcDhOPJH2gUGRNHvIiL1kuJyz xbf3xE4Uwvq4yW1J8leN2Fkmuv3QyB8tbIX3owrNpuyc/pFDYFwQQscX5Z2ORP0YQbZg ZgqEyI/fLeH9E7b5up4xftpUn8pxWBgAjK58vMyPudlHA1FaRwoBMnKfnuvj61nTUvcX TgIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059408; x=1786664208; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=kOFXKheX158XT5RdBZeZqj6PvfchU0LO18FYNMDj3A4=; b=qrM4HgevhDWc6oqs2Xxk0PHp3ubMBro0CgYCoVgSJilz33q3ywYCFoRGqHYaeqaPC2 Xgq6gdUu3O2dwuYqaJu/LhuZPndMQ4HmwE42zZAPIvCU8PwbNb5Q20gmpKKR2VKN107w aOLhxw2myk4CDDZFP2zXEr6SMc/r9BT1kJ2I6ym5dmFuwDgGeGqh7faruGYm7M8QSgTH qRbU+8hyxY0CGXekJUNBEkpDEY2dsmWmN5Ga6z4oB+2c0MNnzdn9nCXBIJ3vjZNsP1KP R1q4+Fe3Un294kAyQa2ZThFL8RR5m6Y09NBJh+EuqFv1GAvgsYGUmv/hZL+sjcD8qgQH QP6Q== X-Forwarded-Encrypted: i=1; AHgh+RosY4zUuVw471SR8dggBQUPSFhQkhDsJ2QG9QAXLwVxIBs3Npm6yXmOV+abUn31Bruj+VO1g6aTbeABcwU=@vger.kernel.org X-Gm-Message-State: AOJu0YxYnvrhgdRNxYKWn8mpzBLnphn9DHb+LcSVZImZy8gHdJev8Om8 8hOs6OlStw3mvSJ+kToxlge8cZPhEfsEqlPBRq90qq8TwGVqJ23G30mIuZFVPtaUFHrJCdEK7dc BT4yCeg== X-Received: from pgay6.prod.google.com ([2002:a05:6a02:4966:b0:cbb:8616:5536]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:3d4f:b0:847:9188:e492 with SMTP id d2e1a72fcca58-84f2e04d173mr18898130b3a.22.1786059408172; Thu, 06 Aug 2026 16:36:48 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:36 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-20-seanjc@google.com> Subject: [PATCH v6 19/51] x86/kvmclock: Drop dead check on TSC being unstable during kvmclock_init() From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" As pointed out by Sashiko[*], kvmclock_init() runs before __setup() and thus before notsc_setup() or tsc_setup() can mark the TSC unstable. kvmclock_init() also runs well before tsc_init(), and even before tsc_early_init(). Simply delete the check, as it's been dead code since it was introduced. Note, odds are good the check_tsc_unstable() call was copied from Xen's xen_time_init()+xen_tsc_safe_clocksource() logic (as so much of KVM's PV code was). However, xen_time_init() runs via x86_init.timers.timer_init(), which is invoke from x86_late_time_init(), and thus after params have been parsed. Alternatively, kvmclock could register itself later on, or tsc_setup() could be parsed as an early param. Given that there's zero evidence there was any meaningful intent or need to actually check for an unstable TSC, go with the simplest option. Fixes: 7539b174aef4 ("x86: kvmguest: use TSC clocksource if invariant TSC i= s exposed") Link: https://lore.kernel.org/all/20260529181213.0B27A1F00893@smtp.kernel.o= rg [*] Signed-off-by: Sean Christopherson Reviewed-by: David Woodhouse --- arch/x86/kernel/kvmclock.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index 061a22d31dea..29ca37e9a3bc 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -362,8 +362,7 @@ void __init kvmclock_init(void) * */ if (boot_cpu_has(X86_FEATURE_CONSTANT_TSC) && - boot_cpu_has(X86_FEATURE_NONSTOP_TSC) && - !check_tsc_unstable()) + boot_cpu_has(X86_FEATURE_NONSTOP_TSC)) kvm_clock.rating =3D 299; =20 clocksource_register_hz(&kvm_clock, NSEC_PER_SEC); --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pj1-f72.google.com (mail-pj1-f72.google.com [209.85.216.72]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7CCDA4A09F4 for ; Thu, 6 Aug 2026 23:36:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.72 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059413; cv=none; b=F3y5/faHJJZuwwfMhA+Ir3aRlz2/Ud7g0h5SgBXzNUJ+FqU9jvXSwU2vgNBLTf8HwHiZmeNx3LHCM2zNzhK1VG1XIZ3PSEwOp8/3NADB4WgICMaToDaLJwyOInVGFtP4jHUnOtF7YMgaia3dtDZSnms7hmd2rFn4Sg25QKKZAuc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059413; c=relaxed/simple; bh=YuCMxhXTIsqx6zpcODEUb6qXKu+EziAmx+3M3LR9+3o=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=UVAYHVBXRvKHxF075Bd1PPAa9hDJCPD2+3km71kd/Lps1lG+637RNXHZ2GA1QLIisY7awDsnIAV+qj2tqOs18rBIJNDGJQeo7EF2diEXpLuA5t3SwhOghwqJ1hYGnCnx50o6bkXz6fUYxIz8Z+f09mY3Sbyms4EVEkhmjmmdIy0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=ffcw/IHb; arc=none smtp.client-ip=209.85.216.72 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ffcw/IHb" Received: by mail-pj1-f72.google.com with SMTP id 98e67ed59e1d1-38e4758ab46so3232417a91.0 for ; Thu, 06 Aug 2026 16:36:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059410; x=1786664210; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=eYIjdKzjgH3nVD0iNsx5sVBVp8XFdFFsnkR62+s/p+Q=; b=ffcw/IHb9JNHii8DAVND3kK4sXHRWcLf2Ymt82lp6bZ5WK+ETX/RsDZ0CZ3I2qbuZY U1nqKPfb3iBjUP46P5s0MvXZnFCObTSMshm5O/wE/OG0okGLv3VLxTF1lJviTG11Jz2l jxOfDJ6eD9N7VD5FuAb0ENAYbPXxZZWoi7SRQRneBfP4dKS7zEnfiDNz8yumuvRgWtNF Yi3El0FMjQLWpFdPbkVwuz5zq4uIRPv4yMk+r4AEV3mXuR22JMXn3ocP+3GBPpsop7/v h2F1nkdCTMs5TC7tDwn2LuWbldls9jKOmAs2Z6G9MUo/yQnp6abVLjmgJWLSTT5KtwMW lfaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059410; x=1786664210; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=eYIjdKzjgH3nVD0iNsx5sVBVp8XFdFFsnkR62+s/p+Q=; b=W7RdbixEpEfQ+3czf1upngBEp9PxENrdbPhe/lEBNyvjEKmHD5ZqbXsJg9ELRCxWro AP9Rl4lWkuskA+K6b0gA6CpH5SMfOaSYdkAbxOSPgocWx6TrB+GRWQSP5Yhx5bRTe3zl 29/yWjwX11jrEACfwFNYk7hdGDAbbCj5eJs/acoqwiSBwDm9P+RlfzWHnDsjkzF7vkxR J8PsEi5JdKMvf/aCc9ThyThx6ChhgTEjYEOmIoW1JGB3rtx0xryN7h4vWSv+MO0g/W9O X9hmKxkJQOYNR6TqZM4Xik+RQUy6BcyNPXMEGTosusJvw2zwGjcdgoNCrUMmuO/baZDX CWaQ== X-Forwarded-Encrypted: i=1; AHgh+RoEnSzG2xHwnkDgq3JNL9shfe7aF/yKhRqwMvGijuur7Di5r+yMUBNTn1sk5tsRrIx7i8qJxzAerwAZ8JQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzruyczWyuSDRFlBFZjysvR8wmnZ3xg/no1WEN/Oj0i5TLghYHR Sd16gCfb+ZC6vcPPWk9zathskZn1jzpUsS3qkWQuLDp0ZOLKBlw9xbwwAgXOB9iDAmwZ7aGLY4e 3gpxUzA== X-Received: from pjji3.prod.google.com ([2002:a17:90a:6503:b0:381:224:393a]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90a:c106:b0:38e:250b:122f with SMTP id 98e67ed59e1d1-3909d8d5993mr5453558a91.16.1786059409368; Thu, 06 Aug 2026 16:36:49 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:37 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-21-seanjc@google.com> Subject: [PATCH v6 20/51] KVM: x86: Officially define CPUID 0x40000010 as PV Timing Info (TSC and Bus) From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: David Woodhouse Formally define and document CPUID 0x40000010 as providing TSC and local APIC bus frequency information for KVM's PV CPUID range. Way back in 2008, VMware proposed (https://lkml.org/lkml/2008/10/1/246) carving out a range of CPUID leaves for use by hypervisors. While the broader proposal from VMware was mostly shot down in flames, use of CPUID 0x40000010 to provide TSC and local APIC bus frequency information survived and made it's way into multiple guest operating systems. XNU unconditionally assumes CPUID 0x40000010 contains the frequency information, if it's present on any hypervisor: https://github.com/apple/darwin-xnu/blob/main/osfmk/i386/cpuid.c As does FreeBSD: https://github.com/freebsd/freebsd-src/commit/4a432614f68 More importantly, QEMU (the de facto "reference" VMM for KVM) has conditionally provided timing information in CPUID 0x40000010 for almost 9 years, since commit 9954a1582e ("x86-KVM: Supply TSC and APIC clock rates to guest like VMWare"). So at this point it would be daft for KVM (or any hypervisor) to expose 0x40000010 for any *other* content. Officially carve out and define the CPUID leaf so that Linux-as-a-guest can follow suit and pull TSC and Local APIC Bus frequency information from CPUID. Defer providing userspace with the necessary information needed to precisely and accurately enumerate the _actual_ configured TSC frequency to the guest (that exact information, along with the scaled ratio, isn't exposed to userspace). As evidenced by QEMU, providing CPUID 0x40000010 without help from KVM is entirely possible, just not ideal. Link: https://lore.kernel.org/all/ea0d7f43d910cee9600b254e303f468722fa355b.= camel@infradead.org Signed-off-by: David Woodhouse [sean: drop KVM filling of CPUID, add documentation, massage changelog] Signed-off-by: Sean Christopherson --- Documentation/virt/kvm/x86/cpuid.rst | 12 ++++++++++++ arch/x86/include/uapi/asm/kvm_para.h | 11 +++++++++++ 2 files changed, 23 insertions(+) diff --git a/Documentation/virt/kvm/x86/cpuid.rst b/Documentation/virt/kvm/= x86/cpuid.rst index bda3e3e737d7..a5ee8ff052ce 100644 --- a/Documentation/virt/kvm/x86/cpuid.rst +++ b/Documentation/virt/kvm/x86/cpuid.rst @@ -122,3 +122,15 @@ KVM_HINTS_REALTIME 0 guest checks this feat= ure bit to preempted for an unlimited time allowing optimizations =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +function: KVM_CPUID_TIMING_INFO (0x40000010) + +returns:: + + eax =3D (Virtual) TSC frequency in kHz + ebx =3D (Virtual) Bus (local APIC timer) frequency in kHz + ecx =3D 0 (Reserved) + edx =3D 0 (Reserved) + +Note, KVM only defines the semantics of KVM_CPUID_TIMING_INFO; KVM does NOT +advertise support via KVM_GET_SUPPORTED_CPUID. diff --git a/arch/x86/include/uapi/asm/kvm_para.h b/arch/x86/include/uapi/a= sm/kvm_para.h index a1efa7907a0b..c3a384711f3a 100644 --- a/arch/x86/include/uapi/asm/kvm_para.h +++ b/arch/x86/include/uapi/asm/kvm_para.h @@ -44,6 +44,17 @@ */ #define KVM_FEATURE_CLOCKSOURCE_STABLE_BIT 24 =20 +/* + * The timing information leaf provides TSC and local APIC timer frequency + * information to the guest. Note, userspace is responsible for filling t= he + * leaf with the correct information. + * + * # EAX: (Virtual) TSC frequency in kHz. + * # EBX: (Virtual) Bus (local APIC timer) frequency in kHz. + * # ECX, EDX: Reserved (must be zero). + */ +#define KVM_CPUID_TIMING_INFO 0x40000010 + #define MSR_KVM_WALL_CLOCK 0x11 #define MSR_KVM_SYSTEM_TIME 0x12 =20 --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 617B74A0A18 for ; Thu, 6 Aug 2026 23:36:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059413; cv=none; b=GolGcT41zdapm8b/+pVGI32gcr+Kwt6USv/DxeakB5KBT2OQ4MOwTxMqJGHOFbBPthPt32LYMjjVou2DNbT3IrhKvzeFTRWpihRjVRORjMSCGvvLmWqVsPXcdFJFTw9lZMGOFRkq+MuP8c0mJgSvNxtC8ksccPPQMZq87AZC6Z4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059413; c=relaxed/simple; bh=vnLOYKuncVcjJxpKnUglkawzKiqOPtPepUlhfI+oXJw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=H0AiQmQoeb09lCGBx/rH5g2+R4B8EWrTHxBYwzRftho7CO4y9wtdtkPOJkaB5Ay26+8rGK1Zr8BP2IwExiaAAI97ErllIAxkh+ceUQU4S7y/knaLCr9vScsiPgfkL5oskajQ+kOfMRB6fuObOarYntiRDSzBBYuBLubfrMSCqn8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=eSOXk4B0; arc=none smtp.client-ip=209.85.210.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="eSOXk4B0" Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-84e024d2129so4668691b3a.2 for ; Thu, 06 Aug 2026 16:36:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059411; x=1786664211; darn=vger.kernel.org; h=content-transfer-encoding:content-type:cc:to:from:subject :message-id:references:mime-version:in-reply-to:date:reply-to:from :to:cc:subject:date:message-id:reply-to:content-type; bh=GbCVidvwQkuTYRlTXFKmfz6LBshlnXLBUNEqveo1L6E=; b=eSOXk4B09bZCFqZhXx/ZPuulmbDjWfK21C2oA2Y0W6NrDxiiIGZOAIMi0EBcXHoT8L wnxgW9heZaCz1exGIW+ehcAgi0UeGBNHiM+u7ysYIaU+VfNmBtd317M4b2IsNFdhHAaS KS0kmc2IglsxyQkredbefbgIpf6Sx3sJq+uZ9k28xzIKOQzhaEEIC5WfkZEllOVEqmPT M/RCyf0nkhaGNHzex/QuVM7d50M0PzI27EmxZLwn7ziLj655ByOa6iUkfk77PJpuwkip 0gRopjK8GfPvu4BgLQJ0zU35CfvVoQNlGmY3MZq9m8ly/SE7L+c9x15bffv8f038Ah4m Xhug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059411; x=1786664211; h=content-transfer-encoding:content-type:cc:to:from:subject :message-id:references:mime-version:in-reply-to:date:reply-to :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=GbCVidvwQkuTYRlTXFKmfz6LBshlnXLBUNEqveo1L6E=; b=NhkPV6V/7ecQebVvKciimsn8t1FSi1k2wsAyybX1R+E5v2GznVX9PwkRGg06mQRlC0 esqpqeoPIYXbnO0aiL20LAiSa8d/V3pDc2EvTiLdG5yK6r97y6U9axIx9YV5eI3DgK3d grKfhmneNYKf1XLn7709bQHNJmqQtgkJNPGt/J+57u553y+zGeCRaJQ80eR9NyETkgIr JNOK3b0bUGXvLfPVa4URzYtf6U+bQLmv0VEejCqo3wZNuuhqAbEUL6J8xBkwD+lAkUDU 40P2pT4vX4BicwCWHcdnMxBpVeqYagQKUx8GBoQLIze01MPJcLyTMHmGYRyhpJPqxrd4 x6hA== X-Forwarded-Encrypted: i=1; AHgh+RrKnestloielRIc5JRZuSzgWb9TBGT6dPaLVTUNc5At+2cjth1F5cDSeMKRGQODv/LenoNbSBYzgDcaCys=@vger.kernel.org X-Gm-Message-State: AOJu0YwUi6bfEqfoBSSOKc+oBJ996xEuE6tBOJ6DzpIVMuAKqEZL+nBX 8uKHuVbOVcj2hAFING6i0o5HnYQ9NkIHGwDUYPrl5cnuDiym/fQk2uM6FIIGnvcVkZDKM1OSgTY xvajbGw== X-Received: from pfbll6.prod.google.com ([2002:a05:6a00:7286:b0:84e:a25:1e6b]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:3a12:b0:848:354f:4f8f with SMTP id d2e1a72fcca58-84f2dff3015mr20822585b3a.22.1786059410525; Thu, 06 Aug 2026 16:36:50 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:38 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-22-seanjc@google.com> Subject: [PATCH v6 21/51] x86/kvm: Obtain TSC frequency from PV CPUID if present From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: David Woodhouse In https://lkml.org/lkml/2008/10/1/246 a proposal was made for generic CPUID conventions across hypervisors. It was mostly shot down in flames, but the leaf at 0x40000010 containing timing information didn't die. It's used by XNU and FreeBSD guests under all hypervisors=C2=B9=C2=B2 to de= termine the TSC frequency, and also exposed by the EC2 Nitro hypervisor (as well as, presumably, VMware). FreeBSD's Bhyve is probably just about to start exposing it too. Use it under KVM to obtain the TSC frequency more accurately, instead of reverse-calculating the frequency from the mul/shift values in the KVM clock. Use the information to get the CPU frequency as well (kvmclock feeds in kvm_get_tsc_khz() for both TSC and CPU calibration), as the info from CPUID is superior in every way; whether or not kvmclock should be overriding CPU calibration in the first place is an entirely different question. Use the info from CPUID even if the user explicitly disables kvmclock, or if it's unsupported. The PV CPUID leaf has no dependency on kvmclock, and is in fact more useful if kvmclock is disabled since the kernel won't be able to use kvmclock to derive a derive the TSC frequency. Before: [ 0.000020] tsc: Detected 2900.014 MHz processor After: [ 0.000020] tsc: Detected 2900.015 MHz processor $ cpuid -1 -l 0x40000010 CPU: hypervisor generic timing information (0x40000010): TSC frequency (Hz) =3D 2900015 bus frequency (Hz) =3D 1000000 Note! *Independently* query for non-null get_{cpu,tsc}_khz() overrides so that kvmclock doesn't clobber x86_init.hyper.get_cpu_khz() if/when KVM adds support for getting the CPU frequency separately from the TSC frequency. =C2=B9 https://github.com/apple/darwin-xnu/blob/main/osfmk/i386/cpuid.c =C2=B2 https://github.com/freebsd/freebsd-src/commit/4a432614f68 Signed-off-by: David Woodhouse Co-developed-by: Sean Christopherson Signed-off-by: Sean Christopherson --- arch/x86/kernel/kvm.c | 33 +++++++++++++++++++++++++++++++++ arch/x86/kernel/kvmclock.c | 6 ++++-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index 5b554e480c0e..8ed02f4f5775 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -49,6 +49,8 @@ #include #include =20 +static unsigned int kvm_tsc_khz_cpuid __initdata; + DEFINE_STATIC_KEY_FALSE_RO(kvm_async_pf_enabled); =20 static int kvmapf =3D 1; @@ -913,6 +915,21 @@ bool kvm_para_available(void) } EXPORT_SYMBOL_GPL(kvm_para_available); =20 +static u32 __init kvm_cpuid_timing_info_leaf(void) +{ + u32 base =3D kvm_cpuid_base(); + + if (!base || cpuid_eax(base) < (base | KVM_CPUID_TIMING_INFO)) + return 0; + + return base | KVM_CPUID_TIMING_INFO; +} + +static unsigned int __init kvm_get_tsc_khz(void) +{ + return kvm_tsc_khz_cpuid; +} + unsigned int kvm_arch_para_features(void) { return cpuid_eax(kvm_cpuid_base() | KVM_CPUID_FEATURES); @@ -962,6 +979,7 @@ static void __init kvm_init_platform(void) .mask_lo =3D (u32)(~(SZ_4G - tolud - 1)) | MTRR_PHYSMASK_V, .mask_hi =3D (BIT_ULL(boot_cpu_data.x86_phys_bits) - 1) >> 32, }; + u32 timing_info_leaf; =20 if (cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT) && kvm_para_has_feature(KVM_FEATURE_MIGRATION_CONTROL)) { @@ -1009,6 +1027,21 @@ static void __init kvm_init_platform(void) wrmsrq(MSR_KVM_MIGRATION_CONTROL, KVM_MIGRATION_READY); } + + /* + * If KVM advertises the frequency directly in CPUID, use that instead + * of reverse-calculating it from the KVM clock data, or worse, trying + * to calibratate the TSC using an emulated device. + */ + timing_info_leaf =3D kvm_cpuid_timing_info_leaf(); + if (timing_info_leaf) { + kvm_tsc_khz_cpuid =3D cpuid_eax(timing_info_leaf); + if (kvm_tsc_khz_cpuid) { + x86_init.hyper.get_tsc_khz =3D kvm_get_tsc_khz; + x86_init.hyper.get_cpu_khz =3D kvm_get_tsc_khz; + } + } + kvmclock_init(); x86_platform.apic_post_init =3D kvm_apic_init; =20 diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index 29ca37e9a3bc..f55d0305d1f3 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -342,8 +342,10 @@ void __init kvmclock_init(void) flags =3D pvclock_read_flags(&hv_clock_boot[0].pvti); kvm_sched_clock_init(flags & PVCLOCK_TSC_STABLE_BIT); =20 - x86_init.hyper.get_tsc_khz =3D kvmclock_get_tsc_khz; - x86_init.hyper.get_cpu_khz =3D kvmclock_get_tsc_khz; + if (!x86_init.hyper.get_tsc_khz) + x86_init.hyper.get_tsc_khz =3D kvmclock_get_tsc_khz; + if (!x86_init.hyper.get_cpu_khz) + x86_init.hyper.get_cpu_khz =3D kvmclock_get_tsc_khz; x86_platform.get_wallclock =3D kvm_get_wallclock; x86_platform.set_wallclock =3D kvm_set_wallclock; #ifdef CONFIG_X86_LOCAL_APIC --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 98F8A4A1C8A for ; Thu, 6 Aug 2026 23:36:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.71 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059414; cv=none; b=PhTIi5inubQ/Y6riO1G2tMQQI5JeGU/31Zu0Sg+ll03muNzylAuQN7OGJXWDRoriCVAYe62XUZ33L+le7JQaFGC2C5rVE06TvvBl2HXBySv1rZxs1uF4MBsKe3JzVJ2yYWUP+nife8PSKcOEXLKshJVx29pN7RrnQo9p9le7sUM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059414; c=relaxed/simple; bh=d2IlR+xJ3s7i3winERsl12oMi29cZLvPJvIMStFX9r4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=gdDaHwgjEwxHKzTulSvDvCDhyGQ1vHBaM6lntzpBhhopvzhsDM2RaujePSwe/A5lmmj3uVh96RSRH2RuofrNjgYcrY2mjQQOj6DjMQMvW7kTX/QsrwfzXSbXHCg0RJeWIKGk8ECCm03A072xelG9ZbTNTsLHCWxxDBAbhiZMIEw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=UjrrmJnd; arc=none smtp.client-ip=209.85.216.71 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="UjrrmJnd" Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-38dd87656d3so3225320a91.2 for ; Thu, 06 Aug 2026 16:36:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059412; x=1786664212; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=9lHEbI53WDwynue0wsp+pOzdIE1KL/OlJm0qjHY+exI=; b=UjrrmJnd9Uijef/hKA9/UOVb6SMy4SyVgS7txhmL5jw294xFKfzyyBkcrkyKDrlFNT 2gmlvAO1++qzARZDZJRTzICZ6fJygfnzGoqWcfgfSwj13SJRDKpF/II7gsnOEwhmcuVP UGxhQE39Xa04ParOl7Vykt6GshHuWjpFzfAFOPdqE+5KQUYMnBTrP4qm4Fa6f1co8+Yi 8swm2Zq5HZyy2ZUi/tLDyNbh07UnAwzXmti2OHcoYW7b1MTq+PzlUbjdBKJvv1S+lg2f jqiIr40gfYw2PxeJ4HG11eT1FpwalhltSQcQX6NQ+APByvsWQIXTVOJWcZs8kIHFs8j2 UGNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059412; x=1786664212; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=9lHEbI53WDwynue0wsp+pOzdIE1KL/OlJm0qjHY+exI=; b=iImpY8Pv4OiT/Nalns7JAqLV0aSyW25eZ2OYcww+b8Vf7zKHRoX8NlgeLrsbuk8jN4 gMnc+AFGvHjRphITJycxApZjAOguW3hYvAl0lidhC+QVLKNM37WJAz1n1Go714qabwlf V/ktjLwYs/C4QcSs7+kOTztXqKzUVzjeY9MDtTcWT1dpl7ucnpYtmZrJfm6BEPc1dU5P VL2Xyj5pfd2XtRUELcULbfOrpBdFQJ1IXyJO9Y+44ogFla64Z0YSEZTpdQJMfB8vBahT VxD/mLnMfJblVTdha0aQHBH0VIyXl6DcXtZrRsDZAs2mPGPmUbcH3yull28SpsLfyZiG GyFQ== X-Forwarded-Encrypted: i=1; AHgh+RqVeiX+bUvmAaI3J5u567m/9cRKY8HgP+fsiuVLuXzPNAcjKx46T8eDKYp7zi5vSvgnFzTYbywBjG5ijDo=@vger.kernel.org X-Gm-Message-State: AOJu0YxGevjdOUobQfJnLeNy9+eqmln1E4DSRPHKyZ3zE1Jg+zppv1ir 8Dx8nobwHeXOx494DkqyrvlSSE91KDLpt6bVqZdvIfxv2d+TF4Gpga+mKDz5yEGvWXkQAA5ODvK sDWafuw== X-Received: from plpn24.prod.google.com ([2002:a17:902:9698:b0:2cc:ae2b:c324]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:3d0d:b0:2d0:4021:bb6b with SMTP id d9443c01a7336-2d0ca15c87amr222771235ad.0.1786059411603; Thu, 06 Aug 2026 16:36:51 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:39 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-23-seanjc@google.com> Subject: [PATCH v6 22/51] x86/kvm: Mark TSC as reliable when it's constant and nonstop From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Mark the TSC as reliable if the hypervisor (KVM) has enumerated the TSC as constant and nonstop. Like most (all?) virtualization setups, any secondary clocksource that's used as a watchdog is guaranteed to be less reliable than a constant, nonstop TSC, as all clocksources the kernel uses as a watchdog are all but guaranteed to be emulated when running as a KVM guest. I.e. any observed discrepancies between the TSC and watchdog will be due to jitter in the watchdog. This is especially true for KVM, as the watchdog clocksource is usually emulated in host userspace, i.e. reading the clock incurs a roundtrip cost of thousands of cycles. Marking the TSC reliable addresses a flaw where the TSC will occasionally be marked unstable if the host is under moderate/heavy load. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_para.h | 2 +- arch/x86/kernel/kvm.c | 12 +++++++++++- arch/x86/kernel/kvmclock.c | 14 +++++--------- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/arch/x86/include/asm/kvm_para.h b/arch/x86/include/asm/kvm_par= a.h index 4a47c16e2df8..4a49fc286b4c 100644 --- a/arch/x86/include/asm/kvm_para.h +++ b/arch/x86/include/asm/kvm_para.h @@ -118,7 +118,7 @@ static inline long kvm_sev_hypercall3(unsigned int nr, = unsigned long p1, } =20 #ifdef CONFIG_KVM_GUEST -void kvmclock_init(void); +void kvmclock_init(bool prefer_tsc); void kvmclock_disable(void); bool kvm_para_available(void); unsigned int kvm_arch_para_features(void); diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index 8ed02f4f5775..255a24a99f28 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -980,6 +980,7 @@ static void __init kvm_init_platform(void) .mask_hi =3D (BIT_ULL(boot_cpu_data.x86_phys_bits) - 1) >> 32, }; u32 timing_info_leaf; + bool tsc_is_reliable; =20 if (cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT) && kvm_para_has_feature(KVM_FEATURE_MIGRATION_CONTROL)) { @@ -1042,7 +1043,16 @@ static void __init kvm_init_platform(void) } } =20 - kvmclock_init(); + /* + * If the TSC counts at a constant frequency across P/T states and in + * deep C-states, treat the TSC reliable, as guaranteed by KVM. + */ + tsc_is_reliable =3D boot_cpu_has(X86_FEATURE_CONSTANT_TSC) && + boot_cpu_has(X86_FEATURE_NONSTOP_TSC); + if (tsc_is_reliable) + setup_force_cpu_cap(X86_FEATURE_TSC_RELIABLE); + + kvmclock_init(tsc_is_reliable); x86_platform.apic_post_init =3D kvm_apic_init; =20 /* diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index f55d0305d1f3..2e7ab54cb9dc 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -307,7 +307,7 @@ static int kvmclock_setup_percpu(unsigned int cpu) return p ? 0 : -ENOMEM; } =20 -void __init kvmclock_init(void) +void __init kvmclock_init(bool prefer_tsc) { u8 flags; =20 @@ -356,15 +356,11 @@ void __init kvmclock_init(void) kvm_get_preset_lpj(); =20 /* - * X86_FEATURE_NONSTOP_TSC is TSC runs at constant rate - * with P/T states and does not stop in deep C-states. - * - * Invariant TSC exposed by host means kvmclock is not necessary: - * can use TSC as clocksource. - * + * If TSC is preferred over kvmlock, drop kvmclock's rating so that TSC + * is chosen as the clocksource (but still register kvmclock in case + * the kernel doesn't want to use TSC for whatever reason). */ - if (boot_cpu_has(X86_FEATURE_CONSTANT_TSC) && - boot_cpu_has(X86_FEATURE_NONSTOP_TSC)) + if (prefer_tsc) kvm_clock.rating =3D 299; =20 clocksource_register_hz(&kvm_clock, NSEC_PER_SEC); --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3919E49EF3A for ; Thu, 6 Aug 2026 23:36:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059416; cv=none; b=QdibrB3kL/vBZysrkjXiSK6kn4LEHxVTDHnQMggpvL88P5gBiB4sDULQicTdqNIxLE6HAC6WQ4Qlml2GruNE3TqACouiMKnUX3AU4FM/+9hgRxfOOatvRpgAgyDxpCcg7Dl4MXr4UT7/8mbfYqhDfADuKPTePgkrDVaatoaAObg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059416; c=relaxed/simple; bh=4ILgpsXZ3J+MDpjYL5bz0ooI2SmcUBqM1FeGA0GNQQ4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=NasCxUOPIhtKqRtmMuivlQGK5eBtLBcBxybZ6f2OoOcPNR7h5QZZIzAG1Fzfygg6hedHw9crqTFIZaRc4F+WJN0e7tghFlUalNE/yucO1CsOmxuH7Otq4eZXRzbnd5oUlmMQCjuct2J+dkxXDdZKrvqaO5Fn13i3/6U2vmP206M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=o+cjOMv8; arc=none smtp.client-ip=209.85.215.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="o+cjOMv8" Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-cb5bdd8450dso1769446a12.0 for ; Thu, 06 Aug 2026 16:36:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059413; x=1786664213; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=gK3sjM001OyHimEt3r9e3MTxT5BkhagjBxMzBV7doNU=; b=o+cjOMv85pq6SxqpSknjaw3cf3ahvB6P1WvdMIQjEdOYpPYNSmAtZ7+Gmr63usDs1F 6563QkMxQ0l2AOCQ3ozQlXupjfuLKrosrgQyiJ6KLyuHLEMaOsiLRETcUzD1Pxdxic9M Cxag6igEzadap6CjAziWr3pymmMWZexdRkNk88DMltCopf3/00+fE5YauJMDRvQoc4w7 83pistXcESe9OypYytVwhLCZiv2ZYktoqFGM562R1fuJlgk8ky4BaxhAFUTqp/ukrHoh dnLSik83zbVC15FSsnD+EQdNLBA3SHjX6d1TEePmCrMAga8hitpBSblfhcIsrLzSpmOs 9gBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059413; x=1786664213; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=gK3sjM001OyHimEt3r9e3MTxT5BkhagjBxMzBV7doNU=; b=nCpP4pHWiEmQ/puutso/I/BJPvumMT3yT3Wfp8GJUZeELSGgKUm6dcUKyN9sKzVz59 hPMI18XeqYYLPdiDM+2DO5UpjFoBKe83G4zjc4BUj4BHqQPacGqUooCOzaYdg6lx7ziw Z7WFHSNSKtzbEBf+hjjNqaTs8BRB17cDKHI00Kj6sjEIUeD5bc5atp6RYSrlZj6RxE4q xoHh6AWXQnYZ1kb2pG0kJrmWbFrVtRqTbaAU0nh7VnRDhRabERWaZ+6oa71OrTE++ob/ n/TwAhdNroXuIAbzGogBPw+HTdXQlZlYu7W4bo7Tt2s3ucjgh3LpcxM9YLsl04PZb7Qy JUQA== X-Forwarded-Encrypted: i=1; AHgh+Rr5VXt8/GZYdVx7okB/0YhQPbK+f4Wo4oF/grNy4STPjlWwdP0Y4YktZElEJU+CbnUev5xznMFp/zZFuKY=@vger.kernel.org X-Gm-Message-State: AOJu0Yzz9RKYJMyowfPWSMzD0jqu9EiWyHPi9f1GUOh8EqVYMuNqlrXN GSPz2cIIxzJNcBTqps2I/Drhf1KSrvtnnIbJUR0VVCnW5ivEQ7P/GikovCQ3ntVCGfflXJfL/KM GxqYKWg== X-Received: from pglu1.prod.google.com ([2002:a63:1401:0:b0:c99:aff5:7078]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:6da8:b0:3c3:bee9:8eec with SMTP id adf61e73a8af0-3cbadc10910mr5429156637.19.1786059412806; Thu, 06 Aug 2026 16:36:52 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:40 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-24-seanjc@google.com> Subject: [PATCH v6 23/51] x86/tsc: Add standalone helper for getting CPU frequency from CPUID From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Extract the guts of cpu_khz_from_cpuid() to a standalone helper that doesn't restrict the usage to Intel CPUs. This will allow sharing the core logic with KVM-as-a-guest, as KVM generally doesn't restrict CPUID based on vendor. No functional change intended. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/include/asm/tsc.h | 1 + arch/x86/kernel/tsc.c | 31 +++++++++++++++---------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/arch/x86/include/asm/tsc.h b/arch/x86/include/asm/tsc.h index c09ec485abcd..cb682f097ea7 100644 --- a/arch/x86/include/asm/tsc.h +++ b/arch/x86/include/asm/tsc.h @@ -88,6 +88,7 @@ struct cpuid_tsc_info { unsigned int crystal_khz; }; extern int cpuid_get_tsc_info(struct cpuid_tsc_info *info); +extern unsigned int __cpu_khz_from_cpuid(void); =20 extern void tsc_early_init(void); extern void tsc_init(void); diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index d95e4f059f17..4c5328d19ebe 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -668,6 +668,18 @@ int cpuid_get_tsc_info(struct cpuid_tsc_info *info) return 0; } =20 +unsigned int __cpu_khz_from_cpuid(void) +{ + unsigned int eax_base_mhz, ebx, ecx, edx; + + if (boot_cpu_data.cpuid_level < CPUID_LEAF_FREQ) + return 0; + + cpuid(CPUID_LEAF_FREQ, &eax_base_mhz, &ebx, &ecx, &edx); + + return eax_base_mhz * 1000; +} + /** * native_calibrate_tsc - determine TSC frequency * Determine TSC frequency via CPUID, else return 0. @@ -703,12 +715,8 @@ static unsigned long native_calibrate_tsc(void) * clock, but we can easily calculate it to a high degree of accuracy * by considering the crystal ratio and the CPU speed. */ - if (!info.crystal_khz && boot_cpu_data.cpuid_level >=3D CPUID_LEAF_FREQ) { - unsigned int eax_base_mhz, ebx, ecx, edx; - - cpuid(CPUID_LEAF_FREQ, &eax_base_mhz, &ebx, &ecx, &edx); - info.crystal_khz =3D eax_base_mhz * 1000 * info.denominator / info.numer= ator; - } + if (!info.crystal_khz) + info.crystal_khz =3D __cpu_khz_from_cpuid() * info.denominator / info.nu= merator; =20 if (!info.crystal_khz) return 0; @@ -733,19 +741,10 @@ static unsigned long native_calibrate_tsc(void) =20 static unsigned long cpu_khz_from_cpuid(void) { - unsigned int eax_base_mhz, ebx_max_mhz, ecx_bus_mhz, edx; - if (boot_cpu_data.x86_vendor !=3D X86_VENDOR_INTEL) return 0; =20 - if (boot_cpu_data.cpuid_level < CPUID_LEAF_FREQ) - return 0; - - eax_base_mhz =3D ebx_max_mhz =3D ecx_bus_mhz =3D edx =3D 0; - - cpuid(CPUID_LEAF_FREQ, &eax_base_mhz, &ebx_max_mhz, &ecx_bus_mhz, &edx); - - return eax_base_mhz * 1000; + return __cpu_khz_from_cpuid(); } =20 /* --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 144074A315D for ; Thu, 6 Aug 2026 23:36:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.199 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059417; cv=none; b=csc1Fv4M5z8x6Epitjf0j4YdOT5adBn8Wm/jrluG1YMw6Y6MbR/QKjEb5OqtgJ//FXXZt8H71i1V7QEN/w/dU6NhI4CiXN1Mb1krmNmFW68fABVXEViTTdgBBnkxPqN20gji5qi9kB34DTDj0fiuOU5JZPwM+jUJsFn1RFcb27c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059417; c=relaxed/simple; bh=rjQbLkkx2ub+8kt+Uu6IBZg4kMe4fhwmXJTlShW4cvI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=au8H/r9qsidMygrofqFQooyaIJ9ILCOhghj46NAhNr5Xx1C5OuXiEm606SPphFoxzmLUwzYFmypRVejAvz/+hYsvqMe5NMopRLls6gzcRr+GEgt5s3PflyRAf1+htdcLWQ2X+as+vSPF+6m/2gfewMUrEuiEJ1b/zrIdTXKsXQI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=GQCa+Pbp; arc=none smtp.client-ip=209.85.210.199 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="GQCa+Pbp" Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-84e024d2129so4668762b3a.2 for ; Thu, 06 Aug 2026 16:36:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059414; x=1786664214; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=RXgfgHNb2M05mbaK7fzwXMNXNJyNMqWfUYS+q8iqpyw=; b=GQCa+PbpcfceuZwONQrLWgGg3FW/26eqaKhKHcq2gGMPwLTAjEa/zcZTRSMAk6KHVh VMiE8p2O/W6J+z1ZylErhA/dkrsC123qdBa8IS/4JkAm5nDAFtWDPQc/DqMVLIFD7psb 71vOUFccK4OIjLsKhuoCdQvJbGtIuMOMpiVNKdJkOWz1+BjYEXXiIm60veXsJBUbnnLk HEGjB9nwl4bd646p9EOybrYggDAFSAPYM0G48T5qduMGDjydZARAYjudcvVtyVjmEpj0 c29CaBSPDrXAZ3U8yegoWjpraYRrf/Ris9LEauq9Di+hsYwYYVF31KeHJFG/d3A0l1Y3 OiEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059414; x=1786664214; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=RXgfgHNb2M05mbaK7fzwXMNXNJyNMqWfUYS+q8iqpyw=; b=tEvHNOjJtXozbxjctXGzpijKWDzqpb9DR3e/Pz7RNTOddNgKA/DSIjxt17Lms1pj4M XyxisUlf7OmfhDNV0ysHkwk8zM3yJ6kfD92mvCiMs2Tuojf4IWzmyoGiNwKx3i9tT3hU 19NZ1s+GeKnNQr2k4u9VEaQEbh6uMMy83X6wgYHf0fiJphdAJ9PVUGcOgVribc+XzCqS cdEs0pYAITTYzAwC+9OxREM10/MqdTok+MsKc9/lIrhv4B9COJIzJ5On/D2bTsmG08H/ cU5rWBJOtAkNcxu0Rweew7iaHI/OgDzQwrS3/gbQPdN/bJSr7SqVKZ1ZHAPEW8M5m568 o1cg== X-Forwarded-Encrypted: i=1; AHgh+RpsDWnq921ejqxQM4HBNIlk8MBqTnKEqP7Mu+/fQ8jWUMlqxCN7yduMm7aGjAqLM23+4hziqzn1STKGsIk=@vger.kernel.org X-Gm-Message-State: AOJu0YxjJfjlgWa8qF86tSCRLtIo63mu244C9gc7xfAjXhn2ZPGNHO07 XrGe4mmD+O6yn880XqcShZ9nVL0FLI0IcEe1cFfbNc5fPGpcQxnQWCrJxt6OjZzg7cYdq6AsfXB jtfcZ9w== X-Received: from pfcy7.prod.google.com ([2002:a05:6a00:93c7:b0:845:e683:1287]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:6e81:b0:84e:2bb:2d3e with SMTP id d2e1a72fcca58-84f2dfb4e50mr16994834b3a.9.1786059414067; Thu, 06 Aug 2026 16:36:54 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:41 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-25-seanjc@google.com> Subject: [PATCH v6 24/51] x86/kvm: Get CPU base frequency from CPUID when it's available From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" If CPUID.0x16 is present and valid, use the CPU frequency provided by CPUID instead of assuming that the virtual CPU runs at the same frequency as TSC and/or kvmclock. Back before constant TSCs were a thing, treating the TSC and CPU frequencies as one and the same was somewhat reasonable, but now it's nonsensical, especially if the hypervisor explicitly enumerates the CPU frequency. Signed-off-by: Sean Christopherson Reviewed-by: David Woodhouse --- arch/x86/kernel/kvm.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index 255a24a99f28..83b9351f2810 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -50,6 +50,7 @@ #include =20 static unsigned int kvm_tsc_khz_cpuid __initdata; +static unsigned int kvm_cpu_khz_cpuid __initdata; =20 DEFINE_STATIC_KEY_FALSE_RO(kvm_async_pf_enabled); =20 @@ -930,6 +931,11 @@ static unsigned int __init kvm_get_tsc_khz(void) return kvm_tsc_khz_cpuid; } =20 +static unsigned int __init kvm_get_cpu_khz(void) +{ + return kvm_cpu_khz_cpuid; +} + unsigned int kvm_arch_para_features(void) { return cpuid_eax(kvm_cpuid_base() | KVM_CPUID_FEATURES); @@ -1043,6 +1049,14 @@ static void __init kvm_init_platform(void) } } =20 + /* + * Prefer CPUID.0x16 over KVM's PV CPUID when possible, as the base CPU + * frequency isn't necessarily the same as the TSC frequency. + */ + kvm_cpu_khz_cpuid =3D __cpu_khz_from_cpuid(); + if (kvm_cpu_khz_cpuid) + x86_init.hyper.get_cpu_khz =3D kvm_get_cpu_khz; + /* * If the TSC counts at a constant frequency across P/T states and in * deep C-states, treat the TSC reliable, as guaranteed by KVM. --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4F4324A4304 for ; Thu, 6 Aug 2026 23:36:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.200 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059419; cv=none; b=WE2/xC2bRhAvnXtnPSjjRqTfXBVac43On2fxu5XNKgUZF1D20b8Xk8BQ2NiBIoxnyDGfzKDHfZaHH1NX0Mxdec+BVyfipTc8I33V1qKyNEMsB4nztySxtgPChHVIddQpyk951UCWC0SsRdKbXxMAkQOlkkMtsCaFoo3v2cq4hGQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059419; c=relaxed/simple; bh=LJwj0H7ygxbdQNHP5MBvYXv85flCoR1qvNC13d+g8ks=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=HbPqEDMFjZq1Z7XOIZ++rufTNJXZQ5yH/CHXlK90y6LdX5Ba4OaN36wKXA1N3TnWENpLvQSWk3HThklyZ6uChDoFYFqxViWNpwy+TAi2+A+D1DsBz0xuBaR6BnlL2n4R8Cl13McrD1kZIW8YkK/ilFVVMmzO4oAA+v1NXjHo7t4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=Z2wEzc1g; arc=none smtp.client-ip=209.85.215.200 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Z2wEzc1g" Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-c88cfe287e1so2212121a12.1 for ; Thu, 06 Aug 2026 16:36:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059415; x=1786664215; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=LVVzZOjwmw/JiJ4qXIbPAPAp0QWxfKUo2q2D7ecTrQM=; b=Z2wEzc1gpTtxPNQfGMbLP7AHA3KE5SQvPd0nI9wIKxp2FmlsLP3kHE35Aym4KSTL6t QtAPcxFeEmy4VECb5XMTjpELzxqBcqPEXo4y/ovf/Tq1jQPvyAs42UQyAmR9zv4zyXa6 +HDkaCBPXxI6+ecVZM6JxsrAhLDyr8xcuPfulnf3WAtVbmGKxXzhuwa7g+4HWqkblU/N f1S5wKffIBs64E5lTjR2exF/g8MSkTdNWrNFpP3rYBdgieze5qXIo6u2NIljI5bkXVQd 0ppnnHVjyV+oJxpJbUagcT9AxseOr835ZqH7oeA8sK6NYbEVI/U1Unb/gKLxd7U+hwAm S7uA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059415; x=1786664215; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=LVVzZOjwmw/JiJ4qXIbPAPAp0QWxfKUo2q2D7ecTrQM=; b=s9EJH/JL+F6xy67IXY5jEIh1e6VDElR8f6hOtFAFWEb0iqI9vwFNPHJ0P6cCxBAQW8 R0BcNV2H/e2LbcY7hbl0xmZypqcP89L505mN0IJHXdUaH+5u0BJcEM/V4QYsgQpBeg/E mzxI/4j6H+xj9CikmBYfLWWBpXX7ZR/LTAepFJPE2XopE2rK79TBm3kYPleBuVIkvHvk EV+3sGtkqSNPpA/Gd8Gcu/m1OVXY1GwIrhr7b1g0e/Ld31H9MXMqz4YAJLIXKqPQZJAU ycQUU18I4lVd3F/g7WxcH4OcOOniLQ6j/tjOkkBNko2xbyhj5J7ZJtTbb+jfr7QqlhXP ZEKA== X-Forwarded-Encrypted: i=1; AHgh+RrC9JzUH6SGINHHLullbTEb2qUrr+lTueXtT52ThsDsVfhoCn0UwhE/nSvf/IqWErqIabETMwoTeVF70gY=@vger.kernel.org X-Gm-Message-State: AOJu0Yz1i6zaZHV2SQMJ67GapgM9amWjXg4EpTdetLrbPh0A8NtYYisO gyip/9fzmCneRUVrdOwItULiKvNf/Qbjxu21rd/QPAPmX3zyoVJIz1eTj1dJLd+iB/Gki7F0sx4 tZ2xFSQ== X-Received: from pfcy22.prod.google.com ([2002:a05:6a00:93d6:b0:84b:be30:8d22]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:8019:b0:848:4a48:9f9f with SMTP id d2e1a72fcca58-84f4fee000fmr6402250b3a.34.1786059415266; Thu, 06 Aug 2026 16:36:55 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:42 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-26-seanjc@google.com> Subject: [PATCH v6 25/51] clocksource: hyper-v: Register sched_clock save/restore iff it's necessary From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Register the Hyper-V reference counter (refcounter) callbacks for saving and restoring its PV sched_clock, if and only if the refcounter is actually being used for sched_clock. Currently, Hyper-V overrides the save/restore hooks if the reference TSC available, whereas the Hyper-V refcounter code only overrides sched_clock if the reference TSC is available *and* it's not invariant. The flaw is effectively papered over by invoking the "old" save/restore callbacks as part of save/restore, but that's unnecessary and fragile. To avoid introducing more complexity, and to allow for additional cleanups of the PV sched_clock code, move the save/restore hooks and logic into hyperv_timer.c and simply wire up the hooks when overriding sched_clock itself. Note, while the Hyper-V refcounter code is intended to be architecture neutral, CONFIG_PARAVIRT is firmly x86-only, i.e. adding a small amount of x86 specific code (which will be reduced in future cleanups) doesn't meaningfully pollute generic code. Reviewed-by: Michael Kelley Tested-by: Michael Kelley Acked-by: Wei Liu Signed-off-by: Sean Christopherson --- arch/x86/kernel/cpu/mshyperv.c | 58 ------------------------------ drivers/clocksource/hyperv_timer.c | 50 ++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 58 deletions(-) diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c index 3bca987e05c3..d704496d0409 100644 --- a/arch/x86/kernel/cpu/mshyperv.c +++ b/arch/x86/kernel/cpu/mshyperv.c @@ -275,63 +275,6 @@ static void hv_guest_crash_shutdown(struct pt_regs *re= gs) } #endif /* CONFIG_CRASH_DUMP */ =20 -static u64 hv_ref_counter_at_suspend; -static void (*old_save_sched_clock_state)(void); -static void (*old_restore_sched_clock_state)(void); - -/* - * Hyper-V clock counter resets during hibernation. Save and restore clock - * offset during suspend/resume, while also considering the time passed - * before suspend. This is to make sure that sched_clock using hv tsc page - * based clocksource, proceeds from where it left off during suspend and - * it shows correct time for the timestamps of kernel messages after resum= e. - */ -static void save_hv_clock_tsc_state(void) -{ - hv_ref_counter_at_suspend =3D hv_read_reference_counter(); -} - -static void restore_hv_clock_tsc_state(void) -{ - /* - * Adjust the offsets used by hv tsc clocksource to - * account for the time spent before hibernation. - * adjusted value =3D reference counter (time) at suspend - * - reference counter (time) now. - */ - hv_adj_sched_clock_offset(hv_ref_counter_at_suspend - hv_read_reference_c= ounter()); -} - -/* - * Functions to override save_sched_clock_state and restore_sched_clock_st= ate - * functions of x86_platform. The Hyper-V clock counter is reset during - * suspend-resume and the offset used to measure time needs to be - * corrected, post resume. - */ -static void hv_save_sched_clock_state(void) -{ - old_save_sched_clock_state(); - save_hv_clock_tsc_state(); -} - -static void hv_restore_sched_clock_state(void) -{ - restore_hv_clock_tsc_state(); - old_restore_sched_clock_state(); -} - -static void __init x86_setup_ops_for_tsc_pg_clock(void) -{ - if (!(ms_hyperv.features & HV_MSR_REFERENCE_TSC_AVAILABLE)) - return; - - old_save_sched_clock_state =3D x86_platform.save_sched_clock_state; - x86_platform.save_sched_clock_state =3D hv_save_sched_clock_state; - - old_restore_sched_clock_state =3D x86_platform.restore_sched_clock_state; - x86_platform.restore_sched_clock_state =3D hv_restore_sched_clock_state; -} - #ifdef CONFIG_X86_64 DEFINE_STATIC_CALL(hv_hypercall, hv_std_hypercall); EXPORT_STATIC_CALL_TRAMP_GPL(hv_hypercall); @@ -736,7 +679,6 @@ static void __init ms_hyperv_init_platform(void) =20 /* Register Hyper-V specific clocksource */ hv_init_clocksource(); - x86_setup_ops_for_tsc_pg_clock(); hv_vtl_init_platform(); #endif /* diff --git a/drivers/clocksource/hyperv_timer.c b/drivers/clocksource/hyper= v_timer.c index df567795d175..4293173c3a27 100644 --- a/drivers/clocksource/hyperv_timer.c +++ b/drivers/clocksource/hyperv_timer.c @@ -554,10 +554,60 @@ static __always_inline void hv_setup_sched_clock(void= *sched_clock) #elif defined CONFIG_PARAVIRT #include =20 +static u64 hv_ref_counter_at_suspend; +static void (*old_save_sched_clock_state)(void); +static void (*old_restore_sched_clock_state)(void); + +/* + * Hyper-V clock counter resets during hibernation. Save and restore clock + * offset during suspend/resume, while also considering the time passed + * before suspend. This is to make sure that sched_clock using hv tsc page + * based clocksource, proceeds from where it left off during suspend and + * it shows correct time for the timestamps of kernel messages after resum= e. + */ +static void save_hv_clock_tsc_state(void) +{ + hv_ref_counter_at_suspend =3D hv_read_reference_counter(); +} + +static void restore_hv_clock_tsc_state(void) +{ + /* + * Adjust the offsets used by hv tsc clocksource to + * account for the time spent before hibernation. + * adjusted value =3D reference counter (time) at suspend + * - reference counter (time) now. + */ + hv_adj_sched_clock_offset(hv_ref_counter_at_suspend - hv_read_reference_c= ounter()); +} +/* + * Functions to override save_sched_clock_state and restore_sched_clock_st= ate + * functions of x86_platform. The Hyper-V clock counter is reset during + * suspend-resume and the offset used to measure time needs to be + * corrected, post resume. + */ +static void hv_save_sched_clock_state(void) +{ + old_save_sched_clock_state(); + save_hv_clock_tsc_state(); +} + +static void hv_restore_sched_clock_state(void) +{ + restore_hv_clock_tsc_state(); + old_restore_sched_clock_state(); +} + static __always_inline void hv_setup_sched_clock(void *sched_clock) { /* We're on x86/x64 *and* using PV ops */ paravirt_set_sched_clock(sched_clock); + + old_save_sched_clock_state =3D x86_platform.save_sched_clock_state; + x86_platform.save_sched_clock_state =3D hv_save_sched_clock_state; + + old_restore_sched_clock_state =3D x86_platform.restore_sched_clock_state; + x86_platform.restore_sched_clock_state =3D hv_restore_sched_clock_state; } #else /* !CONFIG_GENERIC_SCHED_CLOCK && !CONFIG_PARAVIRT */ static __always_inline void hv_setup_sched_clock(void *sched_clock) {} --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BAB464A433B for ; Thu, 6 Aug 2026 23:36:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.199 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059420; cv=none; b=KBxKU9Gudqu81iePIXdTuw6gWfJwUCgyGvkfhbHO6Yiv2gTTy5U2UicscGlOI7lay9YZ7ddoei7ONQf0w7sgwdqpK0JhbXH1I6j0pX4Qe+KLjM1c8K0FC7laMOlfc1yKG6SuQo2BcTBqRiop2TFmGrLaIWNZV18gXnFZ/4r9oL4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059420; c=relaxed/simple; bh=9DAIjDH1F2HoJUEVpdMLcADO0LnHG+NJf0QuZz8Bg8c=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=i2iJxusTEX737VjLCclfWgyWJdCrN8QOzy5JrUlpFTxWuC9K+UzMnZBEtHekjs8bueuFYfDjHomW2gfVH3PHferjtsvk0/k/7TRcUR1EaGWb79IZB4sahPgEVFZkq1EAILETSNa7e5DJgO+Oyix1h3py9e2V1XMwiqTUNgWkFrE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=YSIjCUzp; arc=none smtp.client-ip=209.85.215.199 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="YSIjCUzp" Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-c9fe4c5eb39so2012281a12.1 for ; Thu, 06 Aug 2026 16:36:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059417; x=1786664217; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=mGO2RWCI+1OC1QgQlwRZRpcTYMYFszJFieAT3RQjORg=; b=YSIjCUzpIj6KrkOh58ZIjgHX2VQ9aHKIaEq4q3rJpZAPwdTOgqP8pUBsHp5oJ8J5Td sb0/7nK5SVE3sEmphEixRA9cIkXC9HLtPd+6qM2St95q3bai98baz54O3nuv5goX7iyJ gC5ZalhA673YyYikpDEY6IH74VkCtpu/EGPUdJhQ7kCoCMOKaItxk1YcCQArbOZ2ViPh 8WelV0PuyIrKjVOQEy/29pbu/MHRjwPJvxE9WGEGvX6XW2FlYCxiSk9yJNN1qoclYJoy U03Gb5PFxcO5dJX0Hoe9mL9wzPDbC5ry6bQx3DtZWk7hdO7/iQefWtbey5ulO0fg3os6 CTIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059417; x=1786664217; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=mGO2RWCI+1OC1QgQlwRZRpcTYMYFszJFieAT3RQjORg=; b=S5qfmJmV0jlcH8L2EW8lfZ9ildL3bxyT/G3maoEhSeeCFS447XV+jseYOcg6Rj7/n1 2lbSSDgKOfznOZCXnDRpqwgZ2Yw1G9SJp7MyPnjyF5tI6kh7WTZ8Fv1uBktUyzDmYieV I7Njvd9CKORHkQeDkc7UJKNy5nmetFX2PCfbVeYh/ZXsBXAhbsmUT7uBRi1H+Fey6a68 Cs71LkIJ5oEs4pUomU7Fb5iZmX10i4fTl41RXBcZDoPs6+9FKAfwnz14wtqZ2kps0j8O ao7Le6KebtI+eeC08cj4CdfIBpnovuTwVztju1+2xZM/4hJzSoXs0FCkhaRJpMTn9xQq B2uA== X-Forwarded-Encrypted: i=1; AHgh+Rqgzavhs56thVvrCgoTbk0duDPolDPDHAoLp7hWg37vgyKLt//RqhC4IVMrooddniafMfDxkfgicu+crDE=@vger.kernel.org X-Gm-Message-State: AOJu0YwxQ4Hm/I25skBT0vxUsGMQlCEPYDeOSAL2wDovYJcXbN5OSJ1x ayr0qKmZf2YapJoNwT6Y2/DoMnL+WPXnzkXvdM5GTXk0DaRt0JeCsJ+cnj3TdD953u5EYhV57b2 fuuAfyA== X-Received: from pgmj25.prod.google.com ([2002:a63:5959:0:b0:c9e:364c:61a2]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:329c:b0:3c3:8315:80b7 with SMTP id adf61e73a8af0-3cb85e9757amr21773483637.9.1786059416350; Thu, 06 Aug 2026 16:36:56 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:43 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-27-seanjc@google.com> Subject: [PATCH v6 26/51] clocksource: hyper-v: Drop wrappers to sched_clock save/restore helpers From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that all of the Hyper-V reference counter sched_clock code is located in a single file, drop the superfluous wrappers for the save/restore flows. No functional change intended. Reviewed-by: Michael Kelley Tested-by: Michael Kelley Acked-by: Wei Liu Signed-off-by: Sean Christopherson --- drivers/clocksource/hyperv_timer.c | 34 +++++------------------------- include/clocksource/hyperv_timer.h | 2 -- 2 files changed, 5 insertions(+), 31 deletions(-) diff --git a/drivers/clocksource/hyperv_timer.c b/drivers/clocksource/hyper= v_timer.c index 4293173c3a27..daa8cbfe61ee 100644 --- a/drivers/clocksource/hyperv_timer.c +++ b/drivers/clocksource/hyperv_timer.c @@ -488,17 +488,6 @@ static void resume_hv_clock_tsc(struct clocksource *ar= g) hv_set_msr(HV_MSR_REFERENCE_TSC, tsc_msr.as_uint64); } =20 -/* - * Called during resume from hibernation, from overridden - * x86_platform.restore_sched_clock_state routine. This is to adjust offse= ts - * used to calculate time for hv tsc page based sched_clock, to account for - * time spent before hibernation. - */ -void hv_adj_sched_clock_offset(u64 offset) -{ - hv_sched_clock_offset -=3D offset; -} - #ifdef HAVE_VDSO_CLOCKMODE_HVCLOCK static int hv_cs_enable(struct clocksource *cs) { @@ -565,12 +554,14 @@ static void (*old_restore_sched_clock_state)(void); * based clocksource, proceeds from where it left off during suspend and * it shows correct time for the timestamps of kernel messages after resum= e. */ -static void save_hv_clock_tsc_state(void) +static void hv_save_sched_clock_state(void) { + old_save_sched_clock_state(); + hv_ref_counter_at_suspend =3D hv_read_reference_counter(); } =20 -static void restore_hv_clock_tsc_state(void) +static void hv_restore_sched_clock_state(void) { /* * Adjust the offsets used by hv tsc clocksource to @@ -578,23 +569,8 @@ static void restore_hv_clock_tsc_state(void) * adjusted value =3D reference counter (time) at suspend * - reference counter (time) now. */ - hv_adj_sched_clock_offset(hv_ref_counter_at_suspend - hv_read_reference_c= ounter()); -} -/* - * Functions to override save_sched_clock_state and restore_sched_clock_st= ate - * functions of x86_platform. The Hyper-V clock counter is reset during - * suspend-resume and the offset used to measure time needs to be - * corrected, post resume. - */ -static void hv_save_sched_clock_state(void) -{ - old_save_sched_clock_state(); - save_hv_clock_tsc_state(); -} + hv_sched_clock_offset -=3D (hv_ref_counter_at_suspend - hv_read_reference= _counter()); =20 -static void hv_restore_sched_clock_state(void) -{ - restore_hv_clock_tsc_state(); old_restore_sched_clock_state(); } =20 diff --git a/include/clocksource/hyperv_timer.h b/include/clocksource/hyper= v_timer.h index d48dd4176fd3..a4c81a60f53d 100644 --- a/include/clocksource/hyperv_timer.h +++ b/include/clocksource/hyperv_timer.h @@ -38,8 +38,6 @@ extern void hv_remap_tsc_clocksource(void); extern unsigned long hv_get_tsc_pfn(void); extern struct ms_hyperv_tsc_page *hv_get_tsc_page(void); =20 -extern void hv_adj_sched_clock_offset(u64 offset); - static __always_inline bool hv_read_tsc_page_tsc(const struct ms_hyperv_tsc_page *tsc_pg, u64 *cur_tsc, u64 *time) --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A6C334A3166 for ; Thu, 6 Aug 2026 23:36:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059421; cv=none; b=OpMO5n1BvnOMccISHmZIcNCJFgevMyw74nHDd4zTlNN21EYNo41KbSP9skRsBVZ+9WH1T96wksdyzPsphphNvgFSTEBG6ly7I4EuU5wWkyAJ+XKmy0g2JlNJ+K271RkAIAd94depifr1FGyZEqk/kPc8xgQNP2hLKdp7zP7DjLA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059421; c=relaxed/simple; bh=pvk61KgZsdgezrqmuUH0lmIu4eH6UZ//mUcKEN2ubd8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=ibzeFS3rY4UVxeh95ox0gpahXcRGtMz5Ml5o7zw5uC8eZGAf3s7eaFseynrw51s7aUJUSe8DNJZQN7zQWvTzzS8idkQ1Tm95+nmBf6rbZ8//Zo2YtlKVZZsrBJZ6B5C/cJRi0R+8ReuQxXak9dqs/eVRHxn9qq8Q8Fw+4XFNuB8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=JgeuRY+G; arc=none smtp.client-ip=209.85.215.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="JgeuRY+G" Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-cbb6433e9d4so3414556a12.3 for ; Thu, 06 Aug 2026 16:36:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059418; x=1786664218; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=heSuqSIgeH92pLRWbhNi7GYX8HqrNShkMIs22IEn4aI=; b=JgeuRY+G87SI6mEJFTSetd951fXXpqnhpp2TqQRSxfa88MqKJD0jaFS1egNVCLlWy4 iXwzU3V+X4Ps0A/pyPrWbE0+PQPvv92+qhwK5pHcAV69EdRBCfXOtAeGpYAE3LziETYJ vtKuYNGX4v9UIJ1xwDTkkCFNVQjqN6rZ1P3a2wQd0Clz85cKjsqEING7YqmH1yL1p0uT Gm6Yn/yldjsvSIdY4nK5z08iiI6KstDKtml7Jtiz/xv4lBmEak5NIXlteg3tGXsQVXd7 64rntZ5m/l1qBNuqXkfrFUhe+Ke2qXunUXfy/DNV1Ugqcx19RfRJjleApH1jHG6Y/R7B skmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059418; x=1786664218; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=heSuqSIgeH92pLRWbhNi7GYX8HqrNShkMIs22IEn4aI=; b=Epkir9UVfWc+vNF53DndFzbA9E+h73VcFNEvuyAiZqwJ4CXSSHRiOIj3PLwz8NuH82 YmrJWva4IK7MZhqePKIsHHhDSrGEANKs+F7TLm+ybPehVo6RI+fg6rcJs6sIl+hSJwNP Xmbr+OD+IMvUqJo/CE3TAX505MDK4qDXmgvH2KS8MCKdgBlTkQDRzjrrNiLXA/a2oxAt ihaiS3MYWU1IEM/VXpaAOe6RZHI+cTSBPl4KgXtX/aW1ld4sGOX0reJ+zN5gp6h3CRtN LcPsV5EJbBqWTdEieyMFq5f9rMrC0Oq8Uh9yv2jjD3z07cafCMFtKccvvMCWBoJjhGEH qz3A== X-Forwarded-Encrypted: i=1; AHgh+RqDLjrvajqsmApKQ8GM/jTLCBM4x+UJNxyZtnQK2jxqDDMUMtnQVL1FrV5Xe+dJfGXOXlmaZEQ8R/fcWh4=@vger.kernel.org X-Gm-Message-State: AOJu0YyRLVHiw3cGVLoxZ3lY8Z99s2D1AqgOACjajix57Ne3u/GnHDjg AsXpnHvpmvWWA3UWt8znQV3FBcWvZu46QQaLG2zbnE9tfGnJ8MhitVAzK+Cf9C2340lqv/HpNNP WLXxmpA== X-Received: from pgmc19.prod.google.com ([2002:a63:1c53:0:b0:c98:2639:852e]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:7344:b0:3bf:6acf:2940 with SMTP id adf61e73a8af0-3cb85df0a1bmr20575846637.11.1786059417589; Thu, 06 Aug 2026 16:36:57 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:44 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-28-seanjc@google.com> Subject: [PATCH v6 27/51] clocksource: hyper-v: Don't save/restore TSC offset when using HV sched_clock From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that Hyper-V overrides the sched_clock save/restore hooks if and only sched_clock itself is set to the Hyper-V reference counter, drop the invocation of the "old" save/restore callbacks. When the registration of the PV sched_clock was done separately from overriding the save/restore hooks, it was possible for Hyper-V to clobber the TSC save/restore callbacks without actually switching to the Hyper-V refcounter. Enabling a PV sched_clock is a one-way street, i.e. the kernel will never revert to using TSC for sched_clock, and so there is no need to invoke the TSC save/restore hooks (and if there was, it belongs in common PV code). Reviewed-by: Michael Kelley Tested-by: Michael Kelley Reviewed-by: David Woodhouse Acked-by: Wei Liu Signed-off-by: Sean Christopherson --- drivers/clocksource/hyperv_timer.c | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/drivers/clocksource/hyperv_timer.c b/drivers/clocksource/hyper= v_timer.c index daa8cbfe61ee..220668207d19 100644 --- a/drivers/clocksource/hyperv_timer.c +++ b/drivers/clocksource/hyperv_timer.c @@ -544,9 +544,6 @@ static __always_inline void hv_setup_sched_clock(void *= sched_clock) #include =20 static u64 hv_ref_counter_at_suspend; -static void (*old_save_sched_clock_state)(void); -static void (*old_restore_sched_clock_state)(void); - /* * Hyper-V clock counter resets during hibernation. Save and restore clock * offset during suspend/resume, while also considering the time passed @@ -556,8 +553,6 @@ static void (*old_restore_sched_clock_state)(void); */ static void hv_save_sched_clock_state(void) { - old_save_sched_clock_state(); - hv_ref_counter_at_suspend =3D hv_read_reference_counter(); } =20 @@ -570,8 +565,6 @@ static void hv_restore_sched_clock_state(void) * - reference counter (time) now. */ hv_sched_clock_offset -=3D (hv_ref_counter_at_suspend - hv_read_reference= _counter()); - - old_restore_sched_clock_state(); } =20 static __always_inline void hv_setup_sched_clock(void *sched_clock) @@ -579,10 +572,7 @@ static __always_inline void hv_setup_sched_clock(void = *sched_clock) /* We're on x86/x64 *and* using PV ops */ paravirt_set_sched_clock(sched_clock); =20 - old_save_sched_clock_state =3D x86_platform.save_sched_clock_state; x86_platform.save_sched_clock_state =3D hv_save_sched_clock_state; - - old_restore_sched_clock_state =3D x86_platform.restore_sched_clock_state; x86_platform.restore_sched_clock_state =3D hv_restore_sched_clock_state; } #else /* !CONFIG_GENERIC_SCHED_CLOCK && !CONFIG_PARAVIRT */ --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C2C5D4A57FF for ; Thu, 6 Aug 2026 23:36:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059422; cv=none; b=YGJYrN/6egJvTRB5fdPc3uLx/sLSqkoqApLJsCa3fblfGDkW0YEEBJKJvrAL8xmWMPU8RaZBJvBwLwksxKec7GhRZtqrupdFcEov9m87y44Lza5auzGeit0EW2doA+QdH0NPIKWEA18XcLWVEqopac8xct21LRMcyMgAHvONbM4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059422; c=relaxed/simple; bh=ZukvIBi+c+C/EBZ813NQs+KodZX1Q5CgQXvRxFbx3mY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=QvjwgjxHxjP/eIYZhE0EZEct8tsSiasboLo010pxjLacZQjt7HXgXRA1VxOVQmZNTG5pe9n6aZioXsK5x+EIk6xHYfQTdnbB2+vND2yki/KR1UADeAfV6NqSOBWc2Erb1y+Dm+3N8YIefHI/l9nX9Pwo+hyvMkshdw3rRjNnA50= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=p/x2sPMw; arc=none smtp.client-ip=209.85.215.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="p/x2sPMw" Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-cbe77d6864dso2958505a12.2 for ; Thu, 06 Aug 2026 16:36:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059419; x=1786664219; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=IDybt2K9QzXIIF0RtAPpPcNbJv3nyQQRnp+0cGRBepM=; b=p/x2sPMwGMd3N0VhVG2mJ1eKTJOsNtOMX69tt02bbyl29eBLpSeRC637RFxTzj+Vsi y+j0gvbCOzujCKnDlJ61f/IjhI0eF5yWhgug6sU2dflbzmmGhd1GcfCnxs3r16u488TR e9X+5TrcMKQjlMnqqSu7ECdsk5yXA/GiOpF9vw6tC2M02Li4KdcIYQfvshfdi1F7wsTQ omMclz9yewMqzA6epRgFtBls09DrQKebtJ9hnMZbo9lSitkW4DyxnUWQKbjGSGApC631 W/ZEAUG1oxCZmIoCOamF5KvVdPmb5K+CczQ58U4lseroet0HcR4WqF8QX5Mkb668zAW2 SIwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059419; x=1786664219; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=IDybt2K9QzXIIF0RtAPpPcNbJv3nyQQRnp+0cGRBepM=; b=TBx9s6YfwxrrvukmUT7Yqf5FHil76qd7cneSAPF3nXI0F9kwMPVQkpcNC6d1UarTYj 0wrNislt3vCdvdWBRQFYOagn9UEztfHNA6vTO2NFy1eptXeEHTx1Os8TV1lyaVlMXP5N vXb+P0vmjh+Y4MX5vETOPnFEoMt4CGdK8wSb64ugluSl1bMve3G/iKaXYecrYej4pl40 WmVzyDwfGM2VHI36aPj07TXf1WnlpeSH81GhldoqQiRAg7bgY21z97Y1nGB0tv+dJgd2 9Evzl90eMSWq+K1oKd2yVPD9oFVgMAeOWuDMK9iN5fZhs9cJAJQYBvgyTvQIg9XPDLFX 6syA== X-Forwarded-Encrypted: i=1; AHgh+RoWaKUDs1r0M4lRI8amVHT8qk8rGea5pios5jwTM3QPK6gS5uLascP59PbziAcrkgECh6+SQtrPFsNWVWA=@vger.kernel.org X-Gm-Message-State: AOJu0YyLHM3poSNgZxdwXjcwWQ4nWMzjY+Jk5yUbWyyc6boVeMeRH+WE 8xeOrCvOARPnomYK2xFqyAywjrMo2VIDyNtoD2s7sybM5jN65B3KTTTfzPpU8TllVgS5YpjoqLH JUEgKfQ== X-Received: from pgbcp2.prod.google.com ([2002:a05:6a02:4002:b0:c8b:fa4f:f001]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:4314:b0:3c3:89ce:b5bc with SMTP id adf61e73a8af0-3cb85e28fd0mr22042606637.15.1786059418706; Thu, 06 Aug 2026 16:36:58 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:45 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-29-seanjc@google.com> Subject: [PATCH v6 28/51] x86/kvmclock: Setup kvmclock for secondary CPUs iff CONFIG_SMP=y From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Gate kvmclock's secondary CPU code on CONFIG_SMP, not CONFIG_X86_LOCAL_APIC. Originally, kvmclock piggybacked PV APIC ops to setup secondary CPUs. When that wart was fixed by commit df156f90a0f9 ("x86: Introduce x86_cpuinit.early_percpu_clock_init hook"), the dependency on a local APIC got carried forward unnecessarily. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/kernel/kvmclock.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index 2e7ab54cb9dc..b0c871ba8232 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -208,7 +208,7 @@ static void kvm_restore_sched_clock_state(void) kvm_register_clock("primary cpu clock, resume"); } =20 -#ifdef CONFIG_X86_LOCAL_APIC +#ifdef CONFIG_SMP static void kvm_setup_secondary_clock(void) { kvm_register_clock("secondary cpu clock"); @@ -348,7 +348,7 @@ void __init kvmclock_init(bool prefer_tsc) x86_init.hyper.get_cpu_khz =3D kvmclock_get_tsc_khz; x86_platform.get_wallclock =3D kvm_get_wallclock; x86_platform.set_wallclock =3D kvm_set_wallclock; -#ifdef CONFIG_X86_LOCAL_APIC +#ifdef CONFIG_SMP x86_cpuinit.early_percpu_clock_init =3D kvm_setup_secondary_clock; #endif x86_platform.save_sched_clock_state =3D kvm_save_sched_clock_state; --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pf1-f200.google.com (mail-pf1-f200.google.com [209.85.210.200]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 49AAB4A653F for ; Thu, 6 Aug 2026 23:37:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.200 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059423; cv=none; b=ra2brblrqknfirnxfX2VN3LGVykdqEz30+fjTEwWu10jf6iEJyeiHRLvEEhMU/5IIeDuP89EUbZ7gFCEeG7QEjW96+TO+MhC0LL4c6P3n9GIcu7t4371dYttAvltHuFIqyFclkWHdZV65EYrxT8C6h7xLxDxiXl+7dPRbPiJHLs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059423; c=relaxed/simple; bh=rWbS/5EcUfIGw+MDz630kobNACYbTmDG/E889zv4mS0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=tEvkYpL5PCX5i+/5kohulcOivbtYJQFv5xtlM5mTbkwAAr2xiLi284Uvm4yGS9ngCxL8/a9n32gIATe4T0ltQoaDIfzKqFAmlULQOlUASHfqf6C0lwmRnvEWjAsVqzNYgUgGx+RwZrrkBxSh/bNT9dz2MA7uZjsXs2OBQM1RGec= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=FH6oJW9Q; arc=none smtp.client-ip=209.85.210.200 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="FH6oJW9Q" Received: by mail-pf1-f200.google.com with SMTP id d2e1a72fcca58-84a67b16217so4508396b3a.3 for ; Thu, 06 Aug 2026 16:37:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059421; x=1786664221; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=o8F+mGATSkCnO7RB7Nrhalcr3db+GPA7pyXAMrOPMa0=; b=FH6oJW9Q9Y2BvkCSqOJ1mnEyLdt7Emx0DGlmxy6pyiJxb1y3PqniFwGdNpCFdI4crH Sjz/hN79/bxw42AiUXM8abq9WtKaRDNWAFBXzswFU+ORy/sKj7dlXE2rmrRA4Dk/8oVE fnwRlzs4rdBKMiNVLWR5yKIYWyql3dGwiqaJLjaIUZJvuHzd3SjEbyXwJNEVdPltRRHt DRMysF3qowb9p6s5mVLxBMIU6ikTbXrSTL+WnI/8/OqBzOTPwo0ui6eFHg/bfoTDKZyh riJBfTiISugE80comI7H7jjbnRXWsGWc9tF4q1RXehCNqY5EUuhgU2Uo1FNJYx1dkgwh ArzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059421; x=1786664221; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=o8F+mGATSkCnO7RB7Nrhalcr3db+GPA7pyXAMrOPMa0=; b=oz+09lNcVTzpaIlyRNqhnFYGudYc0vJN0kw1vaiqbF+MsZQam/tJvl3v6y80ajx4pC Hxah62IZEvN3BePE8W+AoJlQmI+w+CHQyifL0xvM8m/8u4v7DaSZMESkDlJF+noARW3C CYpzAJSQ+zAtNVSs1/YQZ0JVAGNGhK3cgPUTiq3Uik1uYP7VOhsv9BUkXXAgHK66OHH3 PjCPBhd0GJyXtO+Y8bDIDDAz2Xk0H1/sGzGTh+cyEJHk1k1Myqyo01JRBfWmimv+5tlF QW6cwvlEajizSOXgMSA69pK/gX+pnlBSVZ70K7DICKrJChU+reDZsGYWNQcGli/E+Tn7 X6iw== X-Forwarded-Encrypted: i=1; AHgh+RpbhEaov0/SvoSK8YwRtDvV/V+aUd4ZcZ/2yO6fBhmuCFcMyoD7wGJHwZ4wM8HuVPndo+91eYzuOVN26ck=@vger.kernel.org X-Gm-Message-State: AOJu0YwAzcwtAgULjfzvt74B8LG9dLCfmbvk78TCScZs7cfIyT+2/AL/ L/0T3gnZ6MHijoEH5M0pQMfMcfj8q5ctexgSU1CIDWPtgvQ7qWg00LjeUl04TF96zvlqmzIQSNM fOd7IUw== X-Received: from pfwp49.prod.google.com ([2002:a05:6a00:26f1:b0:84a:894f:23f2]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:1daa:b0:848:401c:98e with SMTP id d2e1a72fcca58-84f2e0432a7mr20883725b3a.15.1786059420393; Thu, 06 Aug 2026 16:37:00 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:46 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-30-seanjc@google.com> Subject: [PATCH v6 29/51] x86/kvm: Don't disable kvmclock on BSP in syscore_suspend() From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Don't disable kvmclock on the BSP during syscore_suspend(), as the BSP's clock is NOT restored during syscore_resume(), but is instead restored earlier via the sched_clock restore callback. If suspend is aborted, e.g. due to a late wakeup, the BSP will run without its clock enabled, which "works" only because KVM-the-hypervisor is kind enough to not clobber the shared memory when the clock is disabled. But over time, the BSP's view of time will drift from APs. Plumb in an "action" to KVM-as-a-guest and kvmclock code in preparation for additional cleanups to kvmclock's suspend/resume logic. Fixes: c02027b5742b ("x86/kvm: Disable kvmclock on all CPUs on shutdown") Cc: stable@vger.kernel.org Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_para.h | 8 +++++++- arch/x86/kernel/kvm.c | 15 ++++++++------- arch/x86/kernel/kvmclock.c | 31 +++++++++++++++++++++++++------ 3 files changed, 40 insertions(+), 14 deletions(-) diff --git a/arch/x86/include/asm/kvm_para.h b/arch/x86/include/asm/kvm_par= a.h index 4a49fc286b4c..08686ff19caa 100644 --- a/arch/x86/include/asm/kvm_para.h +++ b/arch/x86/include/asm/kvm_para.h @@ -118,8 +118,14 @@ static inline long kvm_sev_hypercall3(unsigned int nr,= unsigned long p1, } =20 #ifdef CONFIG_KVM_GUEST +enum kvm_guest_cpu_action { + KVM_GUEST_BSP_SUSPEND, + KVM_GUEST_AP_OFFLINE, + KVM_GUEST_SHUTDOWN, +}; + void kvmclock_init(bool prefer_tsc); -void kvmclock_disable(void); +void kvmclock_cpu_action(enum kvm_guest_cpu_action action); bool kvm_para_available(void); unsigned int kvm_arch_para_features(void); unsigned int kvm_arch_para_hints(void); diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index 83b9351f2810..9c0b2fc98cc9 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -460,7 +460,7 @@ static void __init sev_map_percpu_data(void) } } =20 -static void kvm_guest_cpu_offline(bool shutdown) +static void kvm_guest_cpu_offline(enum kvm_guest_cpu_action action) { kvm_disable_steal_time(); if (kvm_para_has_feature(KVM_FEATURE_PV_EOI)) @@ -468,9 +468,10 @@ static void kvm_guest_cpu_offline(bool shutdown) if (kvm_para_has_feature(KVM_FEATURE_MIGRATION_CONTROL)) wrmsrq(MSR_KVM_MIGRATION_CONTROL, 0); kvm_pv_disable_apf(); - if (!shutdown) + if (action !=3D KVM_GUEST_SHUTDOWN) apf_task_wake_all(); - kvmclock_disable(); + + kvmclock_cpu_action(action); } =20 static int kvm_cpu_online(unsigned int cpu) @@ -728,7 +729,7 @@ static int kvm_cpu_down_prepare(unsigned int cpu) unsigned long flags; =20 local_irq_save(flags); - kvm_guest_cpu_offline(false); + kvm_guest_cpu_offline(KVM_GUEST_AP_OFFLINE); local_irq_restore(flags); return 0; } @@ -739,7 +740,7 @@ static int kvm_suspend(void *data) { u64 val =3D 0; =20 - kvm_guest_cpu_offline(false); + kvm_guest_cpu_offline(KVM_GUEST_BSP_SUSPEND); =20 #ifdef CONFIG_ARCH_CPUIDLE_HALTPOLL if (kvm_para_has_feature(KVM_FEATURE_POLL_CONTROL)) @@ -770,7 +771,7 @@ static struct syscore kvm_syscore =3D { =20 static void kvm_pv_guest_cpu_reboot(void *unused) { - kvm_guest_cpu_offline(true); + kvm_guest_cpu_offline(KVM_GUEST_SHUTDOWN); } =20 static int kvm_pv_reboot_notify(struct notifier_block *nb, @@ -794,7 +795,7 @@ static struct notifier_block kvm_pv_reboot_nb =3D { #ifdef CONFIG_CRASH_DUMP static void kvm_crash_shutdown(struct pt_regs *regs) { - kvm_guest_cpu_offline(true); + kvm_guest_cpu_offline(KVM_GUEST_SHUTDOWN); native_machine_crash_shutdown(regs); } #endif diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index b0c871ba8232..a3ec298d56d7 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -199,8 +199,22 @@ static void kvm_register_clock(char *txt) pr_debug("kvm-clock: cpu %d, msr %llx, %s", smp_processor_id(), pa, txt); } =20 +static void kvmclock_disable(void) +{ + if (msr_kvm_system_time) + native_write_msr(msr_kvm_system_time, 0); +} + static void kvm_save_sched_clock_state(void) { + /* + * Stop host writes to kvmclock immediately prior to suspend/hibernate. + * If the system is hibernating, then kvmclock will likely reside at a + * different physical address when the system awakens, and host writes + * to the old address prior to reconfiguring kvmclock would clobber + * random memory. + */ + kvmclock_disable(); } =20 static void kvm_restore_sched_clock_state(void) @@ -208,6 +222,17 @@ static void kvm_restore_sched_clock_state(void) kvm_register_clock("primary cpu clock, resume"); } =20 +void kvmclock_cpu_action(enum kvm_guest_cpu_action action) +{ + /* + * Don't disable kvmclock on the BSP during suspend. If kvmclock is + * being used for sched_clock, then it needs to be kept alive until the + * last minute, and restored as quickly as possible after resume. + */ + if (action !=3D KVM_GUEST_BSP_SUSPEND) + kvmclock_disable(); +} + #ifdef CONFIG_SMP static void kvm_setup_secondary_clock(void) { @@ -215,12 +240,6 @@ static void kvm_setup_secondary_clock(void) } #endif =20 -void kvmclock_disable(void) -{ - if (msr_kvm_system_time) - native_write_msr(msr_kvm_system_time, 0); -} - static void __init kvmclock_init_mem(void) { unsigned long ncpus; --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BC2C64A6FE6 for ; Thu, 6 Aug 2026 23:37:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.199 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059425; cv=none; b=NSDTitHDQSx3Y15AqGvgDaLpYEckCxyQb7ei2GFPpm6IMPCuOqeqvNNNLf5U7jasonQTDXg4KTYnXt5Srk/TED7HrKcn6I/5f+m2uSuU0PL46H6kbdQem2CcL8wkD/yxH/r7Q3OBRNZ7OHTf9zK4h9qzvvjkmZWJ9h5zemdmu2U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059425; c=relaxed/simple; bh=s2/ZfVS2+K2HvwEjsbelciYdB6FNpWUiBJfvQma4wVg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=nzNerjfEHQjAM0K4s4dFEGeU27jF+RO9KSfKre3T+yXPj2Gd8xlnv6Z6hHAwdfqpB/5bxjaAFEVOqAgqdlzVfBbPjvTecUbGQnWs6+WOq8XVsRuY3xKviwO79C2m6b8OW882cjdXY6d0d5Kny5Xp2HeRZNOmqZbxe94jCp7J7vc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=MFARviB4; arc=none smtp.client-ip=209.85.210.199 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="MFARviB4" Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-84842381150so4349303b3a.3 for ; Thu, 06 Aug 2026 16:37:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059422; x=1786664222; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=3J0zUIaWZrZleLZttsrL9ykC8Y4xnIiv8MkXpJdWFpw=; b=MFARviB4NSkQlmEDR+PggBKrwuQU9TBBlB64jMxPV7kin7LpyuVI7HkmeTXN5UJ8nO mVwizoB6Yd7A+Y7I13Yvrb/3RmqvmPJzolC00hxP/idDfEZJzmkM5UM477TJ/i/1NEbY KoTqVL6W726H/WQhbuJd7JpPkx1OhQqCZcH3rLsygoExiR4eDBvD8+zOf3N6FhjNK2jr nwktuiUunKkHS0a2duejvvNhPjbuEIUC1C14dS+2fNoVt+dpbNEpMahkqjhY5lIFqXig E7lPtSF/i0fGGVVB1HHnwa3dFt/Jza6jljS76QOD8TgdGs2yTVqjBqjAlZeGGiKxhIgr kJ4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059422; x=1786664222; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=3J0zUIaWZrZleLZttsrL9ykC8Y4xnIiv8MkXpJdWFpw=; b=TOoV0FrRPrKn14Jq0J7vtNzLHgWjj5GwHLAK53Vh5YSLAyWAriv3Oje1K6WAY0MnZa +BBrk6LZbfuceAhbT6LcCNOgHYu0DreXSaIEFRbWSZACjqWcqVdQzesopPL4hUx6qQfq ClB3WRbNbVLrNRUQX9ZXY4xmDOTHRGyEzvcAAWb4gaWTEURt+rUp/CWVfCibXOKPEcbh G1wrTXM45kXByjBBHnYVOMrfBAEYTuCeydoSgDqZdjkneJp4ULZ/JPGm7VT/lVNzsqoq Gm4MJf0RkjGvsVQaVbiTOj1CcyyoCeho1CPJUt4AWd3F2/HHrX3J35B/JomlqEBfpkrT YErA== X-Forwarded-Encrypted: i=1; AHgh+RpLdkrgJyUyqIN9+DS1QwB3UbI1eyojN3w8VuAoRNPkrn7m9qAoWHTl+n09UH8jHX3kWjpZiltYLX/k1y0=@vger.kernel.org X-Gm-Message-State: AOJu0YxKWgtZPHohtU8Gz2tutvpYF2aWywpfoktVcmjRjB/m1+CxzCVO GIpSQbQu3xF/9LhRTec5gDiuEC6Jhr13TRqmV2dr5CT9aWOeyHzQ5y6OjS3JIZVxPfK8+QgeKlI fpKfjWw== X-Received: from pfbcz13.prod.google.com ([2002:aa7:930d:0:b0:848:2e05:6161]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:a58f:b0:848:3fe2:c88b with SMTP id d2e1a72fcca58-84f2dfc8fa4mr23126519b3a.6.1786059421552; Thu, 06 Aug 2026 16:37:01 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:47 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-31-seanjc@google.com> Subject: [PATCH v6 30/51] x86/paravirt: Remove unnecessary PARAVIRT=n stub for paravirt_set_sched_clock() From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Remove the unnecessary paravirt_set_sched_clock() stub for PARAVIRT=3Dn, as all callers are gated by PARAVIRT=3Dy. Eliminating the stub will avoid a pile of pointless churn as the "real" implementation evolves. No functional change intended. Fixes: 39965afb1151 ("x86/paravirt: Move paravirt_sched_clock() related cod= e into tsc.c") Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/include/asm/timer.h | 3 +++ arch/x86/kernel/tsc.c | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/timer.h b/arch/x86/include/asm/timer.h index fda18bcb19b4..c71b466d6ace 100644 --- a/arch/x86/include/asm/timer.h +++ b/arch/x86/include/asm/timer.h @@ -12,7 +12,10 @@ extern void recalibrate_cpu_khz(void); extern int no_timer_check; =20 extern bool using_native_sched_clock(void); + +#ifdef CONFIG_PARAVIRT void paravirt_set_sched_clock(u64 (*func)(void)); +#endif =20 /* * We use the full linear equation: f(x) =3D a + b*x, in order to allow diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 4c5328d19ebe..e0bea58b6658 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -288,7 +288,6 @@ void paravirt_set_sched_clock(u64 (*func)(void)) u64 sched_clock_noinstr(void) __attribute__((alias("native_sched_clock"))); =20 bool using_native_sched_clock(void) { return true; } -void paravirt_set_sched_clock(u64 (*func)(void)) { } #endif =20 notrace u64 sched_clock(void) --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0CCF84A7018 for ; Thu, 6 Aug 2026 23:37:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.199 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059426; cv=none; b=p8ivWoyqEFKjmkQJtKkVBd/zf7uMuphfe+0eptKbYPLnt6XfPPeTG01f27eQMmEMIZsrEuXLTPl3vCXFyWgizux1DblwjxFINIy7NSEi3/rxRNyO3UvLs5f4pP4u2OXzTXAPIXdjWPXSFFGsf06uP7kX+WHc9n5Clws3cC6EQsU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059426; c=relaxed/simple; bh=7Ni127rSaslOe/bH/SkQRKT4uzjuSgi5+t8RjZ9/edE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=GOTLbXybDCBmTeL4/FGnElWLdFaRfcbbAdd1GkqK9bD8dSO0d6iyqXUmoRBdSsgwoeC0AjMyiFhVlve7vsKcdY2xtodEXywhHZT/uu+f7hpB9FmI2YSha/MRdrLH/Cjlwxx91gwVr14pF2oS4ZNDj/icxC8IgzFNtLCXZPxljWk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=fC4t17DJ; arc=none smtp.client-ip=209.85.210.199 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="fC4t17DJ" Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-8485b7e18b4so4624952b3a.1 for ; Thu, 06 Aug 2026 16:37:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059423; x=1786664223; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=vn6W6kHEL1s4RiTIjTKhQPQXVLtQ6/4gpgI7E1htjZ4=; b=fC4t17DJ0Q+dZ3arJoGnGuHXohGjx+TR5z5FpGzdelyxS/gBy9ldXOIL5e7GmrLXkT QnNS+R8GXMv/WwZAavPSTttrGAWflgAcXxSebj+oype18kVKJj37iZSWvsMb+4lKg0OC AaZr7MvLL+4CdQQSoQStP10j3MyEcxUnFe/pjZ74z1XQQL6j2jatKtZDnZ5s4cKEjr8u J0dvG9+qBBMzS9PJctLRtLiy7zkcYSL5gEDrZAg26K6QBcGFh8d1qx/dGXB+65EYubTA JBl36sdwSqd68FxQ5wAKIkqN3BZI50hJa08h9kTBg7Gf1g6FKSMMoUDzlBL4/4/GD8/B kWiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059423; x=1786664223; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=vn6W6kHEL1s4RiTIjTKhQPQXVLtQ6/4gpgI7E1htjZ4=; b=mgYuLJGGnvGv0mXgoiiQD6aDo3hPnU1cEnLizm5lqjNgP6l27b2PO8fnRapLDNS7vr MvX3q/WpBbSvZ/AKMow0jLvC5YWiCHagArOE09mmAexon4RXAAsZuAnGahJVei437+Qo PfF51ceebqlJazePje0C+5XS6JCF1d9jUq53lm2wSXpTkwX24QwvwMBS1G+q4Yl9NjuA Vr0NVJgHfMnUHc3xw3YqSn08AOTVJNqyJfiNYiOEw0d/P5zqwgKyR9nQfNobwGOdSj/8 dApZGAqvhoEWLHJ1xDzOnO7Oe70vyl4EngRdJeuXqy7Ls/+YBDqADvz0YtEEaUwXE4IX epbw== X-Forwarded-Encrypted: i=1; AHgh+RrQ5OdrR6YFtHFw7SbNoHyyi9n8cFazVFiFtLQQsJNKF4fRUQoa7UvxUmUEjEXSoLkibLN42FY26WA15/0=@vger.kernel.org X-Gm-Message-State: AOJu0YwfZkQzKTh1Sk5W6AbUMRzNBtSDWF6Y2ADP1nbccbWX5fRjGMtG TXnDG66a0pvH8Tn5OV6/KcBd9aIVr+8MLRSttbz9mVEtDqPb6Vh2/77buTj9kvVmy5uMPv2KTlV /C3iqew== X-Received: from pfbbx10.prod.google.com ([2002:a05:6a00:428a:b0:848:2e0e:62e]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:1daa:b0:848:401c:98e with SMTP id d2e1a72fcca58-84f2e0432a7mr20883954b3a.15.1786059423013; Thu, 06 Aug 2026 16:37:03 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:48 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-32-seanjc@google.com> Subject: [PATCH v6 31/51] x86/paravirt: Move handling of unstable PV clocks into paravirt_set_sched_clock() From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move the handling of unstable PV clocks, of which kvmclock is the only example, into paravirt_set_sched_clock(). This will allow modifying paravirt_set_sched_clock() to keep using the TSC for sched_clock in certain scenarios without unintentionally marking the TSC-based clock as unstable. No functional change intended. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/include/asm/timer.h | 7 ++++++- arch/x86/kernel/kvmclock.c | 5 +---- arch/x86/kernel/tsc.c | 5 ++++- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/arch/x86/include/asm/timer.h b/arch/x86/include/asm/timer.h index c71b466d6ace..fe41d40a9ae6 100644 --- a/arch/x86/include/asm/timer.h +++ b/arch/x86/include/asm/timer.h @@ -14,7 +14,12 @@ extern int no_timer_check; extern bool using_native_sched_clock(void); =20 #ifdef CONFIG_PARAVIRT -void paravirt_set_sched_clock(u64 (*func)(void)); +void __paravirt_set_sched_clock(u64 (*func)(void), bool stable); + +static inline void paravirt_set_sched_clock(u64 (*func)(void)) +{ + __paravirt_set_sched_clock(func, true); +} #endif =20 /* diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index a3ec298d56d7..4bc0495f1f9e 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -12,7 +12,6 @@ #include #include #include -#include #include #include #include @@ -115,10 +114,8 @@ static noinstr u64 kvm_sched_clock_read(void) =20 static inline void kvm_sched_clock_init(bool stable) { - if (!stable) - clear_sched_clock_stable(); kvm_sched_clock_offset =3D kvm_clock_read(); - paravirt_set_sched_clock(kvm_sched_clock_read); + __paravirt_set_sched_clock(kvm_sched_clock_read, stable); =20 pr_info("kvm-clock: using sched offset of %llu cycles", kvm_sched_clock_offset); diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index e0bea58b6658..964f3d6c2c71 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -280,8 +280,11 @@ bool using_native_sched_clock(void) return static_call_query(pv_sched_clock) =3D=3D native_sched_clock; } =20 -void paravirt_set_sched_clock(u64 (*func)(void)) +void __paravirt_set_sched_clock(u64 (*func)(void), bool stable) { + if (!stable) + clear_sched_clock_stable(); + static_call_update(pv_sched_clock, func); } #else --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2D8084A8210 for ; Thu, 6 Aug 2026 23:37:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.199 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059427; cv=none; b=V0jax5dLStffWAkzVmVG70x8qlzkXRe2LbW94Ie5mN/oMVTzVAUnbhQYZYFnRZMiX49ga4WyE0BFUAGCaxuK2ndR+PuspT69qrLoT5AAFkfaGB3SYjfqlNmDGIf6gC6Hiu0IJcaxo+SxmmVF8S2ZUgGAo9DcvNSo8yPwLkSyE1E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059427; c=relaxed/simple; bh=Ca5NSaZv9qqo48HD9EV20yk4xb4Lp+1A39egJhJXjjk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=SIzv+0cWo8ZOquikdLPv2Uvl01Vc/8tHSdJcyPO+Sm3hSWGJUvj4ArOPKTE7T8SJr0a2/unN0eDXPl45FwFSAiKfqzHkIToaf9AZaAMs2wH2oRKXquCUAKRqdpuL+lMomCAj2acm5J05RsIvfwwde//t5YTNRPeITbQ38qcWkcw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=axYD9JPi; arc=none smtp.client-ip=209.85.210.199 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="axYD9JPi" Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-8487ed7f7beso3066704b3a.0 for ; Thu, 06 Aug 2026 16:37:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059425; x=1786664225; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=EB+XxHVCdw85PrkaMnB06pus7nsirHAVeqpBTRH+yt8=; b=axYD9JPiBN+vUhOUseQksVmSY6Eb5yoCdJaPO+h9BSbqX7pYsBYbCWiVxoCHG7o8I4 xdx6SBMMtI/tTVxRbSYgkO1WPR4p/rb6gDnIAeI7M7wjFJZaCR5UOibmdLej+ZzjXhfP sHxsAz1CqhgAc/bLPEAuORyFfjxtZFeAspOel9RzCx8Y+N6yOogOd33n77VQOZ8rpTK3 PPLeSJPhrCVt+aof0FzncLexDL8XmrsWFcZk4ra8rZTsGr7HobnQ9V8OsDVgJpZ033YR Sub5eAl7yC10ZW4JdCZmUh86iCfRINW4xYjFizjFbpaYbR2X1ZyeikhPmcp0G8TKK5/1 Fggw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059425; x=1786664225; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=EB+XxHVCdw85PrkaMnB06pus7nsirHAVeqpBTRH+yt8=; b=Fj1WUrv2EoXH7ySia8NODIzJKPeAYa0DkADBq/BkhaRFhql0lIKiw1C7+bT4jlCJ8G KmjmHpxscF0ZwVTZpn86g21cZn2vMAbdBnOJFoDhGCvtxNr3G4HGh5oFxkRDfoZ93lMH gVCGiy5m3tBnAlYaX1epfjPO1PcHMZiap2mqHlbsINA94QAjD/3zInmv5F+6A+Pfgo9n ++mmqch/cY6SfsyqHauj3WN5GrqmVnOh58p1FEwHCSQIZdJNAPNyCUbjnSD9yYu4ZWwU 6pSZZsCU60Vhub28++VDNxzVDEoQFjWl9sgM2MSz2sLupU53Pv/J56BDge0Sie/1WYJz kQVA== X-Forwarded-Encrypted: i=1; AHgh+RpMfpcTX1qHuGPiw3L6QOxN8xfvUygEnwSlHG0BVZ/R3LREsY8KHfcqikLSFzLr0sJuUmFik9OrOGwvW+w=@vger.kernel.org X-Gm-Message-State: AOJu0YzTD12+ha3rZEbBzruuyunjP4ECkNmrMwFTjm5rMX+psFXGy34i 6D3xF3OmzAsyaCyCCH51xODlhkvOgu4/nCE0+stSYpnMeb/KwXQ7G1pTXWUj8BGOhRwed3y/dhZ J+L/p1A== X-Received: from pfbmc40.prod.google.com ([2002:a05:6a00:76a8:b0:84c:1460:ab72]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:2441:b0:848:5951:ff78 with SMTP id d2e1a72fcca58-84f2e1525d0mr19690745b3a.36.1786059424271; Thu, 06 Aug 2026 16:37:04 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:49 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-33-seanjc@google.com> Subject: [PATCH v6 32/51] x86/kvmclock: Move sched_clock save/restore helpers up in kvmclock.c From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move kvmclock's sched_clock save/restore helper "up" so that they can (eventually) be referenced by kvm_sched_clock_init(). No functional change intended. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/kernel/kvmclock.c | 108 ++++++++++++++++++------------------- 1 file changed, 54 insertions(+), 54 deletions(-) diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index 4bc0495f1f9e..07e875738c39 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -71,6 +71,25 @@ static int kvm_set_wallclock(const struct timespec64 *no= w) return -ENODEV; } =20 +static void kvm_register_clock(char *txt) +{ + struct pvclock_vsyscall_time_info *src =3D this_cpu_hvclock(); + u64 pa; + + if (!src) + return; + + pa =3D slow_virt_to_phys(&src->pvti) | 0x01ULL; + wrmsrq(msr_kvm_system_time, pa); + pr_debug("kvm-clock: cpu %d, msr %llx, %s", smp_processor_id(), pa, txt); +} + +static void kvmclock_disable(void) +{ + if (msr_kvm_system_time) + native_write_msr(msr_kvm_system_time, 0); +} + static u64 kvm_clock_read(void) { u64 ret; @@ -112,6 +131,30 @@ static noinstr u64 kvm_sched_clock_read(void) return pvclock_clocksource_read_nowd(this_cpu_pvti()) - kvm_sched_clock_o= ffset; } =20 +static void kvm_save_sched_clock_state(void) +{ + /* + * Stop host writes to kvmclock immediately prior to suspend/hibernate. + * If the system is hibernating, then kvmclock will likely reside at a + * different physical address when the system awakens, and host writes + * to the old address prior to reconfiguring kvmclock would clobber + * random memory. + */ + kvmclock_disable(); +} + +#ifdef CONFIG_SMP +static void kvm_setup_secondary_clock(void) +{ + kvm_register_clock("secondary cpu clock"); +} +#endif + +static void kvm_restore_sched_clock_state(void) +{ + kvm_register_clock("primary cpu clock, resume"); +} + static inline void kvm_sched_clock_init(bool stable) { kvm_sched_clock_offset =3D kvm_clock_read(); @@ -124,6 +167,17 @@ static inline void kvm_sched_clock_init(bool stable) sizeof(((struct pvclock_vcpu_time_info *)NULL)->system_time)); } =20 +void kvmclock_cpu_action(enum kvm_guest_cpu_action action) +{ + /* + * Don't disable kvmclock on the BSP during suspend. If kvmclock is + * being used for sched_clock, then it needs to be kept alive until the + * last minute, and restored as quickly as possible after resume. + */ + if (action !=3D KVM_GUEST_BSP_SUSPEND) + kvmclock_disable(); +} + /* * If we don't do that, there is the possibility that the guest * will calibrate under heavy load - thus, getting a lower lpj - @@ -183,60 +237,6 @@ static struct clocksource kvm_clock =3D { .enable =3D kvm_cs_enable, }; =20 -static void kvm_register_clock(char *txt) -{ - struct pvclock_vsyscall_time_info *src =3D this_cpu_hvclock(); - u64 pa; - - if (!src) - return; - - pa =3D slow_virt_to_phys(&src->pvti) | 0x01ULL; - wrmsrq(msr_kvm_system_time, pa); - pr_debug("kvm-clock: cpu %d, msr %llx, %s", smp_processor_id(), pa, txt); -} - -static void kvmclock_disable(void) -{ - if (msr_kvm_system_time) - native_write_msr(msr_kvm_system_time, 0); -} - -static void kvm_save_sched_clock_state(void) -{ - /* - * Stop host writes to kvmclock immediately prior to suspend/hibernate. - * If the system is hibernating, then kvmclock will likely reside at a - * different physical address when the system awakens, and host writes - * to the old address prior to reconfiguring kvmclock would clobber - * random memory. - */ - kvmclock_disable(); -} - -static void kvm_restore_sched_clock_state(void) -{ - kvm_register_clock("primary cpu clock, resume"); -} - -void kvmclock_cpu_action(enum kvm_guest_cpu_action action) -{ - /* - * Don't disable kvmclock on the BSP during suspend. If kvmclock is - * being used for sched_clock, then it needs to be kept alive until the - * last minute, and restored as quickly as possible after resume. - */ - if (action !=3D KVM_GUEST_BSP_SUSPEND) - kvmclock_disable(); -} - -#ifdef CONFIG_SMP -static void kvm_setup_secondary_clock(void) -{ - kvm_register_clock("secondary cpu clock"); -} -#endif - static void __init kvmclock_init_mem(void) { unsigned long ncpus; --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pf1-f197.google.com (mail-pf1-f197.google.com [209.85.210.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 66D264A823F for ; Thu, 6 Aug 2026 23:37:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059428; cv=none; b=EWNWDfwFbqZJ7ZhVZNbnPoLiX3E9NxpKURKpplfMVnREtPjmzswQPeNcckuzagpKoRluF8DmA/6U4fCiXd3vBemPI6WgVeTkpu+yAzgDo0akkGcYoGyLDz80o9cOKqzinseWI0r9tTynmNfFjKfJMxIU9tDC8z9Aj3/Ffwwh++c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059428; c=relaxed/simple; bh=0rWeo5U3RNZ9xcYSG/uqkjOEU1OGp8V9JrAfTrxuqfU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=HLWKmHBjTKKapZkFP5sq4PnZ7fcV/TYyUtr5m4BOKsUJ7TYSDhmSK8EpbI8VmLQAt94PgP95Dx0CGIuwVVUmj4qyMMNhLw8o+wKOAKu1p1RqlxlN8e7jRfDx4gl+sRu2dJRZMb6vYzN9FApU1poCxG32HsgVARe73RYlaUjNf0I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=Hxfwyjn8; arc=none smtp.client-ip=209.85.210.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Hxfwyjn8" Received: by mail-pf1-f197.google.com with SMTP id d2e1a72fcca58-84a251c2e3eso1816044b3a.1 for ; Thu, 06 Aug 2026 16:37:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059426; x=1786664226; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=7lbZxAdhwKhuj6TvbAGr7x+TgvyyRrRPdrrP8vwGefI=; b=Hxfwyjn8PX0Ni3d5BEm4Xr1Omu7JPIhsk3Iq1vp0zLEaZ2nYvAHWSRlMOsyBPagYWR Du7lhhWjAl8RVO9Q0pJoV+4+LvJMu6rh97KjyJK+rd36iZGmR3lUKYcPekzugsg+Svfu SRA3fVQxP1wKEgdygBT/rqCOfDYiwY3FaUYhKfSR+c3rrJ8uh4aquCkp/H75h0EGr3PT g5dGQVi0krKx+PfKjbeeabKmTWBmH0Hih+pJPnReZNWK+I9VmOBp/e0u2x61RfVu0GHt RW/f/1r7BzrIrf8crL80e9bYPbR1OgMFJSUIbvA6EL7LcpPQLAqusJuHxByJ5Zwzi0nF pQ0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059426; x=1786664226; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=7lbZxAdhwKhuj6TvbAGr7x+TgvyyRrRPdrrP8vwGefI=; b=gRID/3i8g5ynIoD+43Pa1d1UmfZlESPX6tiGIxm0UrT1fvXReVFzurJWPBUuIaMBv6 lrSSpk219burFOkCgchjmcvkmsTrn7C79euz3Zp6kcp4D8ki5gCaLF4ca6aEllci6ztb hLpI8KY4+v9K6Rdg1hjvdzS/hXEDjmfxh0WBpvxPv2mNxNuQOPkueEj4yvCiZ/iSNQ84 m1OGpibKAHCEYgHzIAEWQmrjFBNK2ZQVpTU+yS7qkb1QhJ8aMxNitQwSM2KLg241JrHz hkt+HUH5Vkkc3mqLqHzMhQEt4yxqM+x9OstjvmsgUy0alKbTnop+P4vFejhDhv2NYIwC vyZw== X-Forwarded-Encrypted: i=1; AHgh+Rqjg6iy5JC044Q37YgXKmNV2wE657wIDk+YMUmmmLMqUr1ChKh12lDtqNkj2nYkgzG2yab28My2Lm1RhYk=@vger.kernel.org X-Gm-Message-State: AOJu0Yz2XrlSxTL5STq7FZKP7cZdxwIAyelLv/LgOWdU2zYI7rRKSrXX UKEzlzupoD4nvq42R5jnUBX9a32zlF5ItGFxfJeuK3DzyomyRgB2vSgyOq34uPvoi3JrRm+IV3t 8kuHjBw== X-Received: from pgmt23.prod.google.com ([2002:a63:2257:0:b0:c86:61a1:3390]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:7105:b0:3bf:651d:fee0 with SMTP id adf61e73a8af0-3cba2b5d6a7mr10015839637.19.1786059425491; Thu, 06 Aug 2026 16:37:05 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:50 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-34-seanjc@google.com> Subject: [PATCH v6 33/51] x86/xen/time: NOP-ify x86_platform's sched_clock save/restore hooks From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" NOP-ify the x86_platform sched_clock save/restore hooks when setting up Xen's PV clock to make it somewhat obvious the hooks aren't used when running as a Xen guest (Xen uses a paravirtualized suspend/resume flow). Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/xen/time.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c index 487ad838c441..477441752f40 100644 --- a/arch/x86/xen/time.c +++ b/arch/x86/xen/time.c @@ -567,6 +567,12 @@ static void __init xen_init_time_common(void) xen_sched_clock_offset =3D xen_clocksource_read(); static_call_update(pv_steal_clock, xen_steal_clock); paravirt_set_sched_clock(xen_sched_clock); + /* + * Xen has paravirtualized suspend/resume and so doesn't use the common + * x86 sched_clock save/restore hooks. + */ + x86_platform.save_sched_clock_state =3D x86_init_noop; + x86_platform.restore_sched_clock_state =3D x86_init_noop; =20 x86_init.hyper.get_tsc_khz =3D xen_tsc_khz; x86_platform.get_wallclock =3D xen_get_wallclock; --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C22214A8C6E for ; Thu, 6 Aug 2026 23:37:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059429; cv=none; b=d/EGIYrgDvKTIXwk0MRVsMSh01C9dLgX2yXzDfTvWIpZPQrui2aZHdl0mTH0ugecG542KXOwlpfIJpsZ4xrgux5Ue5rthIIzFoaID1dljGXvKG1ZroiIYMrt0SwGLBLYwxHwyr9kNkVdsP5B1gcTKnrvLGsptb8eakUP2u8qc98= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059429; c=relaxed/simple; bh=oL4k89x+CtNtrtSN/chXxcI7VW6e8o1GiS+d7EOGh0Q=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=gAxD1H9MWpa+5W5AQFU/yeouQpD6fBJ1RBp0XLoDoodMSHcox8CaGBtqT1GLf4MzHhfsrXOr7IeGRoQQwwPWnYyvNqnPO9xP4HpCYsDmm19d0aIgkzBAxSDj/etmxukR1BA9Man0wkx+XcDOGrsga/nLzAnmfJXV77g3NuZm/b4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=kt10IjlE; arc=none smtp.client-ip=209.85.214.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="kt10IjlE" Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2cfa4e4684bso67531365ad.2 for ; Thu, 06 Aug 2026 16:37:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059427; x=1786664227; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=f+UXuTD6z7zajVoSPLixW+N3kzbQtDvz4+hCO4pCJ+c=; b=kt10IjlEPSYMAwmb+8BxRvPl3xR9fCb7HCn283P5bBBL99NGuZ8JwWOrvjqTLYyuE7 08v/WZP/kUv+rfr3lARtq/VUHbsYimPFyTuZMrynWxxn+IY1lAEN1yriQp4yicZ6rrNm ngH5+vAXawVbRGz7X1a01/zIN/rFnBAPgktW/c22V/i31Eh8au6yJeg9E3aVB8KNSy5w eF4xkFnZevrMdUg06k1wNsNHXumiyJ9Ph+JoxmUTpVEOcPd8FF6D4yGNnCaUdEufwZ2O xICH+Bd7TyKgH9DfkWpkEeLCwBhDe7PPzMkMZrXJgjKjxU9kUi2sQib1gXKggBhLOB6n yD9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059427; x=1786664227; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=f+UXuTD6z7zajVoSPLixW+N3kzbQtDvz4+hCO4pCJ+c=; b=mB0q5oDT2LP9r8/3nYhJpTkqh2SHrE5uSn3+LzCJtBQbdjDPxm0Fdb5C6+RvZpLcXB 4Gc9L+/KUbcS97fGupaGCjo53hCM8U3D62uEzFGry9+q4PeKCoEUTFd+Zsx6nRWyTy8i 7tiTHOsoeKMJULYk4a+SHOJwaEQICi6HJYZ7C/sx4rLNylrVJVfTJpJtmqpLeaK5Tpdd 2ihFkuMcKcftE5IHRnZhW3lrYD513gKZCYE5rGVsfGx8qF1vMAjj0M6BQ52LeuUzfRGk WVKjT3RiC1s+kkBwha2379r7ergTCPgYoxDdODpt5Oxvh205w64Mw4QaP6hN28rS+9hY /nZQ== X-Forwarded-Encrypted: i=1; AHgh+RoqmSbxzRuYUTKXEnHSR9vd6BIHlP1LKgvrhY/2y3412Hf1+/6u4NgLp2pUW0DkE737QPinzwsW8KVZUKM=@vger.kernel.org X-Gm-Message-State: AOJu0YxAM1XZ08oKJ0lFzN0bP0Cxtdw95F1ROlgJzjm7lglZLjyBCh/3 KTaz88V19vu/EfHHByCDVL6T+eFy6686HOjV8HMuyesrfYb/gwAE0YQMqzUCfzBeV7AcHfRtmFT 0LqK6eg== X-Received: from plbi11.prod.google.com ([2002:a17:903:20cb:b0:2cc:6da3:442d]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:f546:b0:2cc:aa36:c046 with SMTP id d9443c01a7336-2d0ca77ece3mr197228075ad.14.1786059426608; Thu, 06 Aug 2026 16:37:06 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:51 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-35-seanjc@google.com> Subject: [PATCH v6 34/51] x86/vmware: NOP-ify save/restore hooks when using VMware's sched_clock From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" NOP-ify the sched_clock save/restore hooks when using VMware's version of sched_clock. This will allow extending paravirt_set_sched_clock() to set the save/restore hooks, without having to simultaneously change the behavior of VMware guests. Note, it's not at all obvious that it's safe/correct for VMware guests to do nothing on suspend/resume, but that's a pre-existing problem. Leave it for a VMware expert to sort out. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/kernel/cpu/vmware.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c index cbe8b59ab79f..94fec990a02c 100644 --- a/arch/x86/kernel/cpu/vmware.c +++ b/arch/x86/kernel/cpu/vmware.c @@ -347,8 +347,11 @@ static void __init vmware_paravirt_ops_setup(void) =20 vmware_cyc2ns_setup(); =20 - if (vmw_sched_clock) + if (vmw_sched_clock) { paravirt_set_sched_clock(vmware_sched_clock); + x86_platform.save_sched_clock_state =3D x86_init_noop; + x86_platform.restore_sched_clock_state =3D x86_init_noop; + } =20 if (vmware_is_stealclock_available()) { has_steal_clock =3D true; --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 04B834A8C9E for ; Thu, 6 Aug 2026 23:37:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.71 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059430; cv=none; b=lOeoL9zaz/DaEl8p2WTRKHd97LDPSLmwY7oaMl0YoZw9ejHcvx5AlKpUKEXipRHLyMJunzC99ZcHZeiEPWGPMtVkD9KWhHKMjdU98f7GZ7BbaHMlqafVDd4kyb4jBhdG7M/4c+CU1nYtb1K8zHc5iMIj3u11ht8DDmmx/CumaWs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059430; c=relaxed/simple; bh=sbzLks0rCz/Y4FC4JU4m7+dMymRO89Rs74fjqXQ5fdM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=m/HTKssyZAZwbjFSnrExOi6apFLbJwpK4NTJip3uNRNnNhrV1CD0b81YGqqdpPKoZoTaqdHQgS457yH/Z7lwMIogK53UaKvnp5a0G8zCvfhLPhZacJpWksJWnsnbNnO2uCJ8pMahYEjju/W+TbAuK3Rnq9eCFhjz6trvXV3mB90= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=nJckNCrX; arc=none smtp.client-ip=209.85.216.71 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="nJckNCrX" Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-38e7b87ce77so3016069a91.0 for ; Thu, 06 Aug 2026 16:37:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059428; x=1786664228; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=aQ8musMrPFB3W7GZXrEzufcFO/9G0XUPjz13+bRyF/M=; b=nJckNCrXHLPKAPj629XD4b9gQYhz5Jc0ZOiEvrsNVBmsjvMRHIKMCd5KngSkLsPDVa B+r2QKJxzmfFMy9pE/d0JymcKlm9w7vXKzkOL+lh0UxIpcKrjL2PKhGNN8HQW6xGfhV8 OL+D1VZZSzSy1iqxzN+Rr92/Dy0CnDK0jEWPFIh1AJBevWFtyVTzmpCzwcXzfoDy/wQE NKPrj/kI9KOct6sxgG9OjLljQBivdKiiAfRrwu6bDEmhEyUXB5TC4fCGP4osZqzqapQU n56GAFhUirPBwLJWa/7Y28xXNsHijxL/XBp9hed1TyR4gTfv2+bRII/ySd5dYOEph3PS mlXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059428; x=1786664228; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=aQ8musMrPFB3W7GZXrEzufcFO/9G0XUPjz13+bRyF/M=; b=ITJhOaatSrbcpWiRo8+CHLdPPD4BwTvMgfQrnXkmzSh3F5UY1trwkDUAiObW6FQ6iE CDxZgCsgRHbr5NHDN5TYMwPQPK3mSzsAVmFCaIvMMnceCqFYuu7GxLX/U7dVxipR/4uz 9tuKJboMMZd1XUBtB4bCnycA7gvI6rH3ZheOBfapgyd6dFcvO24OIYkNwJ3sAQGwbqpq RaP8ch+P5cyzASKRHTzb0Z40wgo8+DPcmlSincokUcWe7/HveM342VSZqlSw/BWPskxG 8dzH1UikYxjzpGapncOX8OQtGA2kmambnkvWCZryV8nmJ1MZ9vT0nzuRJ+M6Hw/nfv/N kpEw== X-Forwarded-Encrypted: i=1; AHgh+RrdqHfaZd8+IeL2aePMvkJN6JbqSzl/o6PLl1nNJaCgnKb4yXiG543b1555tWwCpF73r3mcsUdABFbVdpo=@vger.kernel.org X-Gm-Message-State: AOJu0YzT0LfGraKrTuFlV1U2ZdzZyNBVt1pHrLW7g80cQ8vfBvN3cL2g zKkhf0r5MxS0HtTIj6JC8VHTvQRUuM6AWiygD9K/Ei1DnnMShGRFFy++61WPVjZt4V684DABs9O fhUgqMQ== X-Received: from pjpq20.prod.google.com ([2002:a17:90a:a014:b0:38e:befb:90c6]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:264b:b0:38a:c3f:3b87 with SMTP id 98e67ed59e1d1-3903c58a6femr19988163a91.12.1786059428057; Thu, 06 Aug 2026 16:37:08 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:52 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-36-seanjc@google.com> Subject: [PATCH v6 35/51] x86/tsc: WARN if TSC sched_clock save/restore used with PV sched_clock From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that all PV clocksources override the sched_clock save/restore hooks when overriding sched_clock, WARN if the "default" TSC hooks are invoked when using a PV sched_clock, e.g. to guard against regressions. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/kernel/tsc.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 964f3d6c2c71..60fcc3020792 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -947,9 +947,17 @@ EXPORT_SYMBOL_FOR_MODULES(recalibrate_cpu_khz, "p4-clo= ckmod,powernow-k7"); =20 static unsigned long long cyc2ns_suspend; =20 +static __always_inline bool tsc_is_save_restore_needed(void) +{ + if (WARN_ON_ONCE(!using_native_sched_clock())) + return false; + + return static_branch_likely(&__use_tsc) || sched_clock_stable(); +} + void tsc_save_sched_clock_state(void) { - if (!static_branch_likely(&__use_tsc) && !sched_clock_stable()) + if (!tsc_is_save_restore_needed()) return; =20 cyc2ns_suspend =3D sched_clock(); @@ -969,7 +977,7 @@ void tsc_restore_sched_clock_state(void) unsigned long flags; int cpu; =20 - if (!static_branch_likely(&__use_tsc) && !sched_clock_stable()) + if (!tsc_is_save_restore_needed()) return; =20 local_irq_save(flags); --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6673C4A970E for ; Thu, 6 Aug 2026 23:37:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059433; cv=none; b=XIVJisV6N+fEnFdktnvfxDFofZw4yZlatj466PjxBOUd8kDKbw7zr57+LhBBFnoJAQjxr6KS/I2KwmbHl99aRLo4ipnYlWX/Wt2CGZNlinJBIMbZUbglxZMD4F1IloJ1IKdg8K+ZdEaH/XeyPlgighM9WFOG9R7dq4P6DuYWRHk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059433; c=relaxed/simple; bh=YgMzpUMx8xHWU9hl5Ir/Bh8NISf16vz/qFAMq5wPe60=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=ev5V8A9KWzTMQK8Ft9XU807UqR8ChJLv5uOQVjArxgF0eInwGtJMBunyBWeDsIRC21J4gnjMG0wteD8aQxYRFw/9PoOuFOOBZRS0Sk2vlKPASrotfVZplJMxIXtk6KewvnQ66iqO4wb7pOTng1GerT7FjA+A9EuVe+X/KmcImjE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=ClQQo/ZZ; arc=none smtp.client-ip=209.85.214.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ClQQo/ZZ" Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2cc6dd43737so50911305ad.2 for ; Thu, 06 Aug 2026 16:37:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059429; x=1786664229; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=bZd2/vTLw6kP6aan4oVP2ByAHPA3GmOMxUTn1c9gmLc=; b=ClQQo/ZZt0ERn7GAwCFBzrNJxLi2sBqvPKX/+QRZQF5Whlo/HnkkquvNzb4Xf2+Tq6 q4RQydWGuo9nPwpNDgRbZV6LshrqBLHDvU+HRliyf2978/2xq7/spP+ZxU1Z7nUDF2kI 8KTOy7roXJywFl20szT6sVv5BFR6Db13w33BZuWpgiZDRNj27Egua8gWcMOvFj61t6wW vFWsuh2krOYA4hWX9HZdhYdl0kvSojI74gNXCdr0xAxnvjYIBjjlPwKOHuTD6Le+5iTh Wz7w2VIg2Xm3OrZTY3VDa2GPgleLxTNdY3gjodJE8M3sk6mYENgMqiX1pLe8g9nroL75 TX/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059429; x=1786664229; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=bZd2/vTLw6kP6aan4oVP2ByAHPA3GmOMxUTn1c9gmLc=; b=QeQ4sCe0f2mRHIMhDN0gF8+XMFz74zZuFBeGLbkXJiZIVYPdjmMqkh33Uy1enX3yP7 cdRtRn4HJFFToIXCUOHgiEWKVZnhSVQHrjpwuBjWLpuJD6CtJbd/gxEfh8J3aqr540TQ ozl/nXADz7HrNs2S5kD7yZAh+KyADyMHO1BUCCfrNCJSEgGbfkhK7WXq/EYsRyGms+ee Rv8CjtjVvqHQwdLDsoSQMGltpLH3y7cz5E0znVqKk+8kS7X51lpL2Er06hqfAgb6Wvm/ spMsEtu7V4rVDjkOSTbX1EojX9FxCQnlxZ77Pg0hNQwtyttqkQvg4lkZjAS1xAuCfe8k UN5A== X-Forwarded-Encrypted: i=1; AHgh+RoJtS86QyPWAD8pig9gOzooVc/eHH44jmTmPTmsgtmsQas/Qy1gM81QCQLgDDi/luWnexrKU+O+/boOf1k=@vger.kernel.org X-Gm-Message-State: AOJu0Ywg9Bni8Wg/6c1FCU+kIyT2A5NItRm4xUtmT8pDd38T6dQhKJBd myzm44NG9oOSaJARMyt1zyOqFx1QKIrNHO02DI2TofhS1MkIVNKUh4b+yL1oOMo2wVFktf/bp63 gX6i+Lw== X-Received: from pjtz20.prod.google.com ([2002:a17:90a:cb14:b0:36b:7f07:6fcd]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:1c84:b0:38f:1e1a:515e with SMTP id 98e67ed59e1d1-3903c5b1688mr16494071a91.14.1786059429092; Thu, 06 Aug 2026 16:37:09 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:53 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-37-seanjc@google.com> Subject: [PATCH v6 36/51] x86/paravirt: Pass sched_clock save/restore helpers during registration From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Pass in a PV clock's save/restore helpers when configuring sched_clock instead of relying on each PV clock to manually set the save/restore hooks. In addition to bringing sanity to the code, this will allow gracefully "rejecting" a PV sched_clock, e.g. when running as a CoCo guest that has access to a "secure" TSC. No functional change intended. Reviewed-by: David Woodhouse Reviewed-by: Michael Kelley Signed-off-by: Sean Christopherson --- arch/x86/include/asm/timer.h | 9 ++++++--- arch/x86/kernel/cpu/vmware.c | 8 +++----- arch/x86/kernel/kvmclock.c | 6 +++--- arch/x86/kernel/tsc.c | 5 ++++- arch/x86/xen/time.c | 5 ++--- drivers/clocksource/hyperv_timer.c | 6 ++---- 6 files changed, 20 insertions(+), 19 deletions(-) diff --git a/arch/x86/include/asm/timer.h b/arch/x86/include/asm/timer.h index fe41d40a9ae6..e97cd1ae03d1 100644 --- a/arch/x86/include/asm/timer.h +++ b/arch/x86/include/asm/timer.h @@ -14,11 +14,14 @@ extern int no_timer_check; extern bool using_native_sched_clock(void); =20 #ifdef CONFIG_PARAVIRT -void __paravirt_set_sched_clock(u64 (*func)(void), bool stable); +void __paravirt_set_sched_clock(u64 (*func)(void), bool stable, + void (*save)(void), void (*restore)(void)); =20 -static inline void paravirt_set_sched_clock(u64 (*func)(void)) +static inline void paravirt_set_sched_clock(u64 (*func)(void), + void (*save)(void), + void (*restore)(void)) { - __paravirt_set_sched_clock(func, true); + __paravirt_set_sched_clock(func, true, save, restore); } #endif =20 diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c index 94fec990a02c..3598de5297f8 100644 --- a/arch/x86/kernel/cpu/vmware.c +++ b/arch/x86/kernel/cpu/vmware.c @@ -347,11 +347,9 @@ static void __init vmware_paravirt_ops_setup(void) =20 vmware_cyc2ns_setup(); =20 - if (vmw_sched_clock) { - paravirt_set_sched_clock(vmware_sched_clock); - x86_platform.save_sched_clock_state =3D x86_init_noop; - x86_platform.restore_sched_clock_state =3D x86_init_noop; - } + if (vmw_sched_clock) + paravirt_set_sched_clock(vmware_sched_clock, + x86_init_noop, x86_init_noop); =20 if (vmware_is_stealclock_available()) { has_steal_clock =3D true; diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index 07e875738c39..5b9955343199 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -158,7 +158,9 @@ static void kvm_restore_sched_clock_state(void) static inline void kvm_sched_clock_init(bool stable) { kvm_sched_clock_offset =3D kvm_clock_read(); - __paravirt_set_sched_clock(kvm_sched_clock_read, stable); + __paravirt_set_sched_clock(kvm_sched_clock_read, stable, + kvm_save_sched_clock_state, + kvm_restore_sched_clock_state); =20 pr_info("kvm-clock: using sched offset of %llu cycles", kvm_sched_clock_offset); @@ -367,8 +369,6 @@ void __init kvmclock_init(bool prefer_tsc) #ifdef CONFIG_SMP x86_cpuinit.early_percpu_clock_init =3D kvm_setup_secondary_clock; #endif - x86_platform.save_sched_clock_state =3D kvm_save_sched_clock_state; - x86_platform.restore_sched_clock_state =3D kvm_restore_sched_clock_state; kvm_get_preset_lpj(); =20 /* diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 60fcc3020792..d4f7cb127235 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -280,12 +280,15 @@ bool using_native_sched_clock(void) return static_call_query(pv_sched_clock) =3D=3D native_sched_clock; } =20 -void __paravirt_set_sched_clock(u64 (*func)(void), bool stable) +void __paravirt_set_sched_clock(u64 (*func)(void), bool stable, + void (*save)(void), void (*restore)(void)) { if (!stable) clear_sched_clock_stable(); =20 static_call_update(pv_sched_clock, func); + x86_platform.save_sched_clock_state =3D save; + x86_platform.restore_sched_clock_state =3D restore; } #else u64 sched_clock_noinstr(void) __attribute__((alias("native_sched_clock"))); diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c index 477441752f40..8cd8bfaf1320 100644 --- a/arch/x86/xen/time.c +++ b/arch/x86/xen/time.c @@ -566,13 +566,12 @@ static void __init xen_init_time_common(void) { xen_sched_clock_offset =3D xen_clocksource_read(); static_call_update(pv_steal_clock, xen_steal_clock); - paravirt_set_sched_clock(xen_sched_clock); + /* * Xen has paravirtualized suspend/resume and so doesn't use the common * x86 sched_clock save/restore hooks. */ - x86_platform.save_sched_clock_state =3D x86_init_noop; - x86_platform.restore_sched_clock_state =3D x86_init_noop; + paravirt_set_sched_clock(xen_sched_clock, x86_init_noop, x86_init_noop); =20 x86_init.hyper.get_tsc_khz =3D xen_tsc_khz; x86_platform.get_wallclock =3D xen_get_wallclock; diff --git a/drivers/clocksource/hyperv_timer.c b/drivers/clocksource/hyper= v_timer.c index 220668207d19..8ee7a9de0f4f 100644 --- a/drivers/clocksource/hyperv_timer.c +++ b/drivers/clocksource/hyperv_timer.c @@ -570,10 +570,8 @@ static void hv_restore_sched_clock_state(void) static __always_inline void hv_setup_sched_clock(void *sched_clock) { /* We're on x86/x64 *and* using PV ops */ - paravirt_set_sched_clock(sched_clock); - - x86_platform.save_sched_clock_state =3D hv_save_sched_clock_state; - x86_platform.restore_sched_clock_state =3D hv_restore_sched_clock_state; + paravirt_set_sched_clock(sched_clock, hv_save_sched_clock_state, + hv_restore_sched_clock_state); } #else /* !CONFIG_GENERIC_SCHED_CLOCK && !CONFIG_PARAVIRT */ static __always_inline void hv_setup_sched_clock(void *sched_clock) {} --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 82DB24A8C71 for ; Thu, 6 Aug 2026 23:37:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.199 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059434; cv=none; b=NYY65UPIYLAbr53JzB9b+B7N8GG+v+mgClRJ0+r/+oUe8Zukd8wzTO22RE7LSJ1N87R5NabIqpc02xEwwYm0aM/fSFwLTF7KNz51vBrYOTfnjowgo6teeLJJh36OXWmJM99xOVd2TMRbHNzaFKrulh0gg5GMX1Pnz0G+K2SUnHE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059434; c=relaxed/simple; bh=xQeSz+UJSRzEJeUN758xlvy+p2UjlhjfQlkKcSNGiA0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=HJ/Ipe8PD2sv1KWyozQoHPsTuLKiCrOlxNtEqNB9tgKkOMD3u8JpQL42UO4wTI1T+v5PcA+UyPBo/JovdR5IlOiPjGWiI2MV+BRMLq4kLGz65c72ShXNqWcI97D1VvG7/a3AgJmgW0YaVjBZg4es6GECAF/+pOzGyHxY9J5brnU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=FxLtI8uT; arc=none smtp.client-ip=209.85.214.199 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="FxLtI8uT" Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2ce7dfd33ffso32942265ad.0 for ; Thu, 06 Aug 2026 16:37:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059431; x=1786664231; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=dLl1t0qRZTm556OBeVqKVx/DHfexmKODeXAiUOaDm4I=; b=FxLtI8uTpRMW3QsjAnJm+ORVKEpbSKKgwRYg5ddW/C+NUAk4Ci81ny7RUQmuh3+1OS HYmjrOCOz3QAjZYC9543vUexa1aJcsIj5LlnPRImZhdPK/OvRI9JPrkn3K5g8XjZnHgR Jfglss7Ka13TdAriw1cqYZxnz9+hr+ZMOQSs1gRieeNFVnnKaltdvtJGNGbYEv16zem8 4+jbBYz/NU9+/EVFg33nsyG/B1k1sIQHNt5MDATzODrJRupRKitPLlhi+Ozrm14C6x4x lHhNDaTKcds4wXHm5qQ0kQmNTO4+QTW76Mi57IOAVkGp0WQk5rMaGv2ofxXWgEevITC7 kznA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059431; x=1786664231; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=dLl1t0qRZTm556OBeVqKVx/DHfexmKODeXAiUOaDm4I=; b=TwTBmhgfN3vN8pAaZhK0w2PTLmb/wRWJnEYy6jtVrWLGRBZjoEnxEW1KAb9m5s+Q63 4LV1mrTl4n8YeMSTXamEpLPtQKuSUxl9GtqiiFHX+YACXlu6jf7DJW/oEg6SMcGqz33d KXP1iiWHOuJiqkfyrpYAlm31CEmOXPc8alUsbWfPsqhOwozlc0ZxspCdHhG62g6vLsbJ Mh6gRKukT3FsL29wQwT1sfP+LWlhIS4dbNUXCEV2K1hM776/7FZFOzK7qvMwqMXv90n8 q0hWL8pT6PBi1rncmBHZiIdlC/yeLlGJ4nKVnBAAjvr1Fj1nxmRHqgyqP+s8GSuuc9it oWwg== X-Forwarded-Encrypted: i=1; AHgh+Rro9G2NxeD94EhJST9iUehnNDKvie1hzmfdT+O6wAg/MaykXKgZmOOC1yPc2r5xxC8RUpxtuk/DWkU0Hd8=@vger.kernel.org X-Gm-Message-State: AOJu0Yzye5QpfmA53md1RIdYN+/zvho2xi8cqAbKHyzYbYGKxj9h0ifP J3wDSdRPjp9eNjL3zl1hoatnwvAGhYlJzsBKOVACLcZRnex66LjNmgRksVpYqfa58HFjzFEIiVu dkjOyKQ== X-Received: from pjzg4.prod.google.com ([2002:a17:90a:e584:b0:38e:b470:e6db]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2590:b0:38f:2168:b9cb with SMTP id 98e67ed59e1d1-3903c572a05mr18787499a91.9.1786059430539; Thu, 06 Aug 2026 16:37:10 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:54 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-38-seanjc@google.com> Subject: [PATCH v6 37/51] x86/kvmclock: Move kvm_sched_clock_init() down in kvmclock.c From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move kvm_sched_clock_init() "down" so that it can reference the global kvm_clock structure without needing a forward declaration. Opportunistically mark the helper as "__init" instead of "inline" to make its usage more obvious; modern compilers don't need a hint to inline a single-use function, and an extra CALL+RET pair during boot is a complete non-issue. And, if the compiler ignores the hint and does NOT inline the function, the resulting code may not get discarded after boot due lack of an __init annotation. No functional change intended. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/kernel/kvmclock.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index 5b9955343199..5220d205abc7 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -155,20 +155,6 @@ static void kvm_restore_sched_clock_state(void) kvm_register_clock("primary cpu clock, resume"); } =20 -static inline void kvm_sched_clock_init(bool stable) -{ - kvm_sched_clock_offset =3D kvm_clock_read(); - __paravirt_set_sched_clock(kvm_sched_clock_read, stable, - kvm_save_sched_clock_state, - kvm_restore_sched_clock_state); - - pr_info("kvm-clock: using sched offset of %llu cycles", - kvm_sched_clock_offset); - - BUILD_BUG_ON(sizeof(kvm_sched_clock_offset) > - sizeof(((struct pvclock_vcpu_time_info *)NULL)->system_time)); -} - void kvmclock_cpu_action(enum kvm_guest_cpu_action action) { /* @@ -325,6 +311,20 @@ static int kvmclock_setup_percpu(unsigned int cpu) return p ? 0 : -ENOMEM; } =20 +static __init void kvm_sched_clock_init(bool stable) +{ + kvm_sched_clock_offset =3D kvm_clock_read(); + __paravirt_set_sched_clock(kvm_sched_clock_read, stable, + kvm_save_sched_clock_state, + kvm_restore_sched_clock_state); + + pr_info("kvm-clock: using sched offset of %llu cycles", + kvm_sched_clock_offset); + + BUILD_BUG_ON(sizeof(kvm_sched_clock_offset) > + sizeof(((struct pvclock_vcpu_time_info *)NULL)->system_time)); +} + void __init kvmclock_init(bool prefer_tsc) { u8 flags; --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8BD5D4AA122 for ; Thu, 6 Aug 2026 23:37:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.69 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059434; cv=none; b=UMNTis40ruGjZF2OrQWiSn/T0Waq2eEqffQpZXrMNdaHGQJDtPLKvAcfBPX0qzfB7WWkXtp+1sIVkQqxqX0wyKbKcGJ2TXJfLvsuHgQvjoDj1rb+UkBT8k5TP8kKeQzmcRJE7or32HG1E6lq0Nt/CVydW+HZQfyjvbGow4ZTgkY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059434; c=relaxed/simple; bh=O74eXjp88Xj4Hu2r50cQeq7DVhhqDrykpjbML2eTnkU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=ezMczOUzRbBSP2PmPISRmbMOVbcMpxT8KFcNuDI4u3Tf0vvvtqDRMs/5/S1X8o6b2ra0B90dyXAJw/zvfJxuMYEouHW/aPMJeRIACDpcPfC5x11/9TXe2lV3B8W7bH7WICYs3xL0lPBAMvo2XOKZOfxmdPW+amw6Wxibe3i3bPA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=OarClglh; arc=none smtp.client-ip=209.85.216.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="OarClglh" Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-38e7b87ce77so3016171a91.0 for ; Thu, 06 Aug 2026 16:37:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059432; x=1786664232; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=4ag8yTwNbmjHFkBZxZL+JA4uvidx3vZA6IwgDKjMnAQ=; b=OarClglhwEA+owVh6lYxMrGoxZbJyBAayAPTYL+ax6G1o4reSTroxlLPegxNHx4de4 SPHmZRiKLOlgZ9nclXsyWfiWUN7+e8VgVhxE6Y7cB0pVZZKumEhKk1TVwN8005/2xLdl OjPRCw/WYM7rOyrG1lSoYyKhult+/oROt1Pzk6FnpUjaaI39yWKrXtCOOSuXz0eXOhGc p3ga7WIRDS6r4H+1cyGGwG0aNNHYLm4IrmmLbdM4rpIiG8a7jP/3ZGUqJjLiDZN/B/LQ FVFWUXgNny84qvqB5q++z3jbTS+jRS5CFe2tpQA24s2/Ko6AxZwZx8Lzc1jCPwudF0Ef bpiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059432; x=1786664232; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=4ag8yTwNbmjHFkBZxZL+JA4uvidx3vZA6IwgDKjMnAQ=; b=sF1rz2lvg46NpdkneywCieLj9FE6F9Fw2+ggJ03456zh2bcgpgnCWv418YPQUtiF58 ryLpTywKblm3Q+dlXdpA9lYlrzPpUEjBG0JBfkLat5s5gg8Bg1Up3WLZtCYsbkqwT+Py Zhouho7Rs8tCS0nR1Sh/5Nas1c/iNHhd4zO03MkRFmfSJcMbXMUHLWWFqL+1a+RosQOQ 6+6ccvu24ZNjR1QUvNDCVDHxYcmhcQ9IaZLzcbph8G5gHYoiBZ+j+9tDBtb6OprmFHi8 2y14EYhwMek29Fuur3WL3nwQhE+q/T8ZL9pNF56vjxelAfdt89Qj1nC0Rq/gLIVQPpHX yDBQ== X-Forwarded-Encrypted: i=1; AHgh+RpmVjw8UsKzrGYcfwmR3k9hRVHgeRaN49KHdsxspUPBezDcCYiNA7l/e9+HXvH1OV3T47fCfK3L0E1fv64=@vger.kernel.org X-Gm-Message-State: AOJu0YyYwscEJNMT9JYUizADHUSvfFU3lcvLkldaTKGk6DX+x5jR/8ID wfRrkBxu0gjm0RRv5a5Zokd8UJAd/afGK9VNzwn/CFZddHVOwMKZbak4SeE31dRdMnN9j2/zYAL AQsdUmw== X-Received: from pjbqb12.prod.google.com ([2002:a17:90b:280c:b0:38f:2874:84ed]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90a:c88e:b0:38e:488f:7068 with SMTP id 98e67ed59e1d1-3903c5373b4mr20565740a91.2.1786059431685; Thu, 06 Aug 2026 16:37:11 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:55 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-39-seanjc@google.com> Subject: [PATCH v6 38/51] x86/xen/time: Mark xen_setup_vsyscall_time_info() as __init From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Annotate xen_setup_vsyscall_time_info() as being used only during kernel initialization; it's called only by xen_time_init(), which is already tagged __init. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/xen/time.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c index 8cd8bfaf1320..bc26f00fc53e 100644 --- a/arch/x86/xen/time.c +++ b/arch/x86/xen/time.c @@ -443,7 +443,7 @@ void xen_restore_time_memory_area(void) xen_sched_clock_offset =3D xen_clocksource_read() - xen_clock_value_saved; } =20 -static void xen_setup_vsyscall_time_info(void) +static void __init xen_setup_vsyscall_time_info(void) { struct vcpu_register_time_memory_area t; struct pvclock_vsyscall_time_info *ti; --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1786059454; cv=none; d=zohomail.com; s=zohoarc; b=KcDSFMBn9R/jIIJLT2R14P3Wn5szVKtdpfBuyzuRO+5maQYb4FfHHf+MnYILjNPUbb1xeLPjcryskwbIJbOEeVzEIy8S4GVqds1tx9KonHDP/O54JmQHis+os8sWbQwTB1O6qOeqtVX/gJ7BmBz4MyeQfbDTzBKUkJRFJb3o1tk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786059454; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=rt852L9wHdv0bDRlKJAMITX85TrVIH1oxytQu/w6xUg=; b=J19/MXLNbnd5QF8l79QLvMWI2QR6qhT4yrKKUUMV8ikv06pWe+ieKCVa4YtgaGh6wt9CWNCFSDW801BQsXE5dQ7sOZbV+7n13lRROMm2h9ptKF3voy0It4wTF5c+alehwUHvt7RiyTycl3oVvRB3nhzhcejRT5W3JddB+ghWZRs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1786059454607423.34971072964913; Thu, 6 Aug 2026 16:37:34 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1385367.1627835 (Exim 4.92) (envelope-from ) id 1ws7eH-0005E1-EI; Thu, 06 Aug 2026 23:37:17 +0000 Received: by outflank-mailman (output) from mailman id 1385367.1627835; Thu, 06 Aug 2026 23:37:17 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ws7eH-0005Dq-At; Thu, 06 Aug 2026 23:37:17 +0000 Received: by outflank-mailman (input) for mailman id 1385367; Thu, 06 Aug 2026 23:37:16 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3qRp1agYKCQ46so1xqu22uzs.q20Bs1-rs9szzw676.Bs1352xsq7.25u@flex--seanjc.bounces.google.com>) id 1ws7eF-00056Z-VC for xen-devel@lists.xenproject.org; Thu, 06 Aug 2026 23:37:15 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1ws7eF-00Gchi-CG for xen-devel@lists.xenproject.org; Fri, 07 Aug 2026 01:37:15 +0200 Received: from [10.42.69.5] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3qRp1agYKCQ46so1xqu22uzs.q20Bs1-rs9szzw676.Bs1352xsq7.25u@flex--seanjc.bounces.google.com>) id 6a751aa2-bab6-0a2a0a5309dd-0a2a4505a808-16 for ; Fri, 07 Aug 2026 01:37:15 +0200 Received: from [209.85.216.70] (helo=mail-pj1-f70.google.com) by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3qRp1agYKCQ46so1xqu22uzs.q20Bs1-rs9szzw676.Bs1352xsq7.25u@flex--seanjc.bounces.google.com>) id 6a751aa9-4cb1-0a2a45050019-d155d846b569-3 for ; Fri, 07 Aug 2026 01:37:15 +0200 Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-38f5ac7354dso3867268a91.1 for ; Thu, 06 Aug 2026 16:37:14 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=google.com header.i="@google.com" header.h="Content-Type:Cc:To:From:Subject:Message-ID:References:Mime-Version:In-Reply-To:Date:Reply-To" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059433; x=1786664233; darn=lists.xenproject.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=rt852L9wHdv0bDRlKJAMITX85TrVIH1oxytQu/w6xUg=; b=hB1cuZKpyyowQkIuPIQPK4SDD3mNXcl+F3g0EdPblRujk6bQ6RazudGIEWHYIcZtgo sIMC2Cqxg5QFcEi7nwmq7Y9ACLV8OUHwqovnj/Ey3b8eY50flNmugiB+24pDA6I8YJcf NHf8TctOk5YPbVDomx7BJ8KxYa7y0/pR0DPMYLuN8YyWn3fi8B8rVU3iqsBGoP+zE6IV yx6EGhn0qSrooSOUiInhsdSPGWt7Wd84kQt1kVvsb26qWjPuDZmOylfQcHQfs6YXgfeC CA8gtN1RtiODWWbMqZnHkxVhLFlccxwlsMKQdJ3KylbjOAzqHW3tL/bAlY8rSFhUFeIi S9rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059433; x=1786664233; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=rt852L9wHdv0bDRlKJAMITX85TrVIH1oxytQu/w6xUg=; b=daDMgkg9YrrssARbkmqGLyFrDHPb6Js6uCb7ektGKD2hmL6hczZrqRnVvDSmPBMlLi Ak803lbErSVzGPQAL7ficTzY4HZta3dTrsVasUeqxKdXpE/D2SOmK4l/Dj5aZdaOSxTy P9UGEEUz6Py+casuPqOjevbEq10PqRKldoZXCitf8q6Nsl25NegQmAa47UohTeOwWJjo rJnYoKe9n9VXtClSQvXc9L/WSYXUARbEb950NyO3S+WUOS5jCzFsY1bFN1ss781Id/yx cojWbWlHk9U5kct5wfgfolnJ2yGgPZa8iZn/NiWXbngz0beXFTy/t1T0o4qI8UAmDNje t95Q== X-Forwarded-Encrypted: i=1; AHgh+RrF30tF+Z4W+fml7WgPHbKrPibBg7yOEdrF+Hairo4bSKf7RZTgJGBXui1W8LW6AYhkGTI88Lwuso4=@lists.xenproject.org X-Gm-Message-State: AOJu0Yzy1PesDviqwhZeAAltjENPqzSZ3jQYOF1fuVZ6m795kuqBiHpY G0LW3n7e4VHyvHLfOgRWN4OrO+yfIaJoD3MT9SbeGkoKWFuQnWbIQ1KDdIEBFgHOqHRGgUBZAUn QgDO1sA== X-Received: from pgkd23.prod.google.com ([2002:a63:f257:0:b0:cbe:7907:901]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:d52c:b0:3c3:812a:2198 with SMTP id adf61e73a8af0-3cb85df190amr24070365637.4.1786059433092; Thu, 06 Aug 2026 16:37:13 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:56 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-40-seanjc@google.com> Subject: [PATCH v6 39/51] x86/pvclock: Mark setup helpers and related various as __init/__ro_after_init From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner X-purgate-ID: tlsNG-c201ff/1786059435-F62AB2A1-C6F9C289/0/0 X-purgate-type: clean X-purgate-size: 1384 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1786059455300158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that Xen PV clock and kvmclock explicitly do setup only during init, tag the common PV clock flags/vsyscall variables and their mutators with __init. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/kernel/pvclock.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c index b3f81379c2fc..a51adce67f92 100644 --- a/arch/x86/kernel/pvclock.c +++ b/arch/x86/kernel/pvclock.c @@ -16,10 +16,10 @@ #include #include =20 -static u8 valid_flags __read_mostly =3D 0; -static struct pvclock_vsyscall_time_info *pvti_cpu0_va __read_mostly; +static u8 valid_flags __ro_after_init =3D 0; +static struct pvclock_vsyscall_time_info *pvti_cpu0_va __ro_after_init; =20 -void pvclock_set_flags(u8 flags) +void __init pvclock_set_flags(u8 flags) { valid_flags =3D flags; } @@ -153,7 +153,7 @@ void pvclock_read_wallclock(struct pvclock_wall_clock *= wall_clock, set_normalized_timespec64(ts, now.tv_sec, now.tv_nsec); } =20 -void pvclock_set_pvti_cpu0_va(struct pvclock_vsyscall_time_info *pvti) +void __init pvclock_set_pvti_cpu0_va(struct pvclock_vsyscall_time_info *pv= ti) { WARN_ON(vclock_was_used(VDSO_CLOCKMODE_PVCLOCK)); pvti_cpu0_va =3D pvti; --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 428D34AACAC for ; Thu, 6 Aug 2026 23:37:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059437; cv=none; b=GlEMqhvHOKcjUHkSeL9rtvBGNZgqHUgx21wNfuuBgXjut/TNPLUfsZtk4iJacXPae7V9kpaHPHJTdNS355tKnQ9TPXTj30SHEPklK2tSyVia2mE1SJlmbK9t74ag//+8e1srvwdZ79d/A4t1Bmm7y+DKnd8sP2QvTalWNW0PmxQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059437; c=relaxed/simple; bh=atSdA44tQM5iL7i468JQE5pWUtYdZ9gHhqtvG2Zh53o=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=BkMCXSjVXzglbEA0YV3LIUXfC7Jup1MQmAdaNPwustfLY8UBYZiZbsqj0JXyAX3E0EjnULr87cHjh3L8KVQTydW203aRhrm1ykuffhUmNo3cugG64BRwm+dnlQn/TaDRP0hkuAjl5cjt6tIfW5fuTm4A7gQD9PzYtS8XoFLW3QU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=FccuUzN5; arc=none smtp.client-ip=209.85.210.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="FccuUzN5" Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-8484b9fb055so6111480b3a.0 for ; Thu, 06 Aug 2026 16:37:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059434; x=1786664234; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=gswAR/5wSepHR0W/S6/oLzBYH0wiOXioT7kjM1AQclw=; b=FccuUzN517P6dv1EScvNGgc/kZAicCrl68GSLp765qNQLHwOCDrpMqa688XpUfASXk s3qlCUW6FIUAulelGJrFXfC4OP7iFciVoKpphQC3vUwmiu95MCZBk1N7jljNMEzwb3VA caa6of+/YVNCjgHSpf8/UORwT1K4PbnQj5s+Ee4oBqJBEUTAZnARFUNFkO9KKxCZscmh RxAWcbNAfS8ARhUSRQ6e2QiVtbui2Bpdcnep7DaIKAMLANG8egoAUw6ClxpAQGSS+Scs Xe5o+HNHAQay1F7RMXHkpga3KB1bcvR6EbBERBjawzUjaMN4tjbXrLvZRDC7CmZNzDh7 NbKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059434; x=1786664234; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=gswAR/5wSepHR0W/S6/oLzBYH0wiOXioT7kjM1AQclw=; b=MOnq9WjRMsSi8EBXVszA9IgTQgSCp8Z+gkL1rG842R6bkH9b48pTR4KzwHvjF7w0Sw hNCO8201I18l6lEmATRhn3L0T8PCT36vbKYP39irMq7eWMWhYQLXvpbra8Q7u3ifXY1L myn2Zw8R/gYuejAKM8QMKE2k8QrXbPnsik4oodptbTnnrdgYVqpO/4lXKcrNpdKla6Q+ O2oRupzK+AR+1zFLLAZF6snK3HlDeHCVgUb8NEsu2vtZch5NW80tKRMI2uImQ6fMFTPe nTXZg1lJDzdw1Z6WkCrLBPx4VNKJ/BqSQhq2Zwb06wgaYa3DGnQn0d9y54NpjTDY2x6j xJyQ== X-Forwarded-Encrypted: i=1; AHgh+RquQU4nVEWwHSyg83c2isD2Eh+SqZfZtXA8aPULeLxjBt+A33ij/Og8Y4y83YdLBA2MIve7tqcJkY9PVNc=@vger.kernel.org X-Gm-Message-State: AOJu0YyOPg338Y2N7LwR6cUets1PvAsX0sZI9tlFIYye4yfGr1MZM3Di 1PBJuVJfZ/qdaRnlUufFI7G/G7330yEQqYtDls+iWLMwqvSXjBTCnjDJLu3DmMozeJCnhpaERdR gg1+4NA== X-Received: from pfjt11.prod.google.com ([2002:a05:6a00:21cb:b0:84e:2062:2edb]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:9506:b0:84a:29a7:f64c with SMTP id d2e1a72fcca58-84f2de45511mr20003910b3a.0.1786059434181; Thu, 06 Aug 2026 16:37:14 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:57 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-41-seanjc@google.com> Subject: [PATCH v6 40/51] x86/pvclock: WARN if pvclock's valid_flags are overwritten From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" WARN if the common PV clock valid_flags are overwritten; all PV clocks expect that they are the one and only PV clock, i.e. don't guard against another PV clock having modified the flags. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/kernel/pvclock.c | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c index a51adce67f92..8d098841a225 100644 --- a/arch/x86/kernel/pvclock.c +++ b/arch/x86/kernel/pvclock.c @@ -21,6 +21,7 @@ static struct pvclock_vsyscall_time_info *pvti_cpu0_va __= ro_after_init; =20 void __init pvclock_set_flags(u8 flags) { + WARN_ON(valid_flags); valid_flags =3D flags; } =20 --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pf1-f197.google.com (mail-pf1-f197.google.com [209.85.210.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9F4B64AB810 for ; Thu, 6 Aug 2026 23:37:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059438; cv=none; b=Fasf9XWE3fLYySyHNFwIBixrNR5DjAIifMU6awNCSIxRzwZU6P5R0TDA8+LAaGGThp4pJ6tu/6mlDl0AAIGAlrhVeezbQad7wST/Mxp8U6zyVFH8w6AU1nLEDBqqe6TPXn+j3gz80chWvMp1Ka7q9jIJmAavyc2uNjvp0roS96I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059438; c=relaxed/simple; bh=EetB+RnX28VKy0jN0zLsMSRc1BZr5Co2JodEFYoMux8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=kw7wJFjyNpnJq2WdkTO5sH37+hZ+WD4ICDilgDDAtJiRjruDC9sr8F9oVSVzcenLBFPMQYy0TdMycYJUlHoWeq/5nyiHwcDqr9QkD1hMyY6qRI5aLUwXbEevrADCKs5N6te0PFOHDFIfAioPkfYg77DzT3IdcTwZnMfpsv5L0yw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=BqqbRfW6; arc=none smtp.client-ip=209.85.210.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="BqqbRfW6" Received: by mail-pf1-f197.google.com with SMTP id d2e1a72fcca58-84865f326efso3250373b3a.0 for ; Thu, 06 Aug 2026 16:37:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059436; x=1786664236; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=DfVsK4/eNAzlqgTkif/k+3bkJqkVsqeG8riFv7GGWx4=; b=BqqbRfW6nxSQG3cymW7yNa0PeYowBginEK9NyhpXgnO8/hBtGpearvWMlln3PHtTHw 8ZybP9jwoy9y5dLzZq7+/7ZwVV6nshgJsuEasoADRnQlH6CRDbs0Mhhq5LeFDH1IRMsj uFSLMnTRtwZ/XVf+0TnojBpg369/7KehsGkbQOJHKFYSvROuvCx6mnihIiOjqTUHrmyV qLOf+ajHjnFBiPrQZRZGIlbKK89KF7y+XFkjeu8oURSzLtb+P4jDznCNNrdcqPQnll6k C4OGzyRP5hAPCPJxvXjqodarzWpYON5QEsOLWATF1zzwHHgrdXKEQNWHHVB+7KJZdjOL FLyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059436; x=1786664236; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=DfVsK4/eNAzlqgTkif/k+3bkJqkVsqeG8riFv7GGWx4=; b=of8Wtrn/XFluC1KjunUPuFWmjpULQu+oBFfXwhdr2tdy+CjeoJWj3Aya+9R59SSD1l S8WsYLYkA6/7SnBxsFDxMACx5fMD+aGYGPrTBFW//EUzhH8prDB3D3VtaMcC/6zQM3iE xaymOfJZ9njVfph1eQs4yIX/0Z4eVCA7wi4irflcsoefxILNr1RMIHIzyUd9CSYqAMyG z76rzLoQ+aqJwG5p1nlR/9KVgDFA60RZZjlh9kfS+oDgRhpmwaDODPsstWYpPwHTDUux P9yJRKfDPq/QcQH/fO0fR7BaRG0HjQNSNifdcHMQPibcS5qTG00O2R/VMKq/2mZ1uYsn WVtw== X-Forwarded-Encrypted: i=1; AHgh+RrgolWuamadfQ4zQU2cm4u2fTcGdueV4jFN6ZDMreRLc/Wi23aq35I3lI8o77udYI1BE9TDGoECh2fsMB4=@vger.kernel.org X-Gm-Message-State: AOJu0Yy3YB56IT1zIImvEZbX5kGARfoAoogl5bLHmnOBAWib9OKlYDQU vSwPOg2Hrd4hVQ67lhmboSAcdpSjVXIZfOUBYWoz3hoYvfPAZTwSN/RW2Q1cYWut+CTTvK8VvQ+ lw86rEw== X-Received: from pfbko19.prod.google.com ([2002:a05:6a00:4613:b0:847:926b:dc17]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:1886:b0:847:99a7:c751 with SMTP id d2e1a72fcca58-84f2e05d02dmr18083285b3a.25.1786059435385; Thu, 06 Aug 2026 16:37:15 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:58 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-42-seanjc@google.com> Subject: [PATCH v6 41/51] x86/kvmclock: Refactor handling of PVCLOCK_TSC_STABLE_BIT during kvmclock_init() From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Clean up the setting of PVCLOCK_TSC_STABLE_BIT during kvmclock init to make it somewhat obvious that pvclock_read_flags() must be called *after* pvclock_set_flags(). Note, in theory, a different PV clock could have set PVCLOCK_TSC_STABLE_BIT in the supported flags, i.e. reading flags only if KVM_FEATURE_CLOCKSOURCE_STABLE_BIT is set could very, very theoretically result in a change in behavior. In practice, the kernel only supports a single PV clock. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/kernel/kvmclock.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index 5220d205abc7..61d4d943fe74 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -327,7 +327,7 @@ static __init void kvm_sched_clock_init(bool stable) =20 void __init kvmclock_init(bool prefer_tsc) { - u8 flags; + bool stable =3D false; =20 if (!kvm_para_available() || !kvmclock) return; @@ -354,11 +354,18 @@ void __init kvmclock_init(bool prefer_tsc) kvm_register_clock("primary cpu clock"); pvclock_set_pvti_cpu0_va(hv_clock_boot); =20 - if (kvm_para_has_feature(KVM_FEATURE_CLOCKSOURCE_STABLE_BIT)) + if (kvm_para_has_feature(KVM_FEATURE_CLOCKSOURCE_STABLE_BIT)) { pvclock_set_flags(PVCLOCK_TSC_STABLE_BIT); =20 - flags =3D pvclock_read_flags(&hv_clock_boot[0].pvti); - kvm_sched_clock_init(flags & PVCLOCK_TSC_STABLE_BIT); + /* + * Check if the clock is stable *after* marking TSC_STABLE as a + * valid flag. + */ + stable =3D pvclock_read_flags(&hv_clock_boot[0].pvti) & + PVCLOCK_TSC_STABLE_BIT; + } + + kvm_sched_clock_init(stable); =20 if (!x86_init.hyper.get_tsc_khz) x86_init.hyper.get_tsc_khz =3D kvmclock_get_tsc_khz; --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 857274AB829 for ; Thu, 6 Aug 2026 23:37:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.200 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059439; cv=none; b=CNHGwe714pm4CMRWZDU6m9DYd7sx6Gk5r42ksAisQ7KG4e7MBn/SxCuydokQeZS2eMFeQLSSALVzaT+MYNAAgKZdJ8QO0Vk/XMGzEenujLZopc21zBupgt+uKEStjiGxG5ucB+WeE3hBeVxHL1zN2vebQA+iuySevJVufflM8r4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059439; c=relaxed/simple; bh=CMNPpn663VblKppKKu5nFjYj1HkUy1nnfJebT2ynUYY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=MaHF2la1xVdeYyB+q0TBvYojVWEUvh7VpGiy+9EomaVKCUEh3j1Ga8CHgOoIB8paYKSxjNUsSERWJR2oSuxtqRyh4wjTf7s9riNq8uT7Z1vRMsb9b+UxXG/xBZnk+g8Rm9SETFHdEht6RRyIFH1Q03clAofbMdFIAMDXTwvpm0Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=AW4CMHyS; arc=none smtp.client-ip=209.85.215.200 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="AW4CMHyS" Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-cb5cc1e139bso1976183a12.3 for ; Thu, 06 Aug 2026 16:37:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059437; x=1786664237; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=qISz6FBmFt+Rjc4N/P+Kp805/IDsq2ZStMxtEE1uDRQ=; b=AW4CMHySlmhYrT72DTxH1CFaADGEcb+OsB0Lv2jWisdK+ZVBA4B3YpJmonI8tQ6U8p hTjQFu2SPZNNKmGS4geXikr94xBv5k6rs3HIy7U5EYhAripWLlB6VUnNJQtVTYlfj9s6 cBn/XWXt5CgApEOr7lklGVdX/+OIefFTn0MbkSmCyCEDYkIUJyjO3EnMe7I7k7+9qO8g O8TVRLSK5NN5mVqeSmmhs3F/XAgk0bQWX6Y/amidPpMrWq/yu8GNmVYVcP+uoTCR6UMD kDdaNifv9iQ4C1oFhRSzMKmLNtIRbkl7Q6EFW73m/uR62MYvYwHwox43zievt5H7LRbw N1EA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059437; x=1786664237; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=qISz6FBmFt+Rjc4N/P+Kp805/IDsq2ZStMxtEE1uDRQ=; b=EYyi4ZykkTqKEYCmLujDIgtFEN/WJRMGv6d1Tm8agaCuxd/kV8vYXODUQjtg+q48xv fhilwvZ+HkdkvvA44nkNes2VOTNFHcVjTSml87HnqX6nIn9/SJB9S/rB2HctRK+/LsFZ 4qLVYkiMPxRWUUY0k6t9BUBsYbTzupbVoj8rLj9y9pOE5jCQ9MNNFeHXdkxYA0xHzf+b GzFpn5i7J6GaaITgeIZ7N8pKPqjHxedaUIlCOuJKWDItE1gcUqPo70xqqJsIw9mGItaH QTvLPPAirga0gQ1ZTV3cP4s2ZIgoMQG/a6r3YnGbZIlVMs1Bj5S8kIWYJxhrgPKhttZZ OdYw== X-Forwarded-Encrypted: i=1; AHgh+Ro4kyNG01+u0jCSfRHy3c2qhSyRXN/xOrufaj0Pew0+QVji/NxwGhvxKgAMJs1Idf4GM3txtrf0FPOIdFs=@vger.kernel.org X-Gm-Message-State: AOJu0YxBA4CLgNMNaFojtwDEWRtVLti/pHGAcoVGZQo6JRd66k/Z5BZm y6fLlL+r3lr6VbCC7iTASX2zNWJMlAOJwM2CidpYDUov/lsR1VhdBGmPaN8u+1IJTAsdY5Qwr3n a2f3Trw== X-Received: from pgbep6.prod.google.com ([2002:a05:6a02:2646:b0:c99:90dc:7b3f]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:6112:b0:3b4:e4f6:4f15 with SMTP id adf61e73a8af0-3cb85e9922cmr22668021637.5.1786059436589; Thu, 06 Aug 2026 16:37:16 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:35:59 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-43-seanjc@google.com> Subject: [PATCH v6 42/51] timekeeping: Resume clocksources before reading persistent clock From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When resuming timekeeping after suspend, restore clocksources prior to reading the persistent clock. Paravirt clocks, e.g. kvmclock, tie the validity of a PV persistent clock to a clocksource, i.e. reading the PV persistent clock will return garbage if the underlying PV clocksource hasn't been enabled. The flaw has gone unnoticed because kvmclock is a mess and uses its own suspend/resume hooks instead of the clocksource suspend/resume hooks, which happens to work by sheer dumb luck (the kvmclock resume hook runs before timekeeping_resume()). Note, there is no evidence that any clocksource supported by the kernel depends on a persistent clock. Reviewed-by: Thomas Gleixner Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- kernel/time/timekeeping.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index 97db2e9393f9..585525f5c1f6 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -2226,11 +2226,16 @@ void timekeeping_resume(void) u64 cycle_now, nsec; unsigned long flags; =20 - read_persistent_clock64(&ts_new); - clockevents_resume(); clocksource_resume(); =20 + /* + * Read persistent time after clocksources have been resumed. Paravirt + * clocks have a nasty habit of piggybacking a persistent clock on a + * system clock, and may return garbage if the system clock is suspended. + */ + read_persistent_clock64(&ts_new); + raw_spin_lock_irqsave(&tk_core.lock, flags); =20 /* --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 844314AACB3 for ; Thu, 6 Aug 2026 23:37:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059440; cv=none; b=C5QO5j8orE982en4rAAELtv//h1iGintvr1Tg+wE6z4Xrey9bqzNckvfQ750mULrsjAr7icDkfARpTMz/YDG9mbzUNnDgemunVrn8MdNuZu0npsPNzPnLosUfj8Scj+s5mm3eDEf+irBSbdvPk3MKEgrmYEn8pzD6xWuS/w0+L0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059440; c=relaxed/simple; bh=K/EtG7hsgatUBHi5bWDjfRauVW7X2RN7VoYeeZHucVI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=lO1PXNjkzwRgeSIQ8CzaeBAXljmHx4XjLWMW7AbptRtHl3y0iRldohEPlKqL/3HhYQTiNzeCekpJ5rHI5NsHNLcxzc5A6+EPJgCGyq19VHOOzbp4WRw72ek5sqEJzWeMD9ssNIH7Erv6epuJ4sywEiJQhmSOOZgH7X8bfX3B09o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=YTh/0ag6; arc=none smtp.client-ip=209.85.214.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="YTh/0ag6" Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2ce7dfd33ffso32943215ad.0 for ; Thu, 06 Aug 2026 16:37:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059438; x=1786664238; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=LM+bFo6oZyT6hMjeOJv5/5C5Sfvue9FfV0H+MNWzQd0=; b=YTh/0ag6tM/oAFVXEVZwkvasp1gMe3Oe67/vLfSgvsTOCg/wOEI/b8fhPZSfZwz0g5 cB1R9kASN95ueg2IRg+EFjQ+ws78kzDFL4nW9h5NzSf2EZygNy6TmX2rTXTnblQzXe8a agwvYeyoeay4CQiIG2SCt5FtWzNe1ZbtRbvGp+43tymkXV3cjTtEj6LBmkbEddrpaqeF ZCAbOAGdbNFRCy1E3T8WkOfz0c5CIjVjBcK0Iao/hH+Gs3DHQ0Jo0e7e2IUbLTbVCeWE 9r/urfp0duXhRQ3CBXysgQ3x5H2zszueT3tx910uI6N7/U5OOLGYvP7bIihxPvOqUH/l vLKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059438; x=1786664238; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=LM+bFo6oZyT6hMjeOJv5/5C5Sfvue9FfV0H+MNWzQd0=; b=IvkI+viWxSXk4Fntl7Sdid2xpClW+7/VssLaX008xfdbvLTLBcOizlsyRyQlUXjZ06 6z3a5fY4nBDql+pgTCH60qIgw/IuUCVwDIga3yJeQT+rfyqj6ucnmvNSCI+F1+FLYWyP yzR3lNOEyTddvGuMCC6vj51/Fvm8NGXnymcbBzBAsIh5d+ZCRCYTCTx4NAWADBhjEGhk dNZARzdBDDVqYanhFWwnKyGP6zpv3A0yJ2dM5JRa6ZJX3gtmgukWB43EOoIdN6Jql5X8 WdMMpp5lOTvZMjrBQFAn1dQEaZbPmq2Ivh50i+oJoB01oBFT2MpicptCg7FMvqYMrU/S 5kZQ== X-Forwarded-Encrypted: i=1; AHgh+RpyNJCTtst4HW7Zv86TDuspRLBn43UyY09esKpXzFHPNsKDeumxatL4+4k22RO4KC5icp+JLaCyvJ5BPm4=@vger.kernel.org X-Gm-Message-State: AOJu0Yxjpsm6H0fhARZMLG0jBiFIAMQZzuFH6Xivm8xXfZOm1IFFz5Jj kJyURPnqMCkXld9SF9pYIyt3zEOSlrOkEBtFBAwu2b0kBwTqeAypaBftrFTdBDKX9kQWSjtr+Mo OxnH8BA== X-Received: from pjuf1.prod.google.com ([2002:a17:90a:ce01:b0:38e:aa86:7cac]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:5447:b0:380:83fc:4315 with SMTP id 98e67ed59e1d1-3903c66b3bfmr20385633a91.21.1786059437671; Thu, 06 Aug 2026 16:37:17 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:36:00 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-44-seanjc@google.com> Subject: [PATCH v6 43/51] x86/kvmclock: Hook clocksource.suspend/resume when kvmclock isn't sched_clock From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Save/restore kvmclock across suspend/resume via clocksource hooks when kvmclock isn't being used for sched_clock. This will allow using kvmclock as a clocksource (or for wallclock!) without also using it for sched_clock. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/kernel/kvmclock.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index 61d4d943fe74..41aff709b90a 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -152,7 +152,17 @@ static void kvm_setup_secondary_clock(void) =20 static void kvm_restore_sched_clock_state(void) { - kvm_register_clock("primary cpu clock, resume"); + kvm_register_clock("primary cpu, sched_clock resume"); +} + +static void kvmclock_suspend(struct clocksource *cs) +{ + kvmclock_disable(); +} + +static void kvmclock_resume(struct clocksource *cs) +{ + kvm_register_clock("primary cpu, clocksource resume"); } =20 void kvmclock_cpu_action(enum kvm_guest_cpu_action action) @@ -223,6 +233,8 @@ static struct clocksource kvm_clock =3D { .flags =3D CLOCK_SOURCE_IS_CONTINUOUS, .id =3D CSID_X86_KVM_CLK, .enable =3D kvm_cs_enable, + .suspend =3D kvmclock_suspend, + .resume =3D kvmclock_resume, }; =20 static void __init kvmclock_init_mem(void) @@ -318,6 +330,15 @@ static __init void kvm_sched_clock_init(bool stable) kvm_save_sched_clock_state, kvm_restore_sched_clock_state); =20 + /* + * The BSP's clock is managed via dedicated sched_clock save/restore + * hooks when kvmclock is used as sched_clock, as sched_clock needs to + * be kept alive until the very end of suspend entry, and restored as + * quickly as possible after resume. + */ + kvm_clock.suspend =3D NULL; + kvm_clock.resume =3D NULL; + pr_info("kvm-clock: using sched offset of %llu cycles", kvm_sched_clock_offset); =20 --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 44BFE4AC290 for ; Thu, 6 Aug 2026 23:37:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.199 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059442; cv=none; b=m38HRf3kEDCxwJPf0jPml0xLWMYey++tgp2WloOKVK8VeRjT5UffhvrqS8fDAVax5WF3Ddlep3SfuU2kTVVDZt3Vbl5k2oWSYkldlqnKxXW6V4OweM4MYTcM7hUJ6vEj1+64v42elINa8+bQ1YwMinmiEWSuCIMqkuTdgP7B6/o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059442; c=relaxed/simple; bh=dgm+zs36iagZrNsiEaG5tDm77qWr4GhnmJ9+Xj3CxnQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=gLWnLfV5o2o4WpDyLm+tzMdvwmpoj/A2R109uSdiWkhmnMk3wbu9S7DCDS1S4V8G9uQhfy0kCVgUuxwDm5WoDIE7igJUKCdXLlWsVQwc6QZz7dhm7Byi0UWYNPBOg8GoN8dF1dz5s8kzgSyugdFXtbhRdpHxCdkvFpcd1Gsgbq0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=uts+aybb; arc=none smtp.client-ip=209.85.215.199 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="uts+aybb" Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-cab048cdb3eso3723744a12.0 for ; Thu, 06 Aug 2026 16:37:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059439; x=1786664239; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=+wCYK2twR3W1N/eNELl9D0JNBeD1Zbsv+o0OdDwvKek=; b=uts+aybbPJYUPzSfs+xuKgWXGgKUIEG4Qz3Pr1JP+dhdr2FDPxKAupVVHUo7i22y4h fgBkbFoXQkxOiMfTPOrvoHcHSXX60/wE9SRH8RbjlD2jYFT1j97IUG6U1+bZsIXR+TOW 0rj6G28Fzm5MJEbce9fWP1AXvQbp4QbbvY3ZuMOySCHKjb/voKDas0d5UVWoh9JOAeNm Bww6augN15XXZv4MajXNVHpmdsws07VB1nJOApv3BMUFiAWq3AIsb72QuZswTV9MnJgv 5kG1nKm8zL6xAiJVE+ym9990uTKHBWDHfWHdYjjQ0Hev0Au/hdpIDuX9vwAwuleenbFy a4Bw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059439; x=1786664239; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=+wCYK2twR3W1N/eNELl9D0JNBeD1Zbsv+o0OdDwvKek=; b=f24RR8xp8lmK46+eJpIDsXc127Sbllk7Ys6EHS4k9jrsR/rZP8fKAxaapFSVFnzC+c sK29Zkx/0gWJdsQmVmZrxc/JvQEQgZ98xmWDGeaILmK/v7T+r1Qgi3vDlVPxrA9UX1et DvuVdt0HrnZS1fAiE17XV5EbXfcxzCSmAWp9CTvX2pwNsVziQn3yUHR7f+S5eD4hK9I5 v/LsO6YejMvtowKpqNKiVfTn5ytNW/yTbHL0vZMQYrOoOLO6Ooog5OFz982He9sCmzJA 54IYcqmnan2ecms+CglNe+iGrmP+yWpuWrFCGzUbSr7PK4VXngtj1FzN2bk2dOHkX/QT eufg== X-Forwarded-Encrypted: i=1; AHgh+Rpv9AEVRneR+HSsLxQ94PePkQj9uCcu6xeg0ByU4XXgOYs7ajVYrDyEzX86GkIELAG2ynjGb+TDcMRbkD8=@vger.kernel.org X-Gm-Message-State: AOJu0YyDblGlHPosLqadGd4BL6/NH0eCfd1uqvNgnTf1XozypAxHptFO WEa0r18zrihAsKbkhFiOapUvDrvfvPy3XiASwpJ653WvfursVwQNyM80lBbqiVyBF7hkVxGdNrB 7QfVqfg== X-Received: from pfn34.prod.google.com ([2002:a05:6a00:a222:b0:84a:31b0:7544]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:3d4b:b0:84e:89a:b8f7 with SMTP id d2e1a72fcca58-84f2dff69eemr17547973b3a.11.1786059438943; Thu, 06 Aug 2026 16:37:18 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:36:01 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-45-seanjc@google.com> Subject: [PATCH v6 44/51] x86/kvmclock: WARN if wall clock is read while kvmclock is suspended From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" WARN if kvmclock is still suspended when its wallclock is read, i.e. when the kernel reads its persistent clock. The wallclock subtly depends on the BSP's kvmclock being enabled, and returns garbage if kvmclock is disabled. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/kernel/kvmclock.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index 41aff709b90a..2cc3dd2ba355 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -53,6 +53,8 @@ static struct pvclock_vsyscall_time_info *hvclock_mem; DEFINE_PER_CPU(struct pvclock_vsyscall_time_info *, hv_clock_per_cpu); EXPORT_PER_CPU_SYMBOL_GPL(hv_clock_per_cpu); =20 +static bool kvmclock_suspended; + /* * The wallclock is the time of day when we booted. Since then, some time = may * have elapsed since the hypervisor wrote the data. So we try to account = for @@ -60,6 +62,7 @@ EXPORT_PER_CPU_SYMBOL_GPL(hv_clock_per_cpu); */ static void kvm_get_wallclock(struct timespec64 *now) { + WARN_ON_ONCE(kvmclock_suspended); wrmsrq(msr_kvm_wall_clock, slow_virt_to_phys(&wall_clock)); preempt_disable(); pvclock_read_wallclock(&wall_clock, this_cpu_pvti(), now); @@ -140,6 +143,7 @@ static void kvm_save_sched_clock_state(void) * to the old address prior to reconfiguring kvmclock would clobber * random memory. */ + kvmclock_suspended =3D true; kvmclock_disable(); } =20 @@ -152,16 +156,19 @@ static void kvm_setup_secondary_clock(void) =20 static void kvm_restore_sched_clock_state(void) { + kvmclock_suspended =3D false; kvm_register_clock("primary cpu, sched_clock resume"); } =20 static void kvmclock_suspend(struct clocksource *cs) { + kvmclock_suspended =3D true; kvmclock_disable(); } =20 static void kvmclock_resume(struct clocksource *cs) { + kvmclock_suspended =3D false; kvm_register_clock("primary cpu, clocksource resume"); } =20 --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1CAB44ACCC1 for ; Thu, 6 Aug 2026 23:37:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.200 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059444; cv=none; b=L6NB0w0XmLqPX6yx47y7HrnqxDFjzr4tul7O8olJ/p9NY4Y0CH/72WNwt7O9Wv00+BIaJFxvkCgA+XJA38rvDhDViS2Ct3fff3XCgJQxwHtYjiHSwBfbHe7J/kOgSrf32ZJp8JhhmYGZi3zxySrTkpILFC/ZNqjT3uWaJ/x7jPI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059444; c=relaxed/simple; bh=XkhFva8JyfvpNMGgTzJPYMHmon5wSx833A7LghpVEEU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=WOWs6jgI9obFpV5nRb6hmsTrH2oH9kKZWIljrhyIv6XnhYbCBDlD2NzwsL3Blh1SrRSC3iH6Xw21hW9t8xEChfcLZ6nV1bsgq5a/D9NeaCY/axaLUknu1TQNPtdL7yMnl3sArrs6CzozZhGUvcmDy2bOg6ED9h28cZmZBv2SHqQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=XaOPF2K6; arc=none smtp.client-ip=209.85.214.200 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="XaOPF2K6" Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2cee1ec30f2so33076975ad.3 for ; Thu, 06 Aug 2026 16:37:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059440; x=1786664240; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=ITopxW07/FQizEWlsu5JVYhKtG4YNcRGYaSiNeAs44w=; b=XaOPF2K6dOx5NT278f3+mfmwrTm8tjgKyxGpYJF0JvVG+RXB4modnZN6zHenUKycVl ShrqgnXzrxe/RR0qMVYstahSJ46k/sTl2KL7BI4A+vGnh23qWHSQ8Z1ZDSEgt9L2uecB EydA9AL6Kib3nnSYJVXwK6dBI7ilcAvC99yR4cMDvW4d6W2buGGiQn6YNnVSA1w5skG6 ZX0FDi6L2ttzYFFL+WjRVkxA2BU3Qc9qVQF+1sfr+BGT/v/gAO/So2CQZEbgyrTwbNmq OhtuKowu02T9UsTZwUPRxuGPSV1POKuBQM3sF+eC4N067xPPSfxezvfIFHORUAGgxxRb QSEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059440; x=1786664240; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=ITopxW07/FQizEWlsu5JVYhKtG4YNcRGYaSiNeAs44w=; b=CsFlRbWB98LzMCi8k8gkZIRWOZWltpjdD1SYIeFBoPYTfB1tvXTwboHa80hOWFlxfQ +Krr21c0ioJVdxZCneVvBwgnhkx6IFMNbI4y+Ccy4fzetv6qirHonNHZkqXqOMJfeneh hFdHOCEZtUIOEsbFX9fUQTC6qWrwhlfjdKcgb2quKxqGJgqrcN+6I6IauATEUytOmb1v HVvn1fxHA/iRIef6cJzRvPv/AFaPJbaGBbdC4s71w2JGeboMx59tDeJseR7b8pvZNCPw /BqMAhXMbhAYKmrfSQdU/b2Qig9Wlhq1ncdVW3+cvP5XyuPEsMeQjrQJwd0V5KVjLSdQ PKzw== X-Forwarded-Encrypted: i=1; AHgh+Ro/ZzY5/+iTrjSMv8aXZS7JjYqy/xqVCFTsoUTZ9JgdAewsF7DlelQeHQXWmoO5+H6IouNzg7qY8iqAOTg=@vger.kernel.org X-Gm-Message-State: AOJu0YxVo9pHfnxRqrPek1ZgNp0jbxHDZ44AJOAG+daaHc054V4iESIc rsXoavbIZ2b6SszI572cb+5yuaLgoIGyPb/qz+0MfXhTEuZTdjZfYFI3yX2WvMMP0CtGROkf6Ns fejQDGQ== X-Received: from pljs12.prod.google.com ([2002:a17:903:3bac:b0:2ca:e163:e0c8]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:41ce:b0:2cf:afa5:b19a with SMTP id d9443c01a7336-2d0ca7f8e9amr186517945ad.11.1786059440120; Thu, 06 Aug 2026 16:37:20 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:36:02 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-46-seanjc@google.com> Subject: [PATCH v6 45/51] x86/paravirt: Mark __paravirt_set_sched_clock() as __init From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Annotate __paravirt_set_sched_clock() as __init, and make its wrapper __always_inline to ensure sanitizers don't result in a non-inline version hanging around. All callers run during __init, and changing sched_clock after boot would be all kinds of crazy. No functional change intended. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/include/asm/timer.h | 10 +++++----- arch/x86/kernel/tsc.c | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/arch/x86/include/asm/timer.h b/arch/x86/include/asm/timer.h index e97cd1ae03d1..96ae7feac47c 100644 --- a/arch/x86/include/asm/timer.h +++ b/arch/x86/include/asm/timer.h @@ -14,12 +14,12 @@ extern int no_timer_check; extern bool using_native_sched_clock(void); =20 #ifdef CONFIG_PARAVIRT -void __paravirt_set_sched_clock(u64 (*func)(void), bool stable, - void (*save)(void), void (*restore)(void)); +void __init __paravirt_set_sched_clock(u64 (*func)(void), bool stable, + void (*save)(void), void (*restore)(void)); =20 -static inline void paravirt_set_sched_clock(u64 (*func)(void), - void (*save)(void), - void (*restore)(void)) +static __always_inline void paravirt_set_sched_clock(u64 (*func)(void), + void (*save)(void), + void (*restore)(void)) { __paravirt_set_sched_clock(func, true, save, restore); } diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index d4f7cb127235..363145c83919 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -280,8 +280,8 @@ bool using_native_sched_clock(void) return static_call_query(pv_sched_clock) =3D=3D native_sched_clock; } =20 -void __paravirt_set_sched_clock(u64 (*func)(void), bool stable, - void (*save)(void), void (*restore)(void)) +void __init __paravirt_set_sched_clock(u64 (*func)(void), bool stable, + void (*save)(void), void (*restore)(void)) { if (!stable) clear_sched_clock_stable(); --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 59B714ACCE8 for ; Thu, 6 Aug 2026 23:37:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059444; cv=none; b=kYBm/+GeZKwZnFDDdRFp3mY8lTSxvNHWwXfpMNXtfQqSS3REa2mZiV7HK1ESgpu50HldKClzCIAXuDnlVW6s+Qk3ToGGGFWztcge+5sxU/03gqpEyjQKafos2Hh9Jlv8uo5wfmYc/7FU8+PuwvIXbjCZO0OZzuq0sT8qQa+FmnM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059444; c=relaxed/simple; bh=wE5Lnirgd+SKewLj9G18nlZgvflnuTi/pbn67D/XsGQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=UP/XbZPlF0quemnkBHShb6Di2s9m8izRUVJCow5p9R9xAd2rhJIkIKGC4BIZCEUjNymuOgn6/C2wrO5B3V3PouRChudUTX4tvASzSw444RRxxg1xV/4uMdJIhz3IT4vcLhOwD4Dfz/4rgONp5HvV6BCV4gRaSFipz8grmKl90/Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=tV/jonAz; arc=none smtp.client-ip=209.85.215.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="tV/jonAz" Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-ca7c1e22995so3995579a12.3 for ; Thu, 06 Aug 2026 16:37:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059441; x=1786664241; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=+in/CASVMXdQrSwySi/14FWqsmLN6M2d30MjdmJLYfo=; b=tV/jonAzD1gvrVOiLa1Z1kILJtb3hVbmkLleBr+MPoZeYYA6GyHhZEiIxNaObrJGEu DYJrl6z6JJNKxkp5/q4OZEmODWsCiknZgzn1kd5VftFf68RWN3c8o2AakTQOhJE8o/mE u8INnngDNFtkdU5w7T9bk8Ibw3yQcrwUFnvxeW/mCm5aTSrW2czaQl1PgPvws4r9kNCv Tw0itHa8O/W4Y4uGX6+4uuau+gSe5KtxRBNJSEYJYgR6A/uXDKTdDxxCmP5ruWz+053A b+KOHcrWmCcfq/La39lSO0KJiO5FLUTwyoC1rwPfwKTJtfahGHsdjcMMVOR3vXkhGEYP Odcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059441; x=1786664241; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=+in/CASVMXdQrSwySi/14FWqsmLN6M2d30MjdmJLYfo=; b=Q0f6JPB43Fq9cy3HYtF7V9d2of0yWF0TO36/TQOls0FjjJL2Aql/c0zrxh4NKCX5W8 Oxk8zIhaAagBtQRxghUIMqKAuyyqmtIS3qHpIsqwpc9zcfMaM3/ovHT/fnc6LO07MbM3 yCuXBdDd3TRILHYxKivoT1ux3jBofLjilTKq7HijXKE5iyDIAa9hMQ4dqvMiFGO1M1fu CKWOwVPqakEuvbFSs94usoMRiHEjh8LKvEmCoHNLwEOVODzpBeMkPP8vYOSz5d0i97+d UrwzTg8AyD2BfMNxWacy6e7n+HxGMsZWVfmyuq37m32MiBIQ8x+D1NcZD5OSC8esMqmj YZCQ== X-Forwarded-Encrypted: i=1; AHgh+RqfHnQo5h+GBBQIBpj7lXflXNruMQeK7KeVpc7luTmV4WHrgeUpf0JBwTsPyvHWSqKIrN8LvPJI6JnnCPk=@vger.kernel.org X-Gm-Message-State: AOJu0Yx9gE38S7M1MjRG4FWWjl0akUCrzfC01ra7dAVT+hd94TPxe+DS Trird3tcp1ewhUc9UvOyHg0RIFHf1XvuGPHJ0jgBbgCjWh+5divEngwh6DnoB3SmoInry2v7NKc WkVLiHw== X-Received: from pgii4.prod.google.com ([2002:a63:2204:0:b0:c8d:62a8:ee35]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:7a9c:b0:3bf:983d:e9b4 with SMTP id adf61e73a8af0-3cb8603af0dmr21846910637.33.1786059441366; Thu, 06 Aug 2026 16:37:21 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:36:03 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-47-seanjc@google.com> Subject: [PATCH v6 46/51] x86/paravirt: Plumb a return code into __paravirt_set_sched_clock() From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a return code to __paravirt_set_sched_clock() so that the kernel can reject attempts to use a PV sched_clock without breaking the caller. E.g. when running as a CoCo VM with a secure TSC, using a PV clock is generally undesirable. Note, kvmclock is the only PV clock that does anything "extra" beyond simply registering itself as sched_clock, i.e. is the only caller that needs to check the new return value. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/include/asm/timer.h | 6 +++--- arch/x86/kernel/kvmclock.c | 9 ++++++--- arch/x86/kernel/tsc.c | 5 +++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/arch/x86/include/asm/timer.h b/arch/x86/include/asm/timer.h index 96ae7feac47c..ca5c95d48c03 100644 --- a/arch/x86/include/asm/timer.h +++ b/arch/x86/include/asm/timer.h @@ -14,14 +14,14 @@ extern int no_timer_check; extern bool using_native_sched_clock(void); =20 #ifdef CONFIG_PARAVIRT -void __init __paravirt_set_sched_clock(u64 (*func)(void), bool stable, - void (*save)(void), void (*restore)(void)); +int __init __paravirt_set_sched_clock(u64 (*func)(void), bool stable, + void (*save)(void), void (*restore)(void)); =20 static __always_inline void paravirt_set_sched_clock(u64 (*func)(void), void (*save)(void), void (*restore)(void)) { - __paravirt_set_sched_clock(func, true, save, restore); + (void)__paravirt_set_sched_clock(func, true, save, restore); } #endif =20 diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index 2cc3dd2ba355..22e8855fcd4d 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -332,10 +332,13 @@ static int kvmclock_setup_percpu(unsigned int cpu) =20 static __init void kvm_sched_clock_init(bool stable) { + /* Ensure the offset is configured before making kvmclock visible! */ kvm_sched_clock_offset =3D kvm_clock_read(); - __paravirt_set_sched_clock(kvm_sched_clock_read, stable, - kvm_save_sched_clock_state, - kvm_restore_sched_clock_state); + + if (__paravirt_set_sched_clock(kvm_sched_clock_read, stable, + kvm_save_sched_clock_state, + kvm_restore_sched_clock_state)) + return; =20 /* * The BSP's clock is managed via dedicated sched_clock save/restore diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 363145c83919..fcf331ffd874 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -280,8 +280,8 @@ bool using_native_sched_clock(void) return static_call_query(pv_sched_clock) =3D=3D native_sched_clock; } =20 -void __init __paravirt_set_sched_clock(u64 (*func)(void), bool stable, - void (*save)(void), void (*restore)(void)) +int __init __paravirt_set_sched_clock(u64 (*func)(void), bool stable, + void (*save)(void), void (*restore)(void)) { if (!stable) clear_sched_clock_stable(); @@ -289,6 +289,7 @@ void __init __paravirt_set_sched_clock(u64 (*func)(void= ), bool stable, static_call_update(pv_sched_clock, func); x86_platform.save_sched_clock_state =3D save; x86_platform.restore_sched_clock_state =3D restore; + return 0; } #else u64 sched_clock_noinstr(void) __attribute__((alias("native_sched_clock"))); --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5C5A64F798F for ; Thu, 6 Aug 2026 23:37:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059445; cv=none; b=E2L1MOJKCllX/68oKwVcncByRpi1VoJ3HS35DYebhUmoO6RR7kPF29QdqdZ+P5vQJQ/2RAvU/1J5gRaIkrTbVtWdGtg2UgXZhn+emp3OVX784mQ6vo5pRO/aN5bzcq8aIVks/1J5Xm9ZuEQ0TRwX8eaEHYsg/EtgpBtG0cw9tJQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059445; c=relaxed/simple; bh=KyczVRw6DQ4Q2CF9U3rOeviso8DvMN7GdliVgfbvQQ0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=j+iOCWYhUU3MC3VRep1f+gIMviBdfNMFP4Ry+7GNxIVQuZ2j5DZ0Ya/j/jrkcoNGIw5lNn5C0IUdUfT6ti8wZPgOe5/ZHNbeaR8KJkIPwdJ3ScF5VqOIX5lhIn1ByWsdsiLEs63xULCHPOymgKf0EQIbb1IC74cWXqf1udvOu4E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=nBvaHWQj; arc=none smtp.client-ip=209.85.215.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="nBvaHWQj" Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-cbb467e56aaso2947266a12.1 for ; Thu, 06 Aug 2026 16:37:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059443; x=1786664243; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=NcgEnPBxyGviYS1Y0BEogKtyt4exk2sJiTd88Re19eg=; b=nBvaHWQjRUJBELDkGEpYOwrVRgx+Tj2Eac82OmyG0INkWqnxm6f2wA16yysVOtQOTb OYeJmwk4L8ZjbZ+c63zCfcx8uLF+xDAiSFodANwvuQCSIk3TC7OrdXBnTWlbyYYvVnRT ajL2oyhgK+HpHDh9OUNSo86Q/KzGl0stk1PIu2lyBsVnu9Ty+/IyliYDbwfAq6zchBqK aMSUzT0wngvsJdkJwQNKUGSOd6VpehY0mja6b4HXizQpz1BnxtHXRVzjV7aaX2ij5Ymv ykppzBHqwNRF8Z5zy6iJfvnDGajEi1xT2aYhjWDDxZpt2XDf211ui97uRYXmdNuSZhHK D0cQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059443; x=1786664243; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=NcgEnPBxyGviYS1Y0BEogKtyt4exk2sJiTd88Re19eg=; b=cI8UVmxFkr4C7TVHiTD/SmOkCSvzf+yPZD0QZLXrFf5dlamH8xi7iyVA9120xF45ot rgSlbaUyZHxOP5yOLHuyYCrUVim6ne+gaQqg+aLM0+OLHY8GkgX+SvFRLe2enI5tHkDs t7l8Td/BnolElELOvl948hE48UvcCZkVB2lhL9t6sgBRIJPFtuoQK3VDh1J8m9FxnkL/ nkRDq02q+FkPtHzfqEsHuFgxqhb2F3gQeOA2eud/ux9QBXDgIrGJl0Los3oZPDtTTciB 4N5Wt6ZxLo+vHbPxFPGUz1NPmNjeIrtbj6gJISW5f2wAHb0LKyR5rrIpvQxbCrMjKpXe WwVQ== X-Forwarded-Encrypted: i=1; AHgh+RpmcfvcWdA0uOJow8P1hF6mltWHl8fGFoafD9k9H6AVz5v/y4CtmDiEeY0Mrkq2NbIWvFpvKj5ORavOcas=@vger.kernel.org X-Gm-Message-State: AOJu0YyVIrWIcEQEsXJLXAMnmkti9uNfyAvJFho/eZthFsewSHxknYX+ bGPejzwhs3vQdepYLOaAFu5DtnzSrxIDwEYCN1a/O9ZkMPYN+uTYXFOfTIxzhRD8ddUwpmX8V75 +2vheyg== X-Received: from pfbcw11.prod.google.com ([2002:a05:6a00:450b:b0:848:51a7:e8bb]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:2999:b0:848:67ca:bfd with SMTP id d2e1a72fcca58-84f2dff1913mr22778991b3a.16.1786059442569; Thu, 06 Aug 2026 16:37:22 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:36:04 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-48-seanjc@google.com> Subject: [PATCH v6 47/51] x86/paravirt: Don't use a PV sched_clock in CoCo guests with trusted TSC From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Silently ignore attempts to switch to a paravirt sched_clock when running as a CoCo guest with trusted TSC. In hand-wavy theory, a misbehaving hypervisor could attack the guest by manipulating the PV clock to affect guest scheduling in some weird and/or predictable way. More importantly, reading TSC on such platforms is faster than any PV clock, and sched_clock is all about speed. Reviewed-by: David Woodhouse Reviewed-by: Nikunj A Dadhania Signed-off-by: Sean Christopherson --- arch/x86/kernel/tsc.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index fcf331ffd874..c0e4485484f2 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -283,6 +283,15 @@ bool using_native_sched_clock(void) int __init __paravirt_set_sched_clock(u64 (*func)(void), bool stable, void (*save)(void), void (*restore)(void)) { + /* + * Don't replace TSC with a PV clock when running as a CoCo guest and + * the TSC is secure/trusted; PV clocks are emulated by the hypervisor, + * which isn't in the guest's TCB. + */ + if (cc_platform_has(CC_ATTR_GUEST_SNP_SECURE_TSC) || + boot_cpu_has(X86_FEATURE_TDX_GUEST)) + return -EPERM; + if (!stable) clear_sched_clock_stable(); =20 --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1951B4AD692 for ; Thu, 6 Aug 2026 23:37:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059447; cv=none; b=cYxR4UlzUlodwD1dTTSiWD8qADp+bfSeI9/Zc/i/9ErUodjbRnUhhVwnFge+8J2IGBA4iA7f28U139v46DVu2Ho6MMsYyzJqTqYaNoMmZ0UW+Ua2qULryihIAjoQ2pO6NmDgy5AK5UGgPi/wPo405h/fzErsr10RrtlY4b1K7Pc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059447; c=relaxed/simple; bh=BnM4G2QoVq+BwBjw0knb7MjaTBG0gVh357KJ4LCrn0Y=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=euYt5Iq+sFSHPxTUlhKmmiqcALyiaUYj9TZr/dbhIkMQ8b7l0TiknN/9zIt9Le7G4XT83g89nXX/VUqQY6qbdjt2/77CwoelgY1cUlJwszaZFJ2sqsQH/1YtRX1ErQpaStON7qsDTMsyRE3GP2YZbAHVlTpy7Y/aToFheQ/LaQo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=XPjhXZcV; arc=none smtp.client-ip=209.85.215.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="XPjhXZcV" Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-cab048cdb3eso3723886a12.0 for ; Thu, 06 Aug 2026 16:37:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059444; x=1786664244; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=ZEuUzNS+h+uJbnucj4BSLPHP7Njp50j+oXkHsgjPk/g=; b=XPjhXZcVye4qONDo9f5v+cOzCP/kgY5hsFqRXf0UiSRyvc1h7xaNoYUsnZ6xWFE6rO GagQo3KfH7tarnt/5iPoxlWntun5JIxlPGILoMTRqj0EhqzJ5sFm92CluPo0FKhPRG4F v5PcIM5YZW8YX8BkIHR1ZDnex4kPB2+DQ+NjAmGr6gQUkYNwF97Dr3r8zcvFVf0g5727 MrJBhmfp5QoDdu69a9SvTQ0miYGKr4wzniZAKn/qdO8alySqUAibLH6NU5ixzwxE3s6b 0r4JgTp0lE0eOzQCGD1h9vJ1WB+J5pHWVOwDD2gHWEcqFhY6+LHZzf5gKUgIFrr+flY+ ehTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059444; x=1786664244; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=ZEuUzNS+h+uJbnucj4BSLPHP7Njp50j+oXkHsgjPk/g=; b=Vl6XjG6IF4hochXy8xbqKYGMHPDOSCYo/6fYfjVskR/EPlMtT1byTBEqLiTw1hGzVo 9dTWOlGa2t8R12/CKY+lTkPvxXE9WJCURxEPGhCcKgqwc68ZWr0KUO9IlJ+Eg6lCyIqh p8IDjeW4mALBTlgQzSQE7qwWit+Pob8pJtVDWMYfEyHyCzXR/hgNjhCunvg7yxFuucJR glX9ljW6mYgbYvQ+eq7qZ61x/G15T+nqanjYKW40fKaqCVylKycV+huVbKxOprYPAzeP v+lu0fSy6eTAv7yomCDjJvweCCYTZA16+O5zmkGJlr9Fmvp/A9jfZz9sOfkhjJ/XgFlc 8UMw== X-Forwarded-Encrypted: i=1; AHgh+RpuSuh75f/gck39D6Yb9kb0iylwtjLnkux2oaTXE8Mp+CaS7YUuyXqmFS+ZMeYzuG33066R4ZOw2KctI3w=@vger.kernel.org X-Gm-Message-State: AOJu0Ywwvmmu40IQtGTIiBCBbaMM4Ww++vE45cEaEd/66m9WZ7EM6ORw zL2KFNqEbvwSvqLJLaHoMhs95nRKAjcxkzR5xMK6dSpvn5GY90lvR5unTympC5v36gC2ujuMkL0 hB2rprA== X-Received: from pgng29.prod.google.com ([2002:a63:375d:0:b0:c9a:c533:8329]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:4309:b0:3c8:ead5:bf7b with SMTP id adf61e73a8af0-3cb85ded991mr21268446637.4.1786059443651; Thu, 06 Aug 2026 16:37:23 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:36:05 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-49-seanjc@google.com> Subject: [PATCH v6 48/51] x86/kvmclock: Use TSC for sched_clock if it's constant and non-stop From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Prefer the TSC over kvmclock for sched_clock if the TSC is constant and nonstop. I.e. use the same criteria as tweaking the clocksource rating so that TSC is preferred over kvmclock. Per the below comment from native_sched_clock(), sched_clock is more tolerant of slop than clocksource; using TSC for clocksource but not sched_clock makes little to no sense, especially now that KVM CoCo guests with a trusted TSC use TSC, not kvmclock. /* * Fall back to jiffies if there's no TSC available: * ( But note that we still use it if the TSC is marked * unstable. We do this because unlike Time Of Day, * the scheduler clock tolerates small errors and it's * very important for it to be as fast as the platform * can achieve it. ) */ The only advantage of using kvmclock is that doing so allows for early and common detection of PVCLOCK_GUEST_STOPPED, but that code has been broken for over two years with nary a complaint, i.e. it can't be _that_ valuable. And as above, certain types of KVM guests are losing the functionality regardless, i.e. acknowledging PVCLOCK_GUEST_STOPPED needs to be decoupled from sched_clock() no matter what. Link: https://lore.kernel.org/all/Z4hDK27OV7wK572A@google.com Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/kernel/kvmclock.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index 22e8855fcd4d..bc98ebb8587d 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -396,7 +396,6 @@ void __init kvmclock_init(bool prefer_tsc) PVCLOCK_TSC_STABLE_BIT; } =20 - kvm_sched_clock_init(stable); =20 if (!x86_init.hyper.get_tsc_khz) x86_init.hyper.get_tsc_khz =3D kvmclock_get_tsc_khz; @@ -416,6 +415,8 @@ void __init kvmclock_init(bool prefer_tsc) */ if (prefer_tsc) kvm_clock.rating =3D 299; + else + kvm_sched_clock_init(stable); =20 clocksource_register_hz(&kvm_clock, NSEC_PER_SEC); pv_info.name =3D "KVM"; --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E39954ACCE6 for ; Thu, 6 Aug 2026 23:37:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059448; cv=none; b=QAGWUXukc0lsTV0GdGR+63G9Ryp2rBu+CTgVjehveyzZt3QzCKqWFcpr0n41hnrAwHrSCFnimajRk6rlPpP3MHVUEXqAXyx5y66jxc8CapG7+d/6qqfu5Vrpu4PUvdiqR0ASgD3dVhV90MYNxXd7xnoCX1eBd9xAZa3dpcOodRQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059448; c=relaxed/simple; bh=DotEodtP+5nx+qQ2PED5Az3WVrkKwKmbTzb/y5Tt2sE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Ws+jtBcZXgMojHNyjLD+ZD6fEfeYfHjoGT/aPN+b4PpwBnmaWA6jKojnQV56qeeBSjoumZsyfrWNzqWFYqUmHYwpZE+vzbWozA/6aZMh2gYkFbE3sioAYmefFae/F1Rszd3qdfbqFNsFgJyxyYIOLJ15+TE1a+xfYZ3dbVRe/9k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=CLpLfWHr; arc=none smtp.client-ip=209.85.214.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="CLpLfWHr" Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2cfca8558d2so38193865ad.2 for ; Thu, 06 Aug 2026 16:37:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059445; x=1786664245; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=/TxUyuE9/koLQyW6zcM5dMaQ+pcBou93eYQoJAAWN+E=; b=CLpLfWHr+iPxI9WBbdFWWWvKTRL2bJeWYuZfzK0uXV/2EYzCuUezUStwDFpOg6yc5N WrI4aUOptdE7Z08WnoTh6IM9q6r8ffiyKLRt0yyDE/HnTzDozpU9UHL7Vi3FZe1ugKLK dLYAQuVPiVMGeGqFdlAcbZ51zuVmgC7SbqVvLGJFlMDHokLojUnMRe0nuYX5Hh/VWH85 0npF2TdFqdA3RuWaLICOv8vabJKCOoefAbCo/gsmw9bYxUGZBt22A8osgxAr4CgtTke3 OpNhmZe9Tf3v1x+dU3gmcKftdIFhlrOKxUWPXAaS9+d0eMgMA+cUBywRpkP0/TPw3nPI 2IRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059445; x=1786664245; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=/TxUyuE9/koLQyW6zcM5dMaQ+pcBou93eYQoJAAWN+E=; b=Ce+tH6tYXH1D1KamLqHZx0Kier4uB9hxyEGRH2g7KpbsCTv/BD+kyfyfQt/Re6kRZt h9Tdtk1QTa1i9Cdeg+8P9dsd3AsFG9KuPNbkUTO8Rq8qUYDWpD/NXbtlnetjXUoYlWp4 BPLDnE0C9cu/ZVSww3sPZQHYl0gOM+HDF/Eg/YkV9fdBoqHwJBaiTZccIGIUf+KpD2Rm M2v9aFLSF3W02iIzBgM5Qd3daehc+60p1Cj87nNEtFTjJYjyrkLA4lEf2g7IkbImpOy4 o3EQzGoH2PgA8Knu5/xCRwAsIDx1WrbyMBnLYAjzVJz0lT8yf6K6YwYwn0YHh/E978Hs ArVg== X-Forwarded-Encrypted: i=1; AHgh+RrmVZoOVDCc1sf4deaSIcKjUpAzt7DjWNg9PUuZI24N6qc6OSAObs9fBAHIq9N1zL5eNUNnlzM9bJ9WYV4=@vger.kernel.org X-Gm-Message-State: AOJu0Yzk9kPLOPXuJ7py8MprTLy2MZw2tSOvkaJjrsGdlSfSxVObSdgV 2gd42LhwuW+B7xtp9BkTxRguF320bBvZEg84TzMn6AAwPAiISLbDYruqwLWfvgw9bDDiLFD0oj6 thMwnrg== X-Received: from plgi9.prod.google.com ([2002:a17:902:cf09:b0:2c7:e06e:86f6]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:c402:b0:2c9:c952:6e9 with SMTP id d9443c01a7336-2d0ca7b024fmr202039245ad.2.1786059444816; Thu, 06 Aug 2026 16:37:24 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:36:06 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-50-seanjc@google.com> Subject: [PATCH v6 49/51] x86/kvmclock: Plumb in AP-online and BSP-resume to kvmlock, for documentation From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Invoke kvmclock_cpu_action() with AP_ONLINE and BSP_RESUME, even though kvmclock doesn't need to do anything in either case, so that the asymmetry of kvmclock is a detail buried in kvmclock, and to explicitly document that doing nothing during those phases is intentional and correct. For all intents and purposes, no functional change intended. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_para.h | 2 ++ arch/x86/kernel/kvm.c | 22 +++++++++++++------- arch/x86/kernel/kvmclock.c | 37 ++++++++++++++++++++++++++------- 3 files changed, 45 insertions(+), 16 deletions(-) diff --git a/arch/x86/include/asm/kvm_para.h b/arch/x86/include/asm/kvm_par= a.h index 08686ff19caa..763ed017738a 100644 --- a/arch/x86/include/asm/kvm_para.h +++ b/arch/x86/include/asm/kvm_para.h @@ -120,6 +120,8 @@ static inline long kvm_sev_hypercall3(unsigned int nr, = unsigned long p1, #ifdef CONFIG_KVM_GUEST enum kvm_guest_cpu_action { KVM_GUEST_BSP_SUSPEND, + KVM_GUEST_BSP_RESUME, + KVM_GUEST_AP_ONLINE, KVM_GUEST_AP_OFFLINE, KVM_GUEST_SHUTDOWN, }; diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index 9c0b2fc98cc9..b954238b09fc 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -474,18 +474,24 @@ static void kvm_guest_cpu_offline(enum kvm_guest_cpu_= action action) kvmclock_cpu_action(action); } =20 +static void __kvm_cpu_online(unsigned int cpu, enum kvm_guest_cpu_action a= ction) +{ + unsigned long flags; + + local_irq_save(flags); + kvmclock_cpu_action(action); + kvm_guest_cpu_init(); + local_irq_restore(flags); +} + +#ifdef CONFIG_SMP + static int kvm_cpu_online(unsigned int cpu) { - unsigned long flags; - - local_irq_save(flags); - kvm_guest_cpu_init(); - local_irq_restore(flags); + __kvm_cpu_online(cpu, KVM_GUEST_AP_ONLINE); return 0; } =20 -#ifdef CONFIG_SMP - static DEFINE_PER_CPU(cpumask_var_t, __pv_cpu_mask); =20 static bool pv_tlb_flush_supported(void) @@ -752,7 +758,7 @@ static int kvm_suspend(void *data) =20 static void kvm_resume(void *data) { - kvm_cpu_online(raw_smp_processor_id()); + __kvm_cpu_online(raw_smp_processor_id(), KVM_GUEST_BSP_RESUME); =20 #ifdef CONFIG_ARCH_CPUIDLE_HALTPOLL if (kvm_para_has_feature(KVM_FEATURE_POLL_CONTROL) && has_guest_poll) diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index bc98ebb8587d..842f38c5f6ca 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -150,7 +150,7 @@ static void kvm_save_sched_clock_state(void) #ifdef CONFIG_SMP static void kvm_setup_secondary_clock(void) { - kvm_register_clock("secondary cpu clock"); + kvm_register_clock("secondary cpu, startup"); } #endif =20 @@ -174,13 +174,34 @@ static void kvmclock_resume(struct clocksource *cs) =20 void kvmclock_cpu_action(enum kvm_guest_cpu_action action) { - /* - * Don't disable kvmclock on the BSP during suspend. If kvmclock is - * being used for sched_clock, then it needs to be kept alive until the - * last minute, and restored as quickly as possible after resume. - */ - if (action !=3D KVM_GUEST_BSP_SUSPEND) + switch (action) { + /* + * The BSP's clock is managed via clocksource suspend/resume, + * to ensure it's enabled/disabled when timekeeping needs it + * to be, e.g. before reading wallclock (which uses kvmclock). + */ + case KVM_GUEST_BSP_SUSPEND: + case KVM_GUEST_BSP_RESUME: + break; + case KVM_GUEST_AP_ONLINE: + /* + * Secondary CPUs use a dedicated hook to enable kvmclock early + * during bringup, there's nothing to be done during CPU online + * (which runs at CPUHP_AP_ONLINE_DYN). When kvmclock is being + * used as sched_clock, kvmclock must be enabled *very* early, + * and even when kvmclock is "only" being used for the main + * clocksource, it still needs to be enabled long before the + * dynamic CPUHP calls are made. + */ + break; + case KVM_GUEST_AP_OFFLINE: + case KVM_GUEST_SHUTDOWN: kvmclock_disable(); + break; + default: + WARN_ON_ONCE(1); + break; + } } =20 /* @@ -382,7 +403,7 @@ void __init kvmclock_init(bool prefer_tsc) msr_kvm_system_time, msr_kvm_wall_clock); =20 this_cpu_write(hv_clock_per_cpu, &hv_clock_boot[0]); - kvm_register_clock("primary cpu clock"); + kvm_register_clock("primary cpu, online"); pvclock_set_pvti_cpu0_va(hv_clock_boot); =20 if (kvm_para_has_feature(KVM_FEATURE_CLOCKSOURCE_STABLE_BIT)) { --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 11AD64AE65A for ; Thu, 6 Aug 2026 23:37:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.69 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059449; cv=none; b=EdhWn0DxZlWYhfhveywWEzPuw4NvRPfKGrNM5N+fZO5wXU2OG8NDZjzxsb3bJpRDCEbDxpKHtYvq5BZ2W9IsJ4LtCcP55nd/+ZFf1mtQKcVA8T6X6LojFFabyRYzfAfMJ0OnMYsExMdF3UyuhrRu9LWLQVJUqkvEj8s00ew+ovE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059449; c=relaxed/simple; bh=XsGLMtVm+PnMkFVZK403hqaUQQJSgP5QvusfM67Nl2Y=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=af4eobay/U+KdIfl+pV1rva2Vc8SXbTVAJbA0FXEQWFRrbDE0hnu5cwhNEbwEHet9pFVFGooaYo+zoeiztiFnQffM74vxLfT66YWc27vKhpqEuO9KHbPrKHErfUFvQfRtd9cKgkfyTDUj1J0Pig9grWNc1ksZ1ZsuogcV8AOKJU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=HGMKg28n; arc=none smtp.client-ip=209.85.216.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="HGMKg28n" Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-38e475f83a2so4350869a91.1 for ; Thu, 06 Aug 2026 16:37:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059446; x=1786664246; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=yUUzKej44hzjMWM7byUMUm3T8+/2OB7FMHfj7k4gSDk=; b=HGMKg28nASFYLGCgOBBJLFyCmJx4pKOxyOgpGsBXm405qiiMJXK8ddrh35Yo3xvAwv MgxrQ5YWbd9oXsaDi6xfaolQU06Z8N51/rCKFWfRZGBM2vNKCsmSo+/320NTz3+G9eMC eUfGMTj5mfH3jqjMcfUe6sEoaz4CL3Er2n9LX9i4K04NagAV3PLKZDwtUP0QaWlmI/3w jU9SzqzOIXURE1zHfGuROcuJigUbWIejtJBD7HahA2Mt1iqhE3dExLv1D4midT4t4FNa rDVQQolP6LKG4g0WLg+JMvPvR9KcqFVtcOFQrkbr67p0BqUUzVsfLdze8RbklMw76Gui KcJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059446; x=1786664246; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=yUUzKej44hzjMWM7byUMUm3T8+/2OB7FMHfj7k4gSDk=; b=WnlTIQefeSpvozKjZzeMPOsJ7ZHllK/d4b9YUpawmlNt/MfwjJnM8IPX8AZjVlG5ky 7+bSTjMilhny/y3yLemouAkn4zSKO+k99Q64gSlEwdhVPY5GnZ50FsIYmuCYKpIssLXD YdI/f/cUvMeSC3XCOjUmYoIiT5lPHJwcK9qr19W7TF05G9LJt2RP8Hj4xHhk9DvP+rBB F4mT6LBE8XQo9o8qmNaeBkU+xydUVUu3Jg9mQAW6Yrpie5ggvCAs0w5m8izI0j3jzjTe V2G7PNZ0n282HEw44p6vWQSzjnPTb9BhKd/6nAJ3mH5GGbNQEDbmFyJOgOKLRyaczack T5XA== X-Forwarded-Encrypted: i=1; AHgh+RrkOIt5UidsVUbMACKYUlfNkvtjGAlWtzov7qKXUZIJxRmjVj3I2d7+ze3PWVACuonfoXSvx40BGRx29Zo=@vger.kernel.org X-Gm-Message-State: AOJu0Yx6Y+QH3U0iMoE1OzWNOwLrhZPzjW299WvMku9VERUejuWzEt1E BCoyo8JLOBnliS/3gXIpHeGBvYIhtZrHba/bWFR5uTxKtl0Cr1jGlfuNR0XcbUHrq5LGF99gAIZ I1p13eA== X-Received: from pjzp16.prod.google.com ([2002:a17:90b:110:b0:382:7fcd:a18a]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:520a:b0:38f:5828:a40c with SMTP id 98e67ed59e1d1-3903c59a6eemr19079453a91.10.1786059446038; Thu, 06 Aug 2026 16:37:26 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:36:07 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-51-seanjc@google.com> Subject: [PATCH v6 50/51] x86/paravirt: Move using_native_sched_clock() stub into timer.h From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that timer.h ended up with CONFIG_PARAVIRT #ifdeffery anyways, move the PARAVIRT=3Dn using_native_sched_clock() stub into timer.h as a "free" optimization. No functional change intended. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/include/asm/timer.h | 6 ++++-- arch/x86/kernel/tsc.c | 2 -- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/x86/include/asm/timer.h b/arch/x86/include/asm/timer.h index ca5c95d48c03..a52388af6055 100644 --- a/arch/x86/include/asm/timer.h +++ b/arch/x86/include/asm/timer.h @@ -11,9 +11,9 @@ extern void recalibrate_cpu_khz(void); =20 extern int no_timer_check; =20 -extern bool using_native_sched_clock(void); - #ifdef CONFIG_PARAVIRT +extern bool using_native_sched_clock(void); + int __init __paravirt_set_sched_clock(u64 (*func)(void), bool stable, void (*save)(void), void (*restore)(void)); =20 @@ -23,6 +23,8 @@ static __always_inline void paravirt_set_sched_clock(u64 = (*func)(void), { (void)__paravirt_set_sched_clock(func, true, save, restore); } +#else +static inline bool using_native_sched_clock(void) { return true; } #endif =20 /* diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index c0e4485484f2..74298e8ffa1f 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -302,8 +302,6 @@ int __init __paravirt_set_sched_clock(u64 (*func)(void)= , bool stable, } #else u64 sched_clock_noinstr(void) __attribute__((alias("native_sched_clock"))); - -bool using_native_sched_clock(void) { return true; } #endif =20 notrace u64 sched_clock(void) --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 13 09:24:11 2026 Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 70FDD4AE663 for ; Thu, 6 Aug 2026 23:37:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059450; cv=none; b=lhX2G/uscgsrcQjUH+8MvBJhK1IwP/WA4ye+CjFYLCCMfx/HgVsO113zhnPRXx+11aR8ZLt6Dx7ME6d5GOYG3/LGpIeqcLkm03hQYTgGtqhIaNP2KWSSIm0MUBVw7bwcPoEKAqAFVinjKj7reidRDMm3feVz5Yu6ca3Kn6eq2EY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786059450; c=relaxed/simple; bh=UjpjKwl+lBUDjSIYpCNArAdlu1FqZC9gy6u6ndRSMj4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=nONGoogEeOMbi7/a51IHJOlDkoujI5832c7NqL5CT0miXvJ7Y1ItmSqvIuLJST1RWlRyrAeCRktV8Wj8LN3p4uqnreUckpFmKrD6rL1u6LjGrKuB4X157bo11YWu0GNe7BX2UZN4ZBQbQ5WoV1k049Eo9fw2fUF4AS4PuolEcQY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=F2ieCjFj; arc=none smtp.client-ip=209.85.214.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="F2ieCjFj" Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2ce7dfd33ffso32944755ad.0 for ; Thu, 06 Aug 2026 16:37:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786059447; x=1786664247; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=WG6tzs8/D5vUVAMD7J6BXfy7SNaM+XPXtfc+RTelhM8=; b=F2ieCjFjISEPh5Mxfbr1nKl0tKoKKUgXtVYrsB5u1kUy3eaEFqDeUZyRDCThAD9e1Y p5dHbHqPgc/IAA02Ylbi1DXp4ePS4pheU/i9wZ3QthJOhm1VLQ1/bnWw9pXimFiFFDWL K1wJqXq9Zi9FAIF9lw9+fQUWikDGgrvrDwg2JSHMfASeZeW4xt8btj8ZFRpZVmVjVZM4 eoWEtH1xyUIqTfLKreDfY0WV++aii9jOsJy57GRAoNeCV9/Iq/dJEDng7InwVXIfJ6bd 2FLYv2RD3U1RQw+GDUEhiBR7b/s8g8qhiButAEWRh6/wAT6zJLkpu8ZmEOQFcTWv59NN bLjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786059447; x=1786664247; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=WG6tzs8/D5vUVAMD7J6BXfy7SNaM+XPXtfc+RTelhM8=; b=pVPRkynnasW9gCAhqiZNLzy8DCBNJImSZ/8cq5qBYX6KYh/uuKEEgLHFv+X3P0SD4b OLPW2TDgA2qomuem30c/nPVKG0UOB5vB7XFUVlyhkrCXCa3PUB4MJwsKqYTMY/s2gVsR HIj/AURQammUqkyGPl/r4qHQxJKRU23YE+du0OQBAoMRpjteMG6c+HrY+ahV6DL0TkTN Xf64LcWibTPTl64jnl3LpoSTzhq7Z1pS5VrbVPMEfOLJ5xgtu0kqdTo5cSBqDoKK0cVC iDRE0qwA1k3GqiPk+v0efduiz9dOWChgiMq6UNVegSGIGlg0cYrSntyT07Id9nncGX45 dWQg== X-Forwarded-Encrypted: i=1; AHgh+RoCX+e0ajBjZM1Ekh9jsSwHwsdM/wow//R3OoNn20dprbsJtzqobcaR+CQ/jyIfKg6AnTF7eylAKGccj/U=@vger.kernel.org X-Gm-Message-State: AOJu0YxTlEhlqtwpltSL1A6qMYQKHDx4eOdSFHIOx+s2OHEXgMywGkKH IGyHqnJWNezA7kaPlUcscPZ4XYC4+CzqyEnvSQ4xz81RQa9zGsjNbNOtVjhuWMe5Ad7sh6KTE9B qBuQV+Q== X-Received: from pjgg14.prod.google.com ([2002:a17:90b:57ce:b0:380:f969:825e]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2590:b0:38f:2168:b9cb with SMTP id 98e67ed59e1d1-3903c572a05mr18788898a91.9.1786059447175; Thu, 06 Aug 2026 16:37:27 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 6 Aug 2026 16:36:08 -0700 In-Reply-To: <20260806233609.212337-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260806233609.212337-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260806233609.212337-52-seanjc@google.com> Subject: [PATCH v6 51/51] x86/kvm: Get local APIC bus frequency from PV CPUID Timing Info From: Sean Christopherson To: Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , Paolo Bonzini , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , Thomas Gleixner , John Stultz Cc: Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , Miroslav Lichvar , x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, Michael Kelley , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When running as a KVM guest with PV timing info provided by the host, stuff the APIC timer period/frequency with the local APIC bus frequency reported in CPUID.0x40000010.EBX instead of trying to calibrate/guess the frequency. See Documentation/virt/kvm/x86/cpuid.rst for details. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/kernel/kvm.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index b954238b09fc..edeff41c03c2 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -992,7 +992,7 @@ static void __init kvm_init_platform(void) .mask_lo =3D (u32)(~(SZ_4G - tolud - 1)) | MTRR_PHYSMASK_V, .mask_hi =3D (BIT_ULL(boot_cpu_data.x86_phys_bits) - 1) >> 32, }; - u32 timing_info_leaf; + u32 timing_info_leaf, apic_khz; bool tsc_is_reliable; =20 if (cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT) && @@ -1054,6 +1054,11 @@ static void __init kvm_init_platform(void) x86_init.hyper.get_tsc_khz =3D kvm_get_tsc_khz; x86_init.hyper.get_cpu_khz =3D kvm_get_tsc_khz; } + + /* The leaf also includes the local APIC bus/timer frequency.*/ + apic_khz =3D cpuid_ebx(timing_info_leaf); + if (apic_khz) + apic_set_timer_frequency_khz(apic_khz, "KVM hypervisor"); } =20 /* --=20 2.55.0.679.g6767b8d81c-goog