From nobody Sat Jul 4 21:05:51 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=1782934377; cv=none; d=zohomail.com; s=zohoarc; b=Z8tA3zPtCNQ93zCzacr9Wf/bSmuVm5rgnf8hqxWZOCx57ihU/PtcB97qn1Y+4zWJs1Gg3i3BfdSUDDVuAAjzdj3NSmaD0E/czrT4VKv7sLmq24CKc0+RzAhg8SOJ7hYAZGPzHXDz5BED1zIi1Vuk7bsUkG2UoppYdHFUHRZAThI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934377; 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=esF5eJj/7ACJs9NShhG3o0+XzSBpzRsvPz4C7FhhKMM=; b=dGn2XF5twtz/Vu6YExetXiICXuK2SvTa3DzzCpL5iMCd22DNdlAe+oPfVZXXZv+YkmgcR5C6eUl1ZPlwHPgCgZlZIpT5xxAeRq5d8x7hxob8XI9dpJkgx/iCfeWbTxPdSPFscrpfZ2L2f9fMGnh8N9LCzLtj2NLZ42YyEptJZk4= 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 1782934377278840.7978122653582; Wed, 1 Jul 2026 12:32:57 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350364.1607817 (Exim 4.92) (envelope-from ) id 1wf0fd-0007mb-Tw; Wed, 01 Jul 2026 19:32:29 +0000 Received: by outflank-mailman (output) from mailman id 1350364.1607817; Wed, 01 Jul 2026 19:32: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 1wf0fd-0007mU-Qo; Wed, 01 Jul 2026 19:32:29 +0000 Received: by outflank-mailman (input) for mailman id 1350364; Wed, 01 Jul 2026 19:32:29 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3SWtFagYKCY4Aws51uy66y3w.u64Fw5-vwDw330ABA.Fw57961wuB.69y@flex--seanjc.bounces.google.com>) id 1wf0fc-0007Zv-SD for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:32:28 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0fc-00Bw10-95 for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:32:28 +0200 Received: from [10.42.69.10] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3SWtFagYKCY4Aws51uy66y3w.u64Fw5-vwDw330ABA.Fw57961wuB.69y@flex--seanjc.bounces.google.com>) id 6a456b35-bab6-0a2a0a5309dd-0a2a450a9d4e-16 for ; Wed, 01 Jul 2026 21:32:28 +0200 Received: from [209.85.214.202] (helo=mail-pl1-f202.google.com) by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3SWtFagYKCY4Aws51uy66y3w.u64Fw5-vwDw330ABA.Fw57961wuB.69y@flex--seanjc.bounces.google.com>) id 6a456b4a-e40e-0a2a450a0019-d155d6cac001-3 for ; Wed, 01 Jul 2026 21:32:28 +0200 Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2c80f89b64bso15742295ad.2 for ; Wed, 01 Jul 2026 12:32: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="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=1782934346; x=1783539146; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=esF5eJj/7ACJs9NShhG3o0+XzSBpzRsvPz4C7FhhKMM=; b=gbdGjLPvfSHGpnVGpCwK7ucojnV45lSdH+Lk6BO1No0nRwZavh8NOnaS9xwxrVSUXE UKdqxnMsYhWoqj/nIUbM9LSUjZ0iXgvN6d/qN0MkU6plvKrkwJ4wp3nao5phv+y9Gtsn cG8Z10qjKoBfQ+9fgdAD5mE9NsvU2uDW0eLnKvprKI6k7XSaw663hdOJgSZnKS2LddGx 7kvQJGJN9QsIeMcKg67ceih1NTnAdBvpkmPscJlI6AAI5l+XDXtdZgUjyhBAsp8pN1cQ 2h7fCh6OGZbg5aYcJLv1Ddeal1uJkTMMo4wLZx1fkyv8t9wPDl8kq2pWG8Y2JFthJQat /W0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934346; x=1783539146; h=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; bh=esF5eJj/7ACJs9NShhG3o0+XzSBpzRsvPz4C7FhhKMM=; b=VXCxBsF8BhG427lMR8CuLR+esaGE2ZK+mJWQGnU8g5jrR23Xr80zf23ZH8Oh/4sXjv Jx0f/2pNMnrCn66oxcarM5g50p2ZfoFdXgmH5z5Bm33yiEHPdStbGdnhJJ66W/t45aRE bbvqdNPagI9VeufmOWxHlvJ0ImoVawJ39yRaDBajGPvvqR2GdpuE8pyoCEyQaLAfcCXq Wy6nZZJvL0ZN8DmcnsvJN93uc9YNMcD2EVPcX3xwy4Au2QrS3ZCYNY1HzcsUAcOqig1S VBP3/DNfun1TlPJYjoyOluR2lzjXKG4ByOfdPeY4e23DWdmCbMYzHD8qRddJ0nAxWmxS ymhA== X-Forwarded-Encrypted: i=1; AHgh+RpgXwACTmF8tJwt8dHwWZiyay5TdhXGy38D3TjidMjVh32Bua/YRlxakYOI8rjbvV1eCp1s2K7LZeM=@lists.xenproject.org X-Gm-Message-State: AOJu0YzVZd4amDY+iqn7uZFCZiGjL09wCReGjZI6Y6fa5bV+vaaQd7jk 8w0jKmHVT47MqgmQc5gwnjOcaf7tdP2AJinoLnhJsAFhKaGgiZuqrIjJMZj/tRiaQbvTntYIU21 Iev8rEg== X-Received: from plfz4.prod.google.com ([2002:a17:902:d544:b0:2c7:f3dc:ae29]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e811:b0:2c9:f73d:4b38 with SMTP id d9443c01a7336-2ca7e6db91bmr32521425ad.19.1782934345724; Wed, 01 Jul 2026 12:32:25 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:22 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-2-seanjc@google.com> Subject: [PATCH v5 01/51] x86/apic: Provide helpers to set local APIC timer period in hz and khz From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-4011c0/1782934348-D7935DDE-2F08127A/0/0 X-purgate-type: clean X-purgate-size: 5605 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934378229158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add and use APIs to set the local APIC timer period instead of open coding the subtle HZ math in a 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 use mul_u64_u32_div() to harden against the possibility that the period 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_000002c= 0, and thus a Khz period of 4294968 would silently overflow the 32-bit unsigned integer used by most callers. Signed-off-by: Sean Christopherson --- arch/x86/include/asm/apic.h | 3 ++- arch/x86/kernel/apic/apic.c | 12 +++++++++++- 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, 18 insertions(+), 12 deletions(-) diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h index 9cd493d467d4..cd84a94688a2 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_period_hz(u64 period_hz, const char *source); +extern void apic_set_timer_period_khz(u64 period_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 aa1e19979aa8..8d3d930576fd 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -176,7 +176,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 +796,16 @@ bool __init apic_needs_pit(void) return lapic_timer_period =3D=3D 0; } =20 +void apic_set_timer_period_khz(u64 period_khz, const char *source) +{ + lapic_timer_period =3D mul_u64_u32_div(period_khz, 1000, HZ); +} + +void apic_set_timer_period_hz(u64 period_hz, const char *source) +{ + lapic_timer_period =3D div_u64(period_hz, HZ); +} + 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..87beecec76f0 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_period_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..36f779dd311d 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_period_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..f2d4ef89c085 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_period_khz(setup_data.v1.apic_khz, "Jailhouse hypervisor"); } =20 static unsigned long jailhouse_get_tsc(void) diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index ce10ae4b298b..f9ecc9256863 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_period_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 48e6cc1cb017..7e990871e041 100644 --- a/arch/x86/kernel/tsc_msr.c +++ b/arch/x86/kernel/tsc_msr.c @@ -211,7 +211,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_period_khz(freq, "MSR_FSB_FREQ"); #endif =20 /* --=20 2.55.0.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934381; cv=none; d=zohomail.com; s=zohoarc; b=JhIZqhpTXux21GveMHbzE0bCIXybR2OlnGAfShPGAKJa91zOJjdL8ahkhOCF51jSZ039oIXgR5IDCPweUdelEDVTqDwUJnxKrIM3+BcwC+1dgblbfjyR1SavN1pprehj+18Pq4p1qKPIoQojCa0Arf3kuq9WBssUVeh5qqQEhNE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934381; 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=t7xFvhsXyUl34us7SMoRDgC7NN8K9lGkg6/G6zp7sLk=; b=bH7jjdXB8sN10k4Gr0lZOQl37/aIFYOOXOgC57GrA5RpyjzbED+y4fsPoSfXfJKB8Vm+81QTDDvWgQe5tG9Ye2eCqKg9HmWow9JywOyA4vjO7G0NJTQB+uw6EbOS82gA5jgJcas60JLk2jovYU7ECAGUGPr3PTGQsZzFu+6cFxo= 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 1782934381274614.3965364656084; Wed, 1 Jul 2026 12:33:01 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350365.1607825 (Exim 4.92) (envelope-from ) id 1wf0fg-00080K-7V; Wed, 01 Jul 2026 19:32:32 +0000 Received: by outflank-mailman (output) from mailman id 1350365.1607825; Wed, 01 Jul 2026 19:32: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 1wf0fg-00080D-4O; Wed, 01 Jul 2026 19:32:32 +0000 Received: by outflank-mailman (input) for mailman id 1350365; Wed, 01 Jul 2026 19:32:30 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3S2tFagYKCZACyu73w08805y.w86Hy7-xyFy552CDC.Hy79B83ywD.8B0@flex--seanjc.bounces.google.com>) id 1wf0fe-0007vn-Nh for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:32:30 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0fe-004o0g-4Z for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:32:30 +0200 Received: from [10.42.69.3] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3S2tFagYKCZACyu73w08805y.w86Hy7-xyFy552CDC.Hy79B83ywD.8B0@flex--seanjc.bounces.google.com>) id 6a456b30-2eae-0a2a0a5409dd-0a2a4503b1b4-16 for ; Wed, 01 Jul 2026 21:32:30 +0200 Received: from [209.85.214.202] (helo=mail-pl1-f202.google.com) by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3S2tFagYKCZACyu73w08805y.w86Hy7-xyFy552CDC.Hy79B83ywD.8B0@flex--seanjc.bounces.google.com>) id 6a456b4c-ec1a-0a2a45030019-d155d6cab929-3 for ; Wed, 01 Jul 2026 21:32:29 +0200 Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2c9960cf96cso12682655ad.3 for ; Wed, 01 Jul 2026 12:32: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="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=1782934348; x=1783539148; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=t7xFvhsXyUl34us7SMoRDgC7NN8K9lGkg6/G6zp7sLk=; b=uDgtrHaJ6ZBuPOkMrZLDVdCcpygN6+1xPMKD3qnf9JAU3vNFS69xLZDPEfT4C9CAcO roT0NWYcs0n7KfI2EZ08ijqTEcDfrg2PwATjpdwThh8Xg/wnN135gQUlrS3GDWaRTVt0 9D6BzSm1dfKTTRixyGbg3k803jhT2S0u+AKdMTe7K9vuiabe4OriVJeX4l3HB3QpWAYn b/H9scq8Ehlir0V4F3eUMUINw9YN4K2jtOm1mW7oQccLpg8eDwD0tX3fX5UjSLOm9MeF Hk9ZdaHnMJ1KOGh2taskaqQIqEv7tlSdENbIJEdySWQp9OtcK8SMtzntmc6eMivgjHz0 fsvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934348; x=1783539148; h=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; bh=t7xFvhsXyUl34us7SMoRDgC7NN8K9lGkg6/G6zp7sLk=; b=YrKSEftd2pq4hZQF6oK10bBwzKyGcbIb7seO/9ZELyhb05GP6eoymYhoC/vA6epTec 7QFdlvJNrSbjPOJoEdWjhk6Y1Q6MGC3JA+myKzQl+Lu9AL5nt5LlcY6MZyxE1ax02xrI XQgU54aN74ut01hb9+xAhEw+OKMxxOjli+FregI29yahh1zALVvqi4ETFqwQusW5IhKM jk5pGe/AYEgYgOV2RR5vMvz6Xjmu74Km70YTynBBTTYBZU4RcTVDrHqtvgcB1RHjUl0F TtxEPV+WeugNPhfBjXfnvc3ugoXLhjDAZzktLBXs1gJjkB/yCaVFkiq8CDH8Pi1jIfT7 vEkA== X-Forwarded-Encrypted: i=1; AHgh+RqbFCEdd8JhaoUSuo3/AZ9XGNgbxk+oJyckGBf7zxXw34Bx4SCttxfCe/sBYgDokLglKIIgROwEQek=@lists.xenproject.org X-Gm-Message-State: AOJu0YwPTlOK5mplBXHpBWw8KApJZ+oDIjKvj21VX/g4T2Myy5eIXR92 3fqLNPiqisX3wd+s/hvTRKaBJwUK2Ilg3jGdhjauiWraxpUevsh7YAdprCaA8QobnUmu0TYn0Yj Hi/3aBg== X-Received: from plbmk12.prod.google.com ([2002:a17:903:2bcc:b0:2c8:219a:17e8]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:19d0:b0:2ca:53e9:1277 with SMTP id d9443c01a7336-2ca7e714f7fmr32655485ad.1.1782934347423; Wed, 01 Jul 2026 12:32:27 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:23 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-3-seanjc@google.com> Subject: [PATCH v5 02/51] x86/apic: Add CONFIG_X86_LOCAL_APIC=n stubs for apic_set_timer_period_{,k}hz() From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-33051d/1782934350-077265D1-D715471B/0/0 X-purgate-type: clean X-purgate-size: 3082 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934382160158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add stubs for the apic_set_timer_period_{,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 --- 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 cd84a94688a2..035998555e99 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_period_hz(u64 period_hz, const char *sou= rce) { } +static inline void apic_set_timer_period_khz(u64 period_khz, const char *s= ource) { } 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 36f779dd311d..13b97265c535 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_period_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 f9ecc9256863..4d6a446645c0 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_period_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 7e990871e041..aece062aee7e 100644 --- a/arch/x86/kernel/tsc_msr.c +++ b/arch/x86/kernel/tsc_msr.c @@ -210,9 +210,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_period_khz(freq, "MSR_FSB_FREQ"); -#endif =20 /* * TSC frequency determined by MSR is always considered "known" --=20 2.55.0.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934372; cv=none; d=zohomail.com; s=zohoarc; b=OGA6T9cVbOEKOioGDV1uj0FyRdiQuRYogiy/adUPzJ7i6kS4jNa9ozQ+U5bsjQHm3280G4+yLda8sbMoNJjYI7veXyYanPaqBYwCILA0HEZAcv8HfQi8tQKGifDvfs6rGs9S24wnA/FOo4HHDZEOWXAIX7va1JWOe7fBABh0F7o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934372; 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=LIZd+3O3352vjgCRNr7RtXOU8moEkEwJFa5rPF13Bys=; b=ab5oKf3hZGVNMO6SsmBEKwApYtt5ggGV02H7aEXAkCdHTT+nZm4GNtG30sJ7U+VJfFauLq5FTnHXQpQga3GgIAzvZuM7aCz6yQKpJjpfIzdHWs2pk681fyJ+Cm34aILeHyXiKEFXxJXJ6FNAGpA6R9PIOHPC3JUFGps9FdJE1t4= 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 1782934372930477.8625475003614; Wed, 1 Jul 2026 12:32:52 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350366.1607835 (Exim 4.92) (envelope-from ) id 1wf0fh-0008Dw-EV; Wed, 01 Jul 2026 19:32:33 +0000 Received: by outflank-mailman (output) from mailman id 1350366.1607835; Wed, 01 Jul 2026 19:32:33 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wf0fh-0008Dp-Bj; Wed, 01 Jul 2026 19:32:33 +0000 Received: by outflank-mailman (input) for mailman id 1350366; Wed, 01 Jul 2026 19:32:31 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3TGtFagYKCZEDzv84x19916z.x97Iz8-yzGz663DED.Iz8AC94zxE.9C1@flex--seanjc.bounces.google.com>) id 1wf0ff-0007zs-N1 for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:32:31 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0ff-009wmK-3z for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:32:31 +0200 Received: from [10.42.69.4] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3TGtFagYKCZEDzv84x19916z.x97Iz8-yzGz663DED.Iz8AC94zxE.9C1@flex--seanjc.bounces.google.com>) id 6a456b4a-e002-0a2a0a5209dd-0a2a45049d7c-14 for ; Wed, 01 Jul 2026 21:32:31 +0200 Received: from [209.85.215.201] (helo=mail-pg1-f201.google.com) by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3TGtFagYKCZEDzv84x19916z.x97Iz8-yzGz663DED.Iz8AC94zxE.9C1@flex--seanjc.bounces.google.com>) id 6a456b4d-a01d-0a2a45040019-d155d7c9d5d3-3 for ; Wed, 01 Jul 2026 21:32:30 +0200 Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-c890bac374eso1130211a12.1 for ; Wed, 01 Jul 2026 12:32: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="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=1782934349; x=1783539149; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=LIZd+3O3352vjgCRNr7RtXOU8moEkEwJFa5rPF13Bys=; b=fWhuJTSH9F0LxNXwM51JmmDSaGne7DlthsbIvNEuy/j2XdAyRqR9wfSwo+I21iBh7l alzYdN+y9DKLhH4EMvZYYukJZ/Vxq1cOkBSLeC38n59EE4/lK049AJ+i4N9htV+rwsZj vxlkywhlNrYUhnFqumIktWVjxpdWQg+qBF2AID7v8n+Dz9M9BlE3Vr1VmJa2rTaAmZRD cJaHNPNG1PJhUfdGbfyChZbNQu+9u36XEc0z3YzNByewonYC7pib9kIrlyBYdNp8beYM mbn0oZGkDyE8Iby0HjeuRUMUfZ53hZDsoUx/t6MSTmxDKdkohSSkJoeNWGgl3IUTfX/B bNJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934349; x=1783539149; h=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; bh=LIZd+3O3352vjgCRNr7RtXOU8moEkEwJFa5rPF13Bys=; b=LT4edtyzfzfmyUJMZIzFuqrjURWffKZIRhvVTzsEmMynQ3z9gYSWRLw33W1Ca1p6YK 2EPnA8lc0mM7LDNSDN+ySO2v6Rnevc3p9XyU7kLvqXOBkJIR/2NDQgebUJIozzESCOYg S8qGFC5Ibsv9Qy5jy5TaJz14Kfw1dMO4PArR65IKUFiHVKKdRvyQmt8p7myyQ2perG2N 7ZsWTPLH1/nSC+FJI+UaWH0xaDjAw020vmsBnqjqgqXq3onYU5pwmoXKTnBy27XQlAge q6dnHR6m/oK/7xcv5xXn/aqg0L0BnVWJoZTupXwr+gvvJQDv256qO2Z5EqGU93CvkyhX LDTQ== X-Forwarded-Encrypted: i=1; AFNElJ9JhS2s1rzK5nRoIedvWNbWj5X9WFe6zdnKzFCFRo+kxYLfp1rT6y2Rp0ivjb3cvU2U8YcKw6uJSdA=@lists.xenproject.org X-Gm-Message-State: AOJu0YxfXHD9ClkzEbDct+vo+SXrq5AtVVi+9zrCpykad+EkTdFzOT+i DzkNQJQDIYsUMf/I9GGlb4ojJGZFZ9Yp3vlLqIlonstvTn0bBbGlCLkj6C1n7JK2+wOdZOvrnQ5 4Jcglpw== X-Received: from pgbcx9.prod.google.com ([2002:a05:6a02:2209:b0:c9a:eb48:4a8]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:e196:b0:3bf:8604:9a3c with SMTP id adf61e73a8af0-3bfed3e9622mr3622600637.28.1782934348718; Wed, 01 Jul 2026 12:32:28 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:24 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-4-seanjc@google.com> Subject: [PATCH v5 03/51] x86/tsc: Ensure that TSC recalibration doesn't run if TSC frequency is known From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-ebf023/1782934351-AEB2B1CC-6C7722F5/0/0 X-purgate-type: clean X-purgate-size: 1418 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934374250158500 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 4d6a446645c0..4393902c0ddd 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934385; cv=none; d=zohomail.com; s=zohoarc; b=ihDYLNj9ZlDD/KqA8WPJQc288eqRkXP+AmGwpDhgAV5bLbPb17tQyb8i5FY3TG9FQtxjskqrhy1ZtxwLEVe3z80VMAvRw9Ufs1WkSD7nr08fwu63PiFBEsmm42D0fy16yBdzjfGWhQwAMFizSDVMyWtD8NF7w6AKVpwTQKksJyw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934385; 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=s/QSbcUaf8Mr1OX5FYkbnza8ilhhfuHPZoXwnM4X05U=; b=ajOwFeg1/FkGWtd18ZC1rMqzI1OVY6Nin/v1PifNJ3RMUqSIPCK/UivOHrmqsnQLCVykINBYVvORJoQYBcClEJG7fW9F9QHPDcqUe9ErsdhcC7ANyDFELdN3cKAi96xFSS6sJQKmZekGS6rWIVYEJ5n1JhOUtM+wU4+gs0hLdK0= 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 178293438580285.91185210546234; Wed, 1 Jul 2026 12:33:05 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350367.1607844 (Exim 4.92) (envelope-from ) id 1wf0fk-0008W3-L6; Wed, 01 Jul 2026 19:32:36 +0000 Received: by outflank-mailman (output) from mailman id 1350367.1607844; Wed, 01 Jul 2026 19:32: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 1wf0fk-0008Vs-Hl; Wed, 01 Jul 2026 19:32:36 +0000 Received: by outflank-mailman (input) for mailman id 1350367; Wed, 01 Jul 2026 19:32:34 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3T2tFagYKCZQG2yB704CC492.0CAL2B-12J2996GHG.L2BDFC720H.CF4@flex--seanjc.bounces.google.com>) id 1wf0fi-0008Qn-Jj for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:32:34 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0fi-004o0g-0k for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:32:34 +0200 Received: from [10.42.69.3] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3T2tFagYKCZQG2yB704CC492.0CAL2B-12J2996GHG.L2BDFC720H.CF4@flex--seanjc.bounces.google.com>) id 6a456b30-2eae-0a2a0a5409dd-0a2a4503b1b4-28 for ; Wed, 01 Jul 2026 21:32:34 +0200 Received: from [209.85.210.202] (helo=mail-pf1-f202.google.com) by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3T2tFagYKCZQG2yB704CC492.0CAL2B-12J2996GHG.L2BDFC720H.CF4@flex--seanjc.bounces.google.com>) id 6a456b50-ec1a-0a2a45030019-d155d2caa8c0-3 for ; Wed, 01 Jul 2026 21:32:33 +0200 Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-8478e603285so1932638b3a.0 for ; Wed, 01 Jul 2026 12:32: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="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=1782934352; x=1783539152; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=s/QSbcUaf8Mr1OX5FYkbnza8ilhhfuHPZoXwnM4X05U=; b=Vu7hJsLUEeYgH9PkViNQa5T4fMdukUhG9CkXMzhozwgwQPGZsGUrs07H4nnKkHcy82 cfrd6TO/1M9j1+36W8ACqO6SsM4id9SmQnb5zESEPNDQaMjKqe3V8yww1vVva8+jc2y2 1b7mksdfCcWHu4+kSNIzCe2TXb9yniEbfgL6C3Mq7gT8d9dcSiaGLqYCYYbbr0w10OdU PreOoqHxI9Uux959TBO8MeA4sI3sj6EG+n/BYhimwYZ7/NEtmmI0PRMk2FayybAyFYrA aiWARAhQ0t7oZSh4QKptv/T12oQEKUX/FsjJ5h8Rh+z4ruzE7zbhWtc5xSMFbX+vHgly 7z5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934352; x=1783539152; h=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; bh=s/QSbcUaf8Mr1OX5FYkbnza8ilhhfuHPZoXwnM4X05U=; b=bzMtHaFNoIy5thsL3yi8dxljExlfzF9B+Fv228qMP+SNNv30jR03cW+RheYvkQbikQ 9BmH5JsvtssYA457At3wPniSKrNAVjRgCULfGz2zENVnWGRvS0046LAZ4rshWD8U5hVc vgPazRzeYouBomZHCGSxvT/weOxkoWX8Dt7137zLB/1M6cCadWaaadtnGjOFCnecOEhs QzPCetS+WZGdi2m1IWFzcga5JGli+4ybHh6K8D81ige/uU87/U9grhL5dVFq8RMOXCay djNstwAJo1reOCRifa/OkX6cFv9dUkA9BDQ9yEBREjDAOFlnoCI66pVv5NyPnQPtEARN 9sFA== X-Forwarded-Encrypted: i=1; AHgh+Rp2Ad7W+rHkajwkWikFdLRfAa1MlwggctIE6f6BG+pF7RyPpAqblHDjLzuP4NUuGA6uSCQyqZ1pdCA=@lists.xenproject.org X-Gm-Message-State: AOJu0YyWlh6Sv0Y3uE1wisMamqpBvXFlpJ2FZcETAY/lUvT+x3M24zkl Uojq+fDWjxhL0+Yq9p/AX4klboIUnoX5RSTgu8UXiVUrIDCTw9SNLABBzqJXmWDNq0KTbvanBhl kN/78PQ== X-Received: from pfbhc3.prod.google.com ([2002:a05:6a00:6503:b0:846:aff8:5614]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:3e10:b0:842:499d:450e with SMTP id d2e1a72fcca58-847a82d978dmr5886277b3a.20.1782934351240; Wed, 01 Jul 2026 12:32:31 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:25 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-5-seanjc@google.com> Subject: [PATCH v5 04/51] x86/tsc: Restrict recalibrate_cpu_khz() export to p4-clockmod and powernow-k7 From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-33051d/1782934353-B4D805D1-24BC8097/0/0 X-purgate-type: clean X-purgate-size: 837 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934386084158500 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 --- 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 4393902c0ddd..482cc3a8999a 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934379; cv=none; d=zohomail.com; s=zohoarc; b=BGeVpEmlPsaooW/u+lzyTeBHIjGMEdN0f7+5IgeQBSNF+KEFAp0GXGEz59974jAjSA3sGTOnY/ihDQmG5foUdQyRuCvtJxvAUM/yYeVH07cs3vWTzpNWxNp+dlEDSWI10lGm2xyfmmGRS4g6U54miRwwWNwON7k71l1jDet1Nxs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934379; 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=a+o8BZyrs+hCKgt2M2jOo1gfN0drsi4lQngccMqCRwE=; b=MTlxrNO54HjoGMTJeo3ftu8rCPg5oYj7MwnFrFcpSu0vlEzhiV1pKeEgTY5YFiSt/r6gFvx78aZ+0BSUuk7dgZbSozO69T1gZHjSAEjiFHJl0z8r9AuuR3JdaNBb05rqYiGcK8FBuaRRPr8F2bxH0Hsjn5I5moqZN0Cwbvxf0k8= 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 1782934379930183.64696328779212; Wed, 1 Jul 2026 12:32:59 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350368.1607853 (Exim 4.92) (envelope-from ) id 1wf0fm-0000Kp-0C; Wed, 01 Jul 2026 19:32:38 +0000 Received: by outflank-mailman (output) from mailman id 1350368.1607853; Wed, 01 Jul 2026 19:32: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 1wf0fl-0000KQ-P8; Wed, 01 Jul 2026 19:32:37 +0000 Received: by outflank-mailman (input) for mailman id 1350368; Wed, 01 Jul 2026 19:32:35 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3UGtFagYKCZUH3zC815DD5A3.1DBM3C-23K3AA7HIH.M3CEGD831I.DG5@flex--seanjc.bounces.google.com>) id 1wf0fj-0008Ts-It for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:32:35 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0fi-00Bw10-Vq for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:32:34 +0200 Received: from [10.42.69.7] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3UGtFagYKCZUH3zC815DD5A3.1DBM3C-23K3AA7HIH.M3CEGD831I.DG5@flex--seanjc.bounces.google.com>) id 6a456b21-bab6-0a2a0a5309dd-0a2a45079628-28 for ; Wed, 01 Jul 2026 21:32:34 +0200 Received: from [209.85.216.74] (helo=mail-pj1-f74.google.com) by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3UGtFagYKCZUH3zC815DD5A3.1DBM3C-23K3AA7HIH.M3CEGD831I.DG5@flex--seanjc.bounces.google.com>) id 6a456b51-9c8e-0a2a45070019-d155d84ac9d3-3 for ; Wed, 01 Jul 2026 21:32:34 +0200 Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-37e1f96b248so1287066a91.3 for ; Wed, 01 Jul 2026 12:32: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="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=1782934353; x=1783539153; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=a+o8BZyrs+hCKgt2M2jOo1gfN0drsi4lQngccMqCRwE=; b=h/Rm6+y+Pp6Q/agCeGZC28rgA/WNNn+KFwWOBczsonXYZxxbOglKeUDl8rVU6mp9dq bpcZvMl6TcU3iyWNBysRkfFMMYhVdzpmzKhXAtjdfBhFCb5guvHVl6tI/Rd1umioqdVx rT9d1I671tujKR6Rn+MKWTJLAmwQntPo87sc2BjrhWdNxnFs+Doo3cBQZ2gNDiLIgwJr aNWgwYqDLGARM14sEwXYkjrinje3PDdppFMh5bXU79RWKUt6KQLz9gVugGN/1SYwny2b 7JvrPp93YdIk3j1qewZoDzYtw77pak/3q+RKC9i9VgDoY2K2943kQAokTMQkV1pXoAeP 7VFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934353; x=1783539153; h=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; bh=a+o8BZyrs+hCKgt2M2jOo1gfN0drsi4lQngccMqCRwE=; b=tB5nSITjOEpCepPJ/T5vfguIjdGSL1L4z+7LjAFCDrQK9D8yn6OKdHrg/hHrl+Hjbn 6jyYSprIgnsjwEowDwGnn0Eajtr2S/PIMQi/DoG6NMuOikaxMQySmZ9NvlMLESXArXs3 rhCam/j9LMsKP+Wi2xcCVR8nQ5T007i/VKcKMGR7TTzxO9DZ3RMDPDiUu/cTux8ywTN2 9g8LKz7w5xOrET7v0h6SugpkIRf1dgLnNP5m+UAXdfSQ/ZQpBPWisuiuGkYPX3dG/7oA OK5JsJIa50NDMBzVxXgbQqvJhTFWqRLeOZF/tLgOKMx6FfZV+QgREuxNpIHprjqv5VgC c+Qg== X-Forwarded-Encrypted: i=1; AHgh+RpOgmX5Stjop8s46m/IcD84h4QN3N/AC/ssOc17knfsum2bj/Aaq1dAPi8K50J38PB8z10FuTp0Fo0=@lists.xenproject.org X-Gm-Message-State: AOJu0Ywn0kTAkcrf7T2E/ykUKg/spNHwXOqO0Rnej8/idcR9d8lm86uU YnUIRmzcr8NKlYBEdsxb7n5roM4jE+GUV8PcLGrLxKlycIirXApWnx7EhjKfalXHndKBaBWt2+Z OXgGkQQ== X-Received: from pja11.prod.google.com ([2002:a17:90b:548b:b0:37e:1dd6:f70c]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:28c4:b0:37f:9ce0:af32 with SMTP id 98e67ed59e1d1-380aa204608mr2862792a91.29.1782934352462; Wed, 01 Jul 2026 12:32:32 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:26 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-6-seanjc@google.com> Subject: [PATCH v5 05/51] x86/sev: Mark TSC as reliable when configuring Secure TSC From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-ef75cf/1782934354-FF93225E-91BC0049/0/0 X-purgate-type: clean X-purgate-size: 1727 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934382139158500 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934385; cv=none; d=zohomail.com; s=zohoarc; b=L4UNmao/MNcwgO7EQqEvQ671B+u+qUh9ogkwEFIWdL24JDFYRFOaFlwi8iw40rdvc/QR0zZrM31n83vrX7f1wW4I+cyFLecnLAdxZkTgcPB7YibBi/tImwdXj8xIAVPin0/aT4x+d7Dwiisb6ub3bLCrN0M71NYnZLRNq58lsZY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934385; 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=evwxLM71EsC76xUKnJUsM6sZDhf4kmGP6xo/jdNLobw=; b=FUYF+uRqqQ/+PEKMZXDk5BhFDNi/PIc1iNywMHiLXm7gxUntNcHPvCykuewarUxPjuS4dodLtExEl413BbAc+HlPwWLr7Yg/aTXQ2bXf3dAOHJIcFG3ieT7S3+gQXXxGi1/CsLsHpTzY2Y30J148b3eMWizlslGbIcp3AWITa7Y= 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 1782934385258810.6845538273287; Wed, 1 Jul 2026 12:33:05 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350370.1607858 (Exim 4.92) (envelope-from ) id 1wf0fm-0000Pg-IU; Wed, 01 Jul 2026 19:32:38 +0000 Received: by outflank-mailman (output) from mailman id 1350370.1607858; Wed, 01 Jul 2026 19:32: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 1wf0fm-0000Nv-AK; Wed, 01 Jul 2026 19:32:38 +0000 Received: by outflank-mailman (input) for mailman id 1350370; Wed, 01 Jul 2026 19:32:36 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3UWtFagYKCZYI40D926EE6B4.2ECN4D-34L4BB8IJI.N4DFHE942J.EH6@flex--seanjc.bounces.google.com>) id 1wf0fk-0008Vj-MH for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:32:36 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0fk-004o0g-38 for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:32:36 +0200 Received: from [10.42.69.9] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3UWtFagYKCZYI40D926EE6B4.2ECN4D-34L4BB8IJI.N4DFHE942J.EH6@flex--seanjc.bounces.google.com>) id 6a456b44-2eae-0a2a0a5409dd-0a2a4509ddee-42 for ; Wed, 01 Jul 2026 21:32:36 +0200 Received: from [209.85.214.202] (helo=mail-pl1-f202.google.com) by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3UWtFagYKCZYI40D926EE6B4.2ECN4D-34L4BB8IJI.N4DFHE942J.EH6@flex--seanjc.bounces.google.com>) id 6a456b52-97e6-0a2a45090019-d155d6cab14e-3 for ; Wed, 01 Jul 2026 21:32:35 +0200 Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2ca0d4fb061so13562385ad.3 for ; Wed, 01 Jul 2026 12:32: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="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=1782934354; x=1783539154; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=evwxLM71EsC76xUKnJUsM6sZDhf4kmGP6xo/jdNLobw=; b=lxUVIHgq8AO7SvMwRCNuRvewFIS2NKjniwRvFBiMfw0yUR0tAHTzcVH1C7PzXzWBXI +YK8tgKQmr8tCHCMYtmPWDFpwp0Op673LizsMvi6kXAOROZGlAb54h/NStk8yxuIw0Ca noUGaNHSz+vcxkQAZDVTNz/GsYFoVDukSR0Vycg8GjlWimY+meKsFyuHjZiK2JF+QXkG S7p6Sygfgqrh1E534KDf11rDel7r8iLHn+yO7MZNxtvyxe+PiwiqOvm2DgQMxGl8hxuW x9smr1AAGmtTM64SWNQ3pnv4SrihYzgfz2yc1Mq5gHfcI2U5KXq2QyAnMS039xVUyJ7N xGfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934354; x=1783539154; h=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; bh=evwxLM71EsC76xUKnJUsM6sZDhf4kmGP6xo/jdNLobw=; b=hPYRXzSMQTZ0iW8Myo3EIm6UaoXCMqzwJPSDDkhSRQZ3/2Cq+ZN+9KY089shlIdvXx tPURrKNtn1OU1ReMlHfl1Z+YfoxbyWofYhWkpw+Q9y/Fx7TY8jdfCDAz6hQ/OrExctoc HgE81m7wqyKbc7GiwNxiXAewiRfmaCu+IenlpYlJDXIp5nIYwvWQ62MplWTZL5Oyc54r uRiLXW6+nHXlqgFrHb+0rSxHEmO6RKMQFLvGbQlD4IjBY+z8Akq6pkY4GW6nr0T48ZZS muXc7XtNa77dScJnJVLXgdfuolpePjF1RZ3f6+Sdzt2Mkd3hHxW20I9BuIpsUjFKpMpE ATBQ== X-Forwarded-Encrypted: i=1; AHgh+Ro1+1VaaBmBh+bPkzfdBrxHVtWnCPwUNtjEUWvMJHIOHHg8ETNAm5ZTYx1QCgo/ubo0HzH8J4OCP7s=@lists.xenproject.org X-Gm-Message-State: AOJu0YzR+TorBNVTaCe05tRk4CSoTfXmnhUHsyTx3cRkpEHEdFAYxXsw 7tTSKTQWGpZ/KRxZVSubrv7niTWSFNLNyX3LGyAPE0upT7IE4p4D+21itQGmE7fXH+pT+vvvldR gUQEK2g== X-Received: from plha8.prod.google.com ([2002:a17:902:ecc8:b0:2c6:a75b:2129]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:f8c:b0:2c7:d603:117f with SMTP id d9443c01a7336-2ca7e754b82mr34808385ad.26.1782934353608; Wed, 01 Jul 2026 12:32:33 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:27 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-7-seanjc@google.com> Subject: [PATCH v5 06/51] x86/sev: Don't override CPU frequency calibration for SNP's Secure TSC From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-bad1c0/1782934356-4512E986-3CC5EFD8/0/0 X-purgate-type: clean X-purgate-size: 1458 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934386098158500 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 Signed-off-by: Sean Christopherson --- 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934383; cv=none; d=zohomail.com; s=zohoarc; b=c8bNqwDG0wP8WmLU8Qr+AbPOIDh/c9f1kGtQv5s3j6cyvpgiP38oG0krTCtbzy4yqJC7qrjjUDZeJ205JzQfZmNxWMCTRVh0M03yh3fEFlWDaPfu3ErQ9kdlTitjEaOo7tvw2DzJzdLM6ZuuAcaS0oD3YC1yhfTi4fIo3Uqu+i4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934383; 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=IPCn9toL5FYXOHslttK0Lqj/45O4+f3kFotppLV6+ls=; b=M1FfedCPtzc1fhZkZCn2mnEnlZLNn5DzKZInP6sM27Z6lGcndYjdougjilIFW3eASca77NTMwoXBxaOzll6zw98P6PJ6CAiKW8EHoIqb0jJYJGecZKyT8y7w7f+s/qH9FrGgGOVsSByzv+5EFdM3myJSt1tNmDOIwOWcrqux/dg= 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 1782934383551589.3776602629003; Wed, 1 Jul 2026 12:33:03 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350372.1607870 (Exim 4.92) (envelope-from ) id 1wf0fn-0000l7-Q3; Wed, 01 Jul 2026 19:32:39 +0000 Received: by outflank-mailman (output) from mailman id 1350372.1607870; Wed, 01 Jul 2026 19:32:39 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wf0fn-0000kc-Kq; Wed, 01 Jul 2026 19:32:39 +0000 Received: by outflank-mailman (input) for mailman id 1350372; Wed, 01 Jul 2026 19:32:38 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3UmtFagYKCZcJ51EA37FF7C5.3FDO5E-45M5CC9JKJ.O5EGIFA53K.FI7@flex--seanjc.bounces.google.com>) id 1wf0fm-0000Ks-1X for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:32:38 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0fl-00B3ua-Eq for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:32:37 +0200 Received: from [10.42.69.6] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3UmtFagYKCZcJ51EA37FF7C5.3FDO5E-45M5CC9JKJ.O5EGIFA53K.FI7@flex--seanjc.bounces.google.com>) id 6a456b3e-5cb7-0a2a0a5109dd-0a2a4506aae4-24 for ; Wed, 01 Jul 2026 21:32:37 +0200 Received: from [209.85.215.201] (helo=mail-pg1-f201.google.com) by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3UmtFagYKCZcJ51EA37FF7C5.3FDO5E-45M5CC9JKJ.O5EGIFA53K.FI7@flex--seanjc.bounces.google.com>) id 6a456b53-08de-0a2a45060019-d155d7c9e100-3 for ; Wed, 01 Jul 2026 21:32:37 +0200 Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-c96b4f58ddcso763901a12.3 for ; Wed, 01 Jul 2026 12:32:36 -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="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=1782934355; x=1783539155; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=IPCn9toL5FYXOHslttK0Lqj/45O4+f3kFotppLV6+ls=; b=fKuzCDImPpzNTZoIiyIzudIzmp7PizB2cS8gFCEMti89zInSppOOer90Uaa3SlUzVV TRIthsiBEGLm12JGRsIU9nJIW/LfY56kg8MBtOURzSTW90lUkv0Ejcz3ChZsMTSWH6pR JI1T+Q4oj/LzZjRh3aW8eh9WXQjYd4OLyeIbB3iVSmA8y3M6Qllwy7WbNhdRlAJt+B94 P6EQnNVIY550MiHy9Vmd91gMFBh4xiUrCyObX19Lmdqa6KhAPrgX8rdT4esUZT93Y6L6 VlOK249Sz/OMf0Xa/RmEbO40q9YBKSMnvgCd1+PzUTf3B7vCJtucCwW5Q7kZQUEl/0Fi wNbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934355; x=1783539155; h=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; bh=IPCn9toL5FYXOHslttK0Lqj/45O4+f3kFotppLV6+ls=; b=SOBTWvg56CoQgyRzIhniFsTz4keq1x2/LYn9EvdXsT5IgY5bTnjaWxltYHMovEykAA 4Dufgv+iYDR/s7ClK3bUndhlw/XwDUfpyCCFTuBwkv8G2cJP0LhuxlWkvQTtCKhe2Lc3 Fv0aYsM1eQWIKcRDi4VZUuZGBwhhIBKnqEFU68Ox6MjRh+5oN9ybox0KnIZ9n1qQF8Kf Ea8QDh3vWRGp93HM+YkNXqJSeBfYhO8v46Z65lFrcdbVq9Tl9OGPWNPDbSj7vwsUWHl0 imEwysStr+z9mSMWhsxLOuBNEkHyJ7nmKUqEdAkDz4QZTkfRBn6+nexFZwDT/ij7MBmZ pmUw== X-Forwarded-Encrypted: i=1; AFNElJ+heBJCj2AD8Rb7gJ+D+Abu1qjQvyjNrHuV2KKPYMrujOlHU9XrVt6vezUchnyce6veMhhXjFUxMMo=@lists.xenproject.org X-Gm-Message-State: AOJu0YwVijIU1K4KX+vsX4ayrCN8pb2PkGZTVj4Ej82V2uhMl6akEI9T +5Julx7rKgGTlIVu6l4w/18hlutYBnRqCx8JOMmNSNyNhvanJlzTMcmVs6XZeT5/ZHG9lP6OsuD XvYvaIg== X-Received: from pgll126.prod.google.com ([2002:a63:2584:0:b0:c85:1159:ffb2]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6300:6705:b0:3bf:7bf7:7913 with SMTP id adf61e73a8af0-3bff40c93d7mr2592804637.14.1782934354816; Wed, 01 Jul 2026 12:32:34 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:28 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-8-seanjc@google.com> Subject: [PATCH v5 07/51] x86/sev: Move check for SNP Secure TSC support to tsc_early_init() From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-16d1c6/1782934357-C5D3D68D-E6CE8521/0/0 X-purgate-type: clean X-purgate-size: 1587 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934384101158500 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 482cc3a8999a..8f1604ffe986 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934387; cv=none; d=zohomail.com; s=zohoarc; b=PR8MVRGbi25IiUXSBNLCXIgj8/AKH7s1cbnNswTS4DL8UqzjufSL9Aj88QSYdYZcqhY9/ktI5IVMCJqkXfw8As+J+agNWaejDBgctj3s2nbHhCHvTndc6kH2iE3EwNeBSA3zqVV7PlxyzT8JfFVOKGfPHxd5FF7x+F/1SePcoP8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934387; 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=02bcXtHfI4JvUWCbZ/FGUqsIhMJvDsaJ6tKyxXO+eMA=; b=HATI6hB0K7KH64QSMGYKf8+UCmrxaNNE6H+e3nbd3qjSnAa9rbnT7szbqeVKm1UGQZChlc6Bc8r60xtXnYLZu0M88ubtCA6PkINt9WBesEF1D8dBcSQ3bzN7hgkmLQVwUMox09aTEFS9/9U/AotmWrIk7M8/S4CqS8hwD9EHk1g= 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 17829343879261003.9481748343736; Wed, 1 Jul 2026 12:33:07 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350373.1607880 (Exim 4.92) (envelope-from ) id 1wf0fp-00015w-7L; Wed, 01 Jul 2026 19:32:41 +0000 Received: by outflank-mailman (output) from mailman id 1350373.1607880; Wed, 01 Jul 2026 19:32:41 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wf0fp-000153-1o; Wed, 01 Jul 2026 19:32:41 +0000 Received: by outflank-mailman (input) for mailman id 1350373; Wed, 01 Jul 2026 19:32:39 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3U2tFagYKCZgK62FB48GG8D6.4GEP6F-56N6DDAKLK.P6FHJGB64L.GJ8@flex--seanjc.bounces.google.com>) id 1wf0fm-0000VF-Sj for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:32:38 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0fm-004o0g-9V for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:32:38 +0200 Received: from [10.42.69.2] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3U2tFagYKCZgK62FB48GG8D6.4GEP6F-56N6DDAKLK.P6FHJGB64L.GJ8@flex--seanjc.bounces.google.com>) id 6a456b1f-2eae-0a2a0a5409dd-0a2a4502c3a4-20 for ; Wed, 01 Jul 2026 21:32:38 +0200 Received: from [209.85.210.202] (helo=mail-pf1-f202.google.com) by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3U2tFagYKCZgK62FB48GG8D6.4GEP6F-56N6DDAKLK.P6FHJGB64L.GJ8@flex--seanjc.bounces.google.com>) id 6a456b54-5a27-0a2a45020019-d155d2caed0c-3 for ; Wed, 01 Jul 2026 21:32:38 +0200 Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-8478e9c4bd2so997146b3a.1 for ; Wed, 01 Jul 2026 12:32:37 -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=1782934356; x=1783539156; 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=02bcXtHfI4JvUWCbZ/FGUqsIhMJvDsaJ6tKyxXO+eMA=; b=r89e7hTquq3IsNKcNxsGOucbtQYJTM88FLrRCZYryO9pfn7x/SSJ5VcDpzJgLLJ6dG qETHvw5ZGp9fIsh9Dy6YpXVk7lAKBYcSs7N6diHXxulw31DlcbgJtDE5JMwgTGW1b9XW YGWBLUDu0Cx8icF1YTxcwNg0QIxA2UJBF55PRfFnKCKLnJOMnRHA2PeaajktUlej2+OP Y451paGiTeZlVC5AIh4TG7J2NOs3dIYvMeiUloHP/wJ2Z0Lo0x19ht7qUfopfEympmyJ qfDGBFmFByZUnADRjlYEqPzDSRUl87JfQpb1z9oXBCM6nVebYT2xIYlTlDGdbG7dSmg3 L2Nw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934356; x=1783539156; 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=02bcXtHfI4JvUWCbZ/FGUqsIhMJvDsaJ6tKyxXO+eMA=; b=J1ZDSUiKS8FPpbPgxzRGokTzEq/B4iW8NcdFf7dTZTKgxDZJewwcnq+1VNEEM4YDH5 NIzhOVLQ8jwzo7CdomfvoAgGahKaquAwNs80aVXr+wHGB4/+rjgIE3BXQgYFylic2ldj sdDaBrb1ff9Sn7o52HcxtR0zhuqRqoilpk6ARf/w6c0soqr1Z1Uq2TWsHs4t1bHiWVgx nS1GImr+sOMv/TB5/tg6cibBCWTt5+WtipkDE1gJSGTkLZcg94fMJLcbeJrAxfFBUtsI wPEzwIFvoRM9hw51ietJ7+jXqbwMGZWqZC5YOapOb1PUUez/m9c1nPn+tslSc1Jydkz4 cz3Q== X-Forwarded-Encrypted: i=1; AFNElJ+m/qOqVTrrAr5Q9eLbuHs9Y3gD8decZF97jgt5e3d0CN0Vyw2c8uEkv3GpxoEfMfilMNM+W84m5tU=@lists.xenproject.org X-Gm-Message-State: AOJu0Yw1t+bYrGT/s5JH6uVGEhkuStP3CeoTcwP/V6+Wg86n51Isstwb Cqijeim+EaIYXdo23kx1y/n6llX39rts5ZB8j8oLGBb78pzFNIZR7fXD2P4zP8n7wlFIV9wFsPm L3cVSKw== X-Received: from pgko8.prod.google.com ([2002:a63:f148:0:b0:c99:aff5:708f]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:d807:b0:3bf:9a30:3a20 with SMTP id adf61e73a8af0-3bff40a18cemr2476915637.16.1782934355934; Wed, 01 Jul 2026 12:32:35 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:29 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-9-seanjc@google.com> Subject: [PATCH v5 08/51] x86/sev: Shove SNP's secure/trusted TSC frequency directly into "calibration" From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-720697/1782934358-564E97C5-FFECAC6D/0/0 X-purgate-type: clean X-purgate-size: 7153 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934388230158501 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. Signed-off-by: Sean Christopherson --- .../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 b5493a7f8f22..181149f633c3 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 8f1604ffe986..f049c126e47c 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.202]) (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 0F6ED4C9556 for ; Wed, 1 Jul 2026 19:32:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934360; cv=none; b=qmHs5EixXDaonOSK4NlrVt/NR4p/2+88t86FOXT7LFYiKA1cFuCZdHvfVAeBzM2KSUZetyR9oJGp9CbgMj6bpF0ygoYO+OINKgKgc05aG5B9E58GE78G664Nes9pT4vQncaeFCb04BocA2YqldKc7D2/EQZ6W2M0iE4yWMaYY9g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934360; c=relaxed/simple; bh=BqZrQFDYqCLPu/01WSmaD7Zj4w0fC0dOaEwcmaj4YV4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=sTgdQdUf607ULjILeLmzsy8WaFanqUNaCVO875Halbyh0OJJVbvncirJEgR1rq5i+VIpCjhgJqCNWvOvvtgpg9b6ER4KWQZef2G9TqsfrYkRTaX0B/2g3kfZzTV5DbeowtNmJp6LTz6u8+NuJ4Pvx522AOGBHTka2AABA6Q4zjY= 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=iwIIFytr; arc=none smtp.client-ip=209.85.210.202 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="iwIIFytr" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-845a29d8c1eso1180694b3a.2 for ; Wed, 01 Jul 2026 12:32:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934357; x=1783539157; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=f4XM+SKEbnv+9fV8zEMQX/tlhGFDki//v0QnInqZVcA=; b=iwIIFytrdqnIVVzJvIYNwgce2pLibJ07p/p8kuYt9HtWfrNVABKlNbXbEiaGBlmumq 65s+DjZoIePV0ZjWalLJbITSGb2QJXyw5gv4+9xm98uuj9yuqhZc1s4EOVOPtSWmhfwS UePzZBqiq+vRZMNnGNrMtwkaihlScP9cWgYwBQ8NTZPHu3EfbQEJOpgXILeh/7u261QY MUON9B1hZut9+gRNQn1VNsgpQs3xdUF6d0gnrb/6IPskCdMZZOiCtSrnoCC+jWiQLu2T XJ0V3j0TBcei9UgJJzQ4/zS5VeFt9R5yBurg01YKibelpxm1YawZ5y0HVIuuTgQcKzZv v0/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934357; x=1783539157; h=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; bh=f4XM+SKEbnv+9fV8zEMQX/tlhGFDki//v0QnInqZVcA=; b=N3wkZLvMPr90qN8kWKOjCt0Jp190EZGN/sTlEt5BmOueZZEhxDTn/Lf7IOyMg/m6mf TXUE416gN0rBrmm+vyo8zNYv2Q5SBSBSwfb4NBV4AP0uVcad3ea748yxAU+R7lJg3r06 WTLUoebRVDl/KQNjL6xSgnsf6B7HeDgY3o4gNbnaMYoc5asApMC817ZqXaGXTasLT2oB 549GGUlhOUFpPY9gME+j0qebxFRLGxZAjmf62f9F5OLJNcXjJT9jzmdFCJp8ZAianu2Q 13DrK0GcV0Jks5D66sNnzVRG2+OCQhrDKhHqRLvm70iAt1H+c0mQ3uNLdZnmDDrzIsAN E0nA== X-Forwarded-Encrypted: i=1; AFNElJ9klcYPWgLWJAWSaqZsRSUCtdbGBIrjKi4JqC80apVZWsv5z7SRumL20Wat2lxCCA52lZIaGHayQy0jfMU=@vger.kernel.org X-Gm-Message-State: AOJu0Yzkst0we+81rMlVUDpH3RKMfiy8Q9aUKxdcdU4e5EHotS4cst/d EBHNnimmekz9b7reqHJN1D4/UwBtW3yeGYVJkm19JXDkuZIBJexnMmFvmmdbicEYP9Dx8S5g028 jEbLw6Q== X-Received: from pgge10.prod.google.com ([2002:a63:db0a:0:b0:c8c:b193:3b13]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:a104:b0:3bf:6c08:fb81 with SMTP id adf61e73a8af0-3bfed44c700mr3262662637.49.1782934356969; Wed, 01 Jul 2026 12:32:36 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:30 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-10-seanjc@google.com> Subject: [PATCH v5 09/51] x86/tsc: Add a standalone helper for getting TSC info from CPUID.0x15 From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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 f049c126e47c..12043812c8f5 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_period_khz(crystal_khz, "CPUID 0x15/0x16"); + apic_set_timer_period_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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934387; cv=none; d=zohomail.com; s=zohoarc; b=oJ8YySQzuzPdKBuqsTCbxtIZoGWlUXHNa3z9mAsIth0sBwV6RXXCh4qyq/dJrftluKMvg5R47uy/6NKetH+vz/FnVShtiJ4bnZ6TOf6IzAZaFm7ywuDrbbwj+9956/lHPSNR7GSF1NNMqQ9ovlLJu+twlwsbbjYeFv9/ublNmYw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934387; 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=5dPlSt+N6Lt/Y9ZvBDGnN+olGzf3s7mk8869JKIa0HY=; b=l5wOoMPui4GHXObFKVS9/eVg9oU8u7l3gwHQXWVN1NaiJNEOLaQuUtG44uGUh18sQ8AReEn0LGPi8ssxJDXhcfaSYbuTHTtBpr7KYl+1JNHApY3f+Q+7Yk0FhFs+uAqCjLYClwFI49omnWe2ZzJsyvTPwzezjIxmArcxiKNg9T0= 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 1782934387679627.1123805045935; Wed, 1 Jul 2026 12:33:07 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350375.1607896 (Exim 4.92) (envelope-from ) id 1wf0fr-0001bV-Hh; Wed, 01 Jul 2026 19:32:43 +0000 Received: by outflank-mailman (output) from mailman id 1350375.1607896; Wed, 01 Jul 2026 19:32:43 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wf0fr-0001a3-AW; Wed, 01 Jul 2026 19:32:43 +0000 Received: by outflank-mailman (input) for mailman id 1350375; Wed, 01 Jul 2026 19:32:41 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3VmtFagYKCZsN95IE7BJJBG9.7JHS9I-89Q9GGDNON.S9IKMJE97O.JMB@flex--seanjc.bounces.google.com>) id 1wf0fp-00014U-4i for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:32:41 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0fo-00B3ua-Ho for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:32:40 +0200 Received: from [10.42.69.1] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3VmtFagYKCZsN95IE7BJJBG9.7JHS9I-89Q9GGDNON.S9IKMJE97O.JMB@flex--seanjc.bounces.google.com>) id 6a456b2a-5cb7-0a2a0a5109dd-0a2a450184e4-20 for ; Wed, 01 Jul 2026 21:32:40 +0200 Received: from [209.85.215.202] (helo=mail-pg1-f202.google.com) by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3VmtFagYKCZsN95IE7BJJBG9.7JHS9I-89Q9GGDNON.S9IKMJE97O.JMB@flex--seanjc.bounces.google.com>) id 6a456b57-400f-0a2a45010019-d155d7cabc2b-3 for ; Wed, 01 Jul 2026 21:32:40 +0200 Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-c89704da8c7so1485718a12.0 for ; Wed, 01 Jul 2026 12:32: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-Transfer-Encoding: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=1782934358; x=1783539158; darn=lists.xenproject.org; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:from:to:cc:subject:date :message-id:reply-to; bh=5dPlSt+N6Lt/Y9ZvBDGnN+olGzf3s7mk8869JKIa0HY=; b=MkWv0KXC4MXx6lGf//onmiIqh4yNwvQDXfcA2irvSslqrWxpkVO2AQG2SHgvRLeKND xKFW4TMiXR4aqkmmS70BFTQW1muy4PT2/9/m6M3sff8IMcfGI2XJaZy+k+Ne3p3M172d JBWpgEqqipqXxNyS+aTPrdHrkqkvLfXKcOx+28orrpACwbKyKAnecDI9pcjAFA0j6Bcd XcAt7M6irExNt8aKY8sajLYg+ABjTJtyLkLYZVZUfoaF+1QUFL0anBbz/aRktlytvkmK MFDyKvV6CJuU68aStM+KniqZJcyL2C7KCd7qNRugVucRoQyfp0dU69HfuZOt//EhVCIB NZfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934358; x=1783539158; h=content-transfer-encoding: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; bh=5dPlSt+N6Lt/Y9ZvBDGnN+olGzf3s7mk8869JKIa0HY=; b=I4V4xejZrMqrJoxpos/IBM65flAzDyv8iYUNX9XS4sGa9Bd/1WgWZastUdNm2/KQ2e ETfvwrrSY+kVRxVicBjTufXHQXhcWdRfPEq35Xq7xFDCuI4WHKWdF+AJuu4N34eW6Grt BxfzZoRvaNcE/wUj54549Kyb7BmG4uHMD7Ud4nYZPXu+rwGFAAIuPw3SKSeXXzLNlemv SZmaYZ9WiEooff02STzeD/GvaiSQj1bODEzCfjI+E+snNuPGWM5p4xmrkYpGaEFYg9jH dWmjb39daaVq684qW8lChgulMIh5OFbKBWQounbPoh3oU6jpIiUWbVj1V3jTs5PFPl2v d2XA== X-Forwarded-Encrypted: i=1; AFNElJ9ySgVDKW+YAMoOb2KW2j7br4eTbdCtDSYDYaFogGwtP99q48iCWzFzN5dZfKO7CBiHbGyoGcw/e+A=@lists.xenproject.org X-Gm-Message-State: AOJu0YyQb73iRe7wwEhIR1iwOmot+KvcigpGVIo5ILwVU7ZjE/sppkaj Z5uFeNC7ri8TwfOgQYS0zz1lPTRVR3icU8Iz8rUJsBD0CMEDRNvEED/vLph57p35v4RgsYPsqY6 ISYQjiw== X-Received: from pgmo11.prod.google.com ([2002:a63:5d4b:0:b0:c9e:63b8:11b5]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:d10e:b0:3b4:61f:1fec with SMTP id adf61e73a8af0-3bfed1c323amr3402841637.2.1782934358113; Wed, 01 Jul 2026 12:32:38 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:31 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-11-seanjc@google.com> Subject: [PATCH v5 10/51] x86/tdx: Force TSC frequency with CPUID-based info provided by the TDX-Module From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner Content-Transfer-Encoding: quoted-printable X-purgate-ID: tlsNG-d62444/1782934360-800EC1E0-D0B58536/0/0 X-purgate-type: clean X-purgate-size: 6605 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934390230158500 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 --- .../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 181149f633c3..490e6aa72fc2 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 29b6f1ed59ec..ae2d35f2ef33 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 @@ -1123,9 +1124,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 */ @@ -1195,3 +1193,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_period_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 12043812c8f5..86384a83a5f6 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934385; cv=none; d=zohomail.com; s=zohoarc; b=QtHqNSY5uPcSLVao8pQ3ozjmcwq427ygzDEqHfSTOvShj82rAyY1CA+9jSnR2yK/3492S7deSy5vjWtv+Iwia36zKQxDXPV3wexqb+w1P0m8vrKGDDSuJDHetSqx4p3yDRCxZVOcdiZd+w29rPNd7QQbivVikj/ZyGyWAuqJnI8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934385; 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=ITMoYQtDH7A346RlpjwfIOo+apTMWXSUo7by9rtr/s0=; b=jCmaOuE6BgOlApJss2i/GytEzkOU59Ebo5L+7npuEKqtThoeG0nyYCq4ouAAWFzcRBT8Hkv2SynMQhu9COK5jZ+uH0mGJT3zjOfTrMiEgDd/MJKOiEE3rrHmP2GbAMTl3K/ZgutfXvqZ/bO63DE8Y1Hh0B/z0NdVPBGyim8A78o= 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 1782934385164919.6672466533084; Wed, 1 Jul 2026 12:33:05 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350377.1607903 (Exim 4.92) (envelope-from ) id 1wf0fs-0001jc-F9; Wed, 01 Jul 2026 19:32:44 +0000 Received: by outflank-mailman (output) from mailman id 1350377.1607903; Wed, 01 Jul 2026 19:32:44 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wf0fs-0001iD-1e; Wed, 01 Jul 2026 19:32:44 +0000 Received: by outflank-mailman (input) for mailman id 1350377; Wed, 01 Jul 2026 19:32:42 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3V2tFagYKCZwOA6JF8CKKCHA.8KITAJ-9ARAHHEOPO.TAJLNKFA8P.KNC@flex--seanjc.bounces.google.com>) id 1wf0fq-0001Fn-9L for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:32:42 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0fp-009wqs-M6 for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:32:41 +0200 Received: from [10.42.69.4] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3V2tFagYKCZwOA6JF8CKKCHA.8KITAJ-9ARAHHEOPO.TAJLNKFA8P.KNC@flex--seanjc.bounces.google.com>) id 6a456b4a-e002-0a2a0a5209dd-0a2a45049d7c-42 for ; Wed, 01 Jul 2026 21:32:41 +0200 Received: from [209.85.210.201] (helo=mail-pf1-f201.google.com) by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3V2tFagYKCZwOA6JF8CKKCHA.8KITAJ-9ARAHHEOPO.TAJLNKFA8P.KNC@flex--seanjc.bounces.google.com>) id 6a456b58-a01d-0a2a45040019-d155d2c9d57f-3 for ; Wed, 01 Jul 2026 21:32:41 +0200 Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-847b8d76e3dso1507200b3a.1 for ; Wed, 01 Jul 2026 12:32:41 -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="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=1782934359; x=1783539159; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=ITMoYQtDH7A346RlpjwfIOo+apTMWXSUo7by9rtr/s0=; b=elMQXmi/uZp73fGpzW1TvkyH6kOqmlf7TCafzSjAm4JoN7qEuRomA/ALPOVha7FivA JsIN0xqEuUA1LqYUwh429soCyPcVvGAPC+GPUkgTzVvtlFD+eS+wgdQHk74xyZeeRUnv Uz9pgnslWMazLKZbD00CHcZbpQ9rXrHRdMKAjdcfA+wbzdlm/jnRrnkkDCXylHu+PX+4 +RkWXRswmof2EUpJMd1sx2EC7WUGLS1JZIB+RE2ODO67z8IOw70Abyb0N3GT+vHbFFua L4iw89U2QfYDYVgiKE/E88+U1Qwiq05VLdCrN+0oXpjyEgACCRTHM9e1IyD69mk80udt S3Ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934359; x=1783539159; h=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; bh=ITMoYQtDH7A346RlpjwfIOo+apTMWXSUo7by9rtr/s0=; b=d/jwqXO8DyMyCQF+uA5I9KfepmlOCqRre3GVVAsvpMiXgtvvbarf0IMzWlNxUsblb4 S1Ebx7JcYft6DWY3ZrO3jmWcKKMuK6dkhlDF+qz34bpesDAz5d53SPD6Ut1QtLxywXRs uqa7b3uB/A+KbfZ8Ys9YIKZK0BbBBQlmg82Fxb7mFmT41LiivAOdT8SLDu8GXF1uv1qW FbXk/68Oo91BEKXGP+mafu37QnXSls8876dFJh8AwF7xo9qZHV1JNB9FnsyMB+slIAE3 J65FsE/0ECVn1X+00udYLfRsN4oPIYOAzvUFRRjy1iqNs6x65qutCkTPmdoruxc0+bvq thXA== X-Forwarded-Encrypted: i=1; AFNElJ8LFuPXt2tuHrV6Af7KsAj4kVx9gGJw467ZPpFvhweNnLs5m9xTh4HzgDnKwHZlaXzIcF+5uwwU+i8=@lists.xenproject.org X-Gm-Message-State: AOJu0YxNEOYDV5KVaPJqk5RJr9y3sGcxpxm2gZu2Hy5tKG9HMmNUjU3M JkRcBQINOeuqgcRtRAT/PvLnn8faiLrcrD4nqSSadtOLVJHLy+3IZHCmH5iu9YAIAAyytuyKLwg OjHKheA== X-Received: from pgaf14.prod.google.com ([2002:a63:380e:0:b0:c98:2639:852e]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:b93:b0:842:57e8:1bdb with SMTP id d2e1a72fcca58-847c07be445mr3013550b3a.20.1782934359203; Wed, 01 Jul 2026 12:32:39 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:32 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-12-seanjc@google.com> Subject: [PATCH v5 11/51] x86/tsc: Add dedicated hypervisor hooks for getting known TSC/CPU frequencies From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-ebf023/1782934361-2E1A71CC-4FA4A416/0/0 X-purgate-type: clean X-purgate-size: 12591 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934386265158500 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 priotize 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 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 Signed-off-by: Sean Christopherson Reviewed-by: Michael Kelley =20 --- .../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 490e6aa72fc2..a387bb2c47e2 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 87beecec76f0..f9bc1c2d8c93 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 13b97265c535..3cb473cae462 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_period_hz(ecx, "VMware hypervisor"); diff --git a/arch/x86/kernel/jailhouse.c b/arch/x86/kernel/jailhouse.c index f2d4ef89c085..e24c05ab4fae 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_period_khz(setup_data.v1.apic_khz, "Jailhouse hypervisor"); } =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 86384a83a5f6..1dca9464b41c 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.202]) (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 ACC874D990E for ; Wed, 1 Jul 2026 19:32:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934363; cv=none; b=N0plYw/xIUCQSoNeprRspYDRZCY0rCMbLN3GNM6Vl8/GGvrFLBSTIzR6HtEMSDZDyKIFnG9WdEk01pXXCXceyH9pIe2CmCdsHgu3MAFje9LUNbV8qKBDwTaKMg8fc7Wua3xKEihF1D/dG7Edw6R+uuduHgA1RT0URGCT74qvzc4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934363; c=relaxed/simple; bh=vQr5rqbnVfhj/Q8IIvrfTuhOuv1ctDO8Y9v3PaUviPM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=nng4dXsg7hZUkU/O9A/FSYq9eElLvGKr5CpTWGZvrdK/lF3C+WrvuPypnGwMu0ABwYcu3GI24ZLbXVhAyb7xH8gvkPC2pIPW+q24+Kvw0qPyl+kNhqvK+n92s6qN1XUXBhaRujXDE/0HJb5cwRonLK44cFqUeWseMalaUBsqwmY= 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=aZBYAt4C; arc=none smtp.client-ip=209.85.210.202 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="aZBYAt4C" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-84622d6102dso1270899b3a.1 for ; Wed, 01 Jul 2026 12:32:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934361; x=1783539161; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=ReYT3wow7KWZM4WGFuJpCOGL6Ebh0IHq2felz3Yetls=; b=aZBYAt4C+qdRtJy1B8y3nO0brOL0G2zKGPUUFp3Gar+8RkIJY23yZofOUQjek8B8ph mKQxX/dcsZiWli/YP3qj7+nobEJ1UrqhhQvDP2YgDfxn91Oza+F+8B2+DljfC2frO5LB eoV6B7qPwlUXX1EhEKnwh+c1XkODkDSpRALXh2b1RS+EntGOSo/CcYUPzrmm50b1/y8b e34x685rxnhMLAPJrjd0XZHh+yavBkGLICurherbOqOZ5UzIsh2/o7Z7ieStTX1rNyX9 v0dQgsWWR4S88XZg2xPf4sUwMe/UoIglrr9HQIlryZQYpm3YeZKHSscBo+o0c/khzmeY 9IOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934361; x=1783539161; h=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; bh=ReYT3wow7KWZM4WGFuJpCOGL6Ebh0IHq2felz3Yetls=; b=FIbmhAqRs4Dt01fNzOOy76+6JLT0XmslwphDqXETVrzFFpk9Ckr1cNDgwgmGJg+GjH 3yLPNlW8THX+ebhN6JGLJaZFfaSRUQiNVWqPr/3rw09cQOZeKCogMT/mW8PDdgbfgqKs P64arjhajdY2nq6h7mIZQMTwwNmO7rAXFiM3Qbm5ManhRpfb3M0B5I0QFeDyJYpKoYJw I04g3K4pPa3UCAvgPJfuZawcAibALIltXWCXYUXTjV29BR3dD0Cv3ErJdtiP+dP1rYL2 GdCNOB0qLEudyN6HDkL1btm3Y8VwWi9+/v8XwueGPAnaAuWJ768V6ZHDHgXdO/UWPeM3 IN7Q== X-Forwarded-Encrypted: i=1; AFNElJ/sBJgEG3Vaaby1HJnczXccRCjFNI1hHR3S4+YTQs4D6RvbNIPrOwrLNrQAfcKbNZ6iWbdC4U7G8Vyoin8=@vger.kernel.org X-Gm-Message-State: AOJu0Yw5iwggAFrYEq9mR+GZSarw4ekzelrvym+TRPKhfLi382c7EQ00 G0oSXp7d7a4jK0QCe1b5xzy5vCwJWXJIIJnSvHZ1EZ43EQf2wMP0N+N7U86NvowXXaKhiqSn8a6 e6vvy7g== X-Received: from pfwy27.prod.google.com ([2002:a05:6a00:1c9b:b0:842:8af7:db0d]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:9a6:b0:845:ccf1:49b6 with SMTP id d2e1a72fcca58-847c51b72d4mr2049167b3a.45.1782934360386; Wed, 01 Jul 2026 12:32:40 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:33 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-13-seanjc@google.com> Subject: [PATCH v5 12/51] x86/acrn: Register TSC/CPU frequency callbacks iff frequency is actually in CPUID From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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 --- 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934385; cv=none; d=zohomail.com; s=zohoarc; b=gh2JU/0m6zshKm+2F812J3Xw//XpFW5MOXXWcjmdmuBl3YtpnRAshugsRKGKsdmEjylxZPHbt3KgMb8dmOi9h/xCSZCBJ6rKa28GEaLItCbGYcgG/uc7kbjzru0zFAyPuhZrFERYw84V9T5hl59nOzbVV6iA/YX4L37228+AjhA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934385; 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=FaUjTU3QKJy+ktbmudl/+1GzmAqwQnS7of3spvtM7gQ=; b=dp3FZsMJ2RwgemxeD+6X1b7sdh8NWGnOwcINHQ51Ed4yvX45Rq3hNkVJv5YhJZdYjQLQWg6zTxqFQGx4EqS/FQNL3TbQsUzSWn5yE8BrD0yK/kTUAQYA4GYhgRZMVOP29Rnx8iuiquvRpomJQgD0J2+OInw8pHoKfuAHFw/nvIA= 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 1782934385189867.6802708231905; Wed, 1 Jul 2026 12:33:05 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350383.1607919 (Exim 4.92) (envelope-from ) id 1wf0fv-0002NJ-Ax; Wed, 01 Jul 2026 19:32:47 +0000 Received: by outflank-mailman (output) from mailman id 1350383.1607919; Wed, 01 Jul 2026 19:32:47 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wf0fu-0002LA-Uc; Wed, 01 Jul 2026 19:32:46 +0000 Received: by outflank-mailman (input) for mailman id 1350383; Wed, 01 Jul 2026 19:32:45 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3WmtFagYKCZ8RD9MIBFNNFKD.BNLWDM-CDUDKKHRSR.WDMOQNIDBS.NQF@flex--seanjc.bounces.google.com>) id 1wf0ft-0001tg-2q for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:32:45 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0fs-004o0g-FF for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:32:44 +0200 Received: from [10.42.69.8] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3WmtFagYKCZ8RD9MIBFNNFKD.BNLWDM-CDUDKKHRSR.WDMOQNIDBS.NQF@flex--seanjc.bounces.google.com>) id 6a456b58-2eae-0a2a0a5409dd-0a2a450882ba-4 for ; Wed, 01 Jul 2026 21:32:44 +0200 Received: from [209.85.210.202] (helo=mail-pf1-f202.google.com) by tlsNG-c1860d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3WmtFagYKCZ8RD9MIBFNNFKD.BNLWDM-CDUDKKHRSR.WDMOQNIDBS.NQF@flex--seanjc.bounces.google.com>) id 6a456b5a-edec-0a2a45080019-d155d2caad9e-3 for ; Wed, 01 Jul 2026 21:32:44 +0200 Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-847a2509456so1135787b3a.1 for ; Wed, 01 Jul 2026 12:32: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="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=1782934362; x=1783539162; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=FaUjTU3QKJy+ktbmudl/+1GzmAqwQnS7of3spvtM7gQ=; b=OauO9YQj8/DIduPXV9LtGQlmHJnxfKxLMXTbb/WZ+PMTU+rJkiMniiSHaCWYrb91SZ GOqSfHDBqVviFJ86XJxg/n3bYKhiR9NO3qT3qyrbBypQPCZAxdflrI0xW4olETsjVicp DbfPBIbmDz457EmmWwSHHD6hJoYX8BX0dgwY2J/PpWfiEN+Vp8WeJOL0zxgvdRUPpeRL SVetb3GFTFP2UQR0tHaJUE29AvEnq/J+kJnbMnanmddgbnrdzcHiD8TDxgCfoF3kGxBT Flb0xgFvOLE6OGnb8/8xp57AG+AfGMKKwPuL5A38Ylx1gE28yRj3u2jshwVq2OmQqSGL iUEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934362; x=1783539162; h=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; bh=FaUjTU3QKJy+ktbmudl/+1GzmAqwQnS7of3spvtM7gQ=; b=c+Z5x/52goRc5BE6Ua8dI24LduCwtN/R07BVOv0lL0xXQL8m/7ipSDDDI6yn1AnG5D RWFb9JSQxwxqvzJEYlyuoN/sGmLE/5321McCpB51MrN7azJ4NFvPrtKYRmsx6qAr3qyW eorqeq+bDXUnmtjBjq7Exa9A4GqB3rNF/7RNNbE9tSfaCrwdprI7cvJyccB1A471H/zV LsIabfyfPf4qkDU+oq+tbSU78BohsoksLtY4hiRonN64vJ6rd4hBQkIl5bUnY1anOA7e ri5WOjyuxK0/k62g/phLSJKZitwvvQrFM/VfzBmTgcae1QA7gBSuQHWWlJLhd75suOcr P1Zg== X-Forwarded-Encrypted: i=1; AFNElJ+viXaHJtNx77uDc7JxnQRT+5IfKkwW2hemedZomEQkQqU663KuEBPmpQWmJc4IYF2VwAfud5/hZ/o=@lists.xenproject.org X-Gm-Message-State: AOJu0YwjlbG21uC59fl37RTvgkMH9iF67yq4cjNWS+jNKB0xsLhnJqzh cJh/Z7+hXTzLCSyWHCJYrNz/reySadf6PUxZJGNoDz6r3seSo6FqUW4yKtrBwrmq4vd2GUr2vTR lR/lUVg== X-Received: from pghx17.prod.google.com ([2002:a63:f711:0:b0:c9a:53ea:434a]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:1b84:b0:398:9b42:69f7 with SMTP id adf61e73a8af0-3bfed3b19b0mr3536321637.39.1782934362055; Wed, 01 Jul 2026 12:32:42 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:34 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-14-seanjc@google.com> Subject: [PATCH v5 13/51] x86/acrn: Mark TSC frequency as known when using ACRN for calibration From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-c1860d/1782934364-A0D2B3FC-5AFC5710/0/0 X-purgate-type: clean X-purgate-size: 816 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934386085158500 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 --- 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934395; cv=none; d=zohomail.com; s=zohoarc; b=MIl/gffZHIn+/32QNpCw8SIZ5ZlnmwGEohHpxc3D9s/UYRK+qBBRcjeDFg526oYmM4KrwX+4QsCvkaeNAXj09EfI+qFmCxdZq5veWPMhlAStkIgY+X3Y9sVixlaWh4gabPVX0h/QWysn/s3Ix3MC358MGh1IzTIIuU0MooS9SbQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934395; 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=JEJEfFzkyRhChopEv3/Eo+3SUmzyKJlolrUUxvPFGQs=; b=eOg3De/B6j3j3NfOD4gXQzvjEOAXlhpalZpq9bER//yPcjhs4eSkjLzR4DauKbLcxzZZC5z4LDo+6acHJErsYwLc3yUkBZCU+tE6RXfWruGYCnmikjkEZYLA4R7S+agvpd6XjXFbCqgSFFpQ3KrLwK/Yt+kWg/wrUHsCHTmh9NQ= 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 1782934395571168.94717130827553; Wed, 1 Jul 2026 12:33:15 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350384.1607924 (Exim 4.92) (envelope-from ) id 1wf0fw-0002Uz-By; Wed, 01 Jul 2026 19:32:48 +0000 Received: by outflank-mailman (output) from mailman id 1350384.1607924; Wed, 01 Jul 2026 19:32:48 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wf0fv-0002Sq-Mn; Wed, 01 Jul 2026 19:32:47 +0000 Received: by outflank-mailman (input) for mailman id 1350384; Wed, 01 Jul 2026 19:32:46 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3W2tFagYKCaASEANJCGOOGLE.COMXEN-DEVELLISTS.XENPROJECT.ORG@flex--seanjc.bounces.google.com>) id 1wf0fu-00027L-9J for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:32:46 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0ft-00Bw10-M1 for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:32:45 +0200 Received: from [10.42.69.4] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3W2tFagYKCaASEANJCGOOGLE.COMXEN-DEVELLISTS.XENPROJECT.ORG@flex--seanjc.bounces.google.com>) id 6a456b5c-bab6-0a2a0a5309dd-0a2a4504ab4a-2 for ; Wed, 01 Jul 2026 21:32:45 +0200 Received: from [209.85.215.202] (helo=mail-pg1-f202.google.com) by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3W2tFagYKCaASEANJCGOOGLE.COMXEN-DEVELLISTS.XENPROJECT.ORG@flex--seanjc.bounces.google.com>) id 6a456b5c-a01d-0a2a45040019-d155d7caccd0-3 for ; Wed, 01 Jul 2026 21:32:45 +0200 Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-c85798977dcso829847a12.0 for ; Wed, 01 Jul 2026 12:32:45 -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="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=1782934363; x=1783539163; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=JEJEfFzkyRhChopEv3/Eo+3SUmzyKJlolrUUxvPFGQs=; b=PAgkNZum8jPxRZz9+ydbw+bfUj3MHsLFJsyQaqR1J0b+EjqdM80kH2xDwCx3uAvkhW +uGmCuVpSrvmvLd+Qnr2p41NXAfeU8zuWoKSmC4+569uo7sE1/ulR1RiXglbBtI4AFRu woISm3v4ZHLsIUiCTdjAY7ZyBeDnyK+XNpe0ixP/uai40awtttk+8vvd/yZxeed1Hckt cPaumKYB6fOiUj8vWFqfSiFUslOxtyV1orulkJcxFzANEuUjfoSJKKgCVjkjC2lkUdMs Ci32VSkmh5deWRIGFgA1gYCSLUHwmQXc4wJGNHGTYlFANYiLoOHTNFzFyHFX53bwW2wU r5iA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934363; x=1783539163; h=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; bh=JEJEfFzkyRhChopEv3/Eo+3SUmzyKJlolrUUxvPFGQs=; b=lVAomjB5FkP0QcXTTdn3NXHXRtDLRmUAzdMQaOy1zsHpwIOosi+1sBPbmzli2qZM6w 181Av7X0c0WaONtUwv/05TH/NgkP1pqgLQ7tvo9PHR73AlrMrMoGv1qq6rIiCsr8RGxC 8OiD0VMJSEAqfDjrSTfDdHAfbLBh54Dha2rt9LTG/eDdXMUz/id8UPbpzOjUITa/O5u5 02zOahZy/3HL2whTY+euCNIp7jR2vVqcn9Rc+L35nUcEhcHo3SYItcC08BuAVWyO29uK PvW/eeVcz5FpY6Oz84KoCMm/Yg74qHWSZ3QHyIJSki2FoxVdxC+96h9Oqg3M4xFf2Tx0 1gvA== X-Forwarded-Encrypted: i=1; AFNElJ82qQUj5LXqbK0G65tIjNSRqr69qKA6I/N82+fMQqo7cSFBmyTO+/aQIsBJ5el/9wUWlbzPzwTE2Rw=@lists.xenproject.org X-Gm-Message-State: AOJu0Yzd60iw5S7N9f6tETp+RxLJVak2vsKee/mM8VB5YBy9k9RBkC8D SGAhkapTHCtAPRGfnkJjCWbqVxnToRaCWZpcsQ1e0Qjm4a4ZzJPh0nOWbcOh4bOR/DPoh436HEL dIpQeSA== X-Received: from pgbda6.prod.google.com ([2002:a05:6a02:2386:b0:c99:7baf:125f]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:7288:b0:3bf:b1f4:747b with SMTP id adf61e73a8af0-3bfed0e2904mr3197752637.12.1782934363113; Wed, 01 Jul 2026 12:32:43 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:35 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-15-seanjc@google.com> Subject: [PATCH v5 14/51] x86/tsc: Consolidate forcing of X86_FEATURE_TSC_KNOWN_FREQ for PV code From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-ebf023/1782934365-AFD241CC-914DEE1A/0/0 X-purgate-type: clean X-purgate-size: 5872 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934396239158500 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. Signed-off-by: Sean Christopherson Reviewed-by: Michael Kelley --- 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 ae2d35f2ef33..94682aca188b 100644 --- a/arch/x86/coco/tdx/tdx.c +++ b/arch/x86/coco/tdx/tdx.c @@ -1205,7 +1205,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 f9bc1c2d8c93..e03c69a4db33 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 3cb473cae462..0a3bd90576d4 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 e24c05ab4fae..ff173052cdce 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 1dca9464b41c..676910292af7 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) (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 9A68E4DBD7B for ; Wed, 1 Jul 2026 19:32:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934370; cv=none; b=Mwnev0/NFKs9EbZW+aYMFbZWfPO9Fl5warB28kmSFUMqPZDbPe9wEnzWSwI9tvS5HjH5thDhkPx0Kja7FwU3EK2JIvM3yI+amMRYsSA8diOh2r27GxdDp3xiuXenqENz8L+jpYu4ss/w4hSLpe7MFNZi0FpwaaGGvAntHpVR/u0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934370; c=relaxed/simple; bh=ywVnek+cEVC2k/cuJ8ePvC3c7xcwJ3EFd7KuSRcxIA4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Akfk71SmB19a7MWz5rc9M4PMR5dxhJkrM6wtOLD62uajuZIMODKhlxpbrSoxbLBuApRpH8/KP1RH9fL6zBIaxUU8JjJj1DjE9iFpwsGCNfJ163SYPz6EUCKUYpTanLLi9oRUYyzo2IXS5UOdP2JqkgiCFMjYnL5SjAuHLL0K0KM= 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=d81dJN+b; arc=none smtp.client-ip=209.85.210.201 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="d81dJN+b" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-8479b45ad08so1026033b3a.3 for ; Wed, 01 Jul 2026 12:32:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934365; x=1783539165; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=zvn0qgJXD+EEALhwTLcptmf75deD5j2rYJRr5T7GtTU=; b=d81dJN+ba8uz0D0CWzFMOpRGH1gK/8oRho6BjgAttiPBzERJV9cAZEL+g42gGyxCpP ou5GXWoUrdCIDdUMR+K/AoCafHkBk18Dl3Xt0MR6bkjWSFtFL6702M8OeuWjnKz7txTh 7TZ2D4SpZitgCMp2W5fFt8RtdJdsdHIUnIbIydv/NVvLnlC/j5WQgUji66JDY7BYLyVp PJ2GtpgfOW0eETxj3blQCILlhxJDtqKtZpXI4OQRwUdlXQPAvWsZVN6thHgjVrF1QRMK UHdxEXL8WCYXzpKb+cWOlN/xc1DXFaWWS5pcd321ZoRxKLl4OxiQLQ6YpJwAlmppimJm Y77g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934365; x=1783539165; h=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; bh=zvn0qgJXD+EEALhwTLcptmf75deD5j2rYJRr5T7GtTU=; b=BjsooUGusbpvj5cLkaeipmRBSbMM7bkDXU4q8StHfAgFkv2gn/T7x9NY+E+7MBW2gb Xmyj3km+5eq4zfKZap2ktOF2Pm2uyku98ZNPZwtqb4LLe//kP5qQDquu3CA5W2WqMNKL nCYhjgYw+C9cj9yWSxENmJlX4SG+wEVPIB61f8ItBuJ0jVdv8G8ht1e33iIWzlDlqA8S D88sboaBVz89lkxhxbaD/jm8HE3WIXWvQVTAZDzcMabPphuA0dBgMRTuiAPYGCfuzxoY yLxf2EHmF7SPi/sfMQXe2q+MfofJwW2m/Vxd8NgR5g1zGt/Dz0USPECFTcw3O6H30Zlf uZDg== X-Forwarded-Encrypted: i=1; AHgh+RrwbOWCfzg2SCR/BPXAiQIAIec6OdUydFBXg8FA/DNeLpBTOtK2VLsM29T5pZP92e2Xe0J+IahwS85UqSM=@vger.kernel.org X-Gm-Message-State: AOJu0YxlMGKbxviZRLwItIVWP8P2ogP6yPxYDTfTzkPvXM/UYKdSg2Oq z+naC43o/8HcKYzYUXqiTML653mQ8DP4gZC8GQrQfRvSarRhfQPu490g2KyM1kz1Ke6cElbolOu 60bwHQg== X-Received: from pgkz20.prod.google.com ([2002:a63:a54:0:b0:c9a:8872:2a15]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:181b:b0:847:9226:e7be with SMTP id d2e1a72fcca58-847c03a60f4mr2814234b3a.0.1782934364356; Wed, 01 Jul 2026 12:32:44 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:36 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-16-seanjc@google.com> Subject: [PATCH v5 15/51] x86/tsc: Kill off x86_platform_ops.calibrate_{cpu,tsc}() hooks From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner 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 --- 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 676910292af7..a877b82d0991 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (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 ADB864DBD97 for ; Wed, 1 Jul 2026 19:32:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934368; cv=none; b=Iu44ngNa4PlXCHUprQSnW5qr6jJowRPXjlEV4rQP7LtjqU+rIFTT+LbB350jeJcUJ9ZqKPL0Rpp9N/vcmFSnmlknG6Cg2wUaaZPjpbbFQZB0RcQo0jbJ2hUNPiXBfzrdL0ytXL2ohw67OZBf5wHF18+XWx12TZ0d763+PAM0ghk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934368; c=relaxed/simple; bh=1GecteZCmORDRJzv/0fTJ5eJc9riviXtHhE/GZIQN3Y=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Wt9I5JETv3kwD32tU51unFMNod0rT0bL1nAlYHkGtdYOM/Kqety2irU5wyF3IM/ZECqz17fp3hGOtaBtWC6D+blHBI32sA58Ceqs/uCbFgepZ8dz/WM4Ru6iP20Wzkn2wGMRx2T8pgFc5wOtQJLQ9KWljd+WdXF2eGEJE+sIlIg= 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=rZyOcNsU; arc=none smtp.client-ip=209.85.214.201 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="rZyOcNsU" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2c81db324caso14281285ad.0 for ; Wed, 01 Jul 2026 12:32:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934366; x=1783539166; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=3QmXXgqE7aLG5WH8n+yjrFm5ZX7gR61uwM9vT7lFOWU=; b=rZyOcNsUKcbqzdQdFboqK41i16nBNY/Kf3E+cdGf3SB6uo5BL6CWYF+VoQJWosD0Vm N6Jy6UaWALxIdKIBiyKdsjEnTxjaN2s6MCvmEi3pQDWScxanuoiamT9QdT9tC4kT9V8S 2ha3D/Vf0hih/yV4VGOgI8FUpj29x093+lkf/JLR0DC+LWViX/K36kLs0ryos7ylLpbv 7zS9xQFtOZ+S25bk50a2bCiebTESVXX7UII8K8QcCGOMrW1PhNvyRz/AvoG6CYvShDHY uw34SDS4Hp/lsfhRxPtwbI7RiPbeu3QI/RUR+56eyjihGUgWbhy0pj3rlaXUuPEIKRO5 bcnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934366; x=1783539166; h=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; bh=3QmXXgqE7aLG5WH8n+yjrFm5ZX7gR61uwM9vT7lFOWU=; b=lCe4CfJFr9Ge62xN88eQWRBkG1Hjh78HCK+4+nFROFXEdrq8uicmGs7jIcZJ5lMsFt T//Qto02UkelL+VsBHfChUPa0eKpWx4QDBKEtNDsOT+SFYoQ/O+PCmfLHJH0toftKkDQ XbjrhNXE6czH5iN/BQsYIYhaxgs/JEj8+bNn2bfuXV0MhLyO8ZuNYlH+3Z8GQQ8yZ5Gp utar7neizj0IOA5KP5uV7PX5l4tLcFOF5jcsPC1BCW1v4P+NZq+IyyOW+5rZ2WyhhuIF vLF1ZmYOjnfwXn0nOIcwsogXBIwayE50l2j2pR+Yz4cNmmSIhV6/zIrFnWgEarMdZp77 M8+g== X-Forwarded-Encrypted: i=1; AHgh+RrgWRBsuET79OdKdqqM/ZykcqYOhk2z1zT0UIxzLe5t0DtHeImUN7ReYbpVk3XtzAVK+eDY2xeezQD8KzU=@vger.kernel.org X-Gm-Message-State: AOJu0YzUSm4nM2Br+xp9SF4ZjEPkqPC6sRzTfDvNi2mMX2U1EM1hc1Fn 1tzgk5eRWXNIjliBm5x52t+U7JRpRej/bXOwekYY2cUp9vAv5pSveq4SzB0j1b9guInsdQUIEE7 iW6OUTg== X-Received: from plef18.prod.google.com ([2002:a17:902:f392:b0:2c7:eb53:9c06]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:944:b0:2ca:68b1:b64c with SMTP id d9443c01a7336-2ca7e75d694mr30967275ad.20.1782934365572; Wed, 01 Jul 2026 12:32:45 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:37 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-17-seanjc@google.com> Subject: [PATCH v5 16/51] x86/tsc: Rename pit_hpet_ptimer_calibrate_cpu() => native_calibrate_cpu_late() From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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 a877b82d0991..9764ac758081 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 21C694D2EF5 for ; Wed, 1 Jul 2026 19:32:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934371; cv=none; b=FiohakD1GBJDHMplArgwQfFEGGOWs6lsK7RNAHNfK+OK8g+/XeUgkLvxd4jzkuJt06UOVIFIYYGR2poSdIkvsBL9F6XsO/U0Pgf5e9CcjLa9WDp6ykbXucSLfvmD0KkhzK3upibQx6Ba14nQ2rZQttrzVHpzkvFag8fpAy3RGJo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934371; c=relaxed/simple; bh=bCu106G3ke2QslwQjzoF0iFGAeRR147Dfw14C3mfIq8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Xe8GjAuxKLcxw9i97F0eYWOXD1As3a/ObwqqjFtliMFoJAUg0eCA3+3JVXXmRJQwYYP3Y8cHDyZAeONy4cQ9vcH87oGj8TkPMbwJVR/DVhKeE6Yogxvy8CuT8wbD54RKL1sIoN3S6URZ2XJ7d//+jOP10iM+ohOURF4hm1sZP88= 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=RGim8zLW; arc=none smtp.client-ip=209.85.216.73 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="RGim8zLW" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-36d97a4e08fso1162546a91.0 for ; Wed, 01 Jul 2026 12:32:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934367; x=1783539167; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=wWnD58giubyrEvhTS3JtzvsAOScPFFHLvCt5ZIn12HI=; b=RGim8zLW1wlz5dJnZqYLWL3bGdYClN515n10wiLNcVizsBIPQujENdMajLs0iWsW6O O+Rx2mKWQRRHRrTpj90TOFoPGek5y9CvlljK8GTnhvSRp9QLcRy24rsh8suZh15fJuoC n+5xWIeSE6kJloQzUTTtO6yv2emTebfe/s/Sn6/AotYZtsHbAIQio2FU/fxvIKFXliYe gMZJLUWkCwWcwFqAMNiTLiX0Wl9+69Osa0QnHRn83EIUfNNL0IkjMwTy/pK0CnCJQ4CI S4sTgzOS5lzQ+vM2PlMED5NQfi5X02T2ecSVnPIwU2Vjn7mY/8D9XAipgF8imJCB2Hlo 2e9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934367; x=1783539167; h=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; bh=wWnD58giubyrEvhTS3JtzvsAOScPFFHLvCt5ZIn12HI=; b=lhELPG5hu8CMcNXytVcgE5gSM65em4RcUgAB0rniT0VxuLRSiuR7smy6DVfKp3WrmY 0Eaej2gBHZY6d71u90twquAvVxoUUxQnR6Z16mSxEVV/3o2AWzDxvFZf1WAJwnGELIJL PGeFLKYTTiQrBLURBhQ3TQ+ps2AunQvL784Lxka3kitFbN3RxgpiT1xZrxGRAJ32UEHM /S0Z7jq4A6Oz2ErNLsmSrRy6ZWFaBi5zd2kfprdEND4l0ua8GsV4elZ3BDA0Fej3fHkl Ke2RXwvN33S/rPdfLQ9E9dsFbEvamuq1oeoQ/hisBUarQfGA89qoY9qIYaVFfqE6UMWZ 5jlQ== X-Forwarded-Encrypted: i=1; AHgh+RpyjhZXNi/eKtxfxLEYRzi684P1PqfVFi6tbqHOVklaZtWhnEXxyau+caeSm65z9PQwr27TONA+xpyGsSo=@vger.kernel.org X-Gm-Message-State: AOJu0YzUXxo63Ujtgs43PjujjcMAMsk3Bfrb4iOgsVCGB9qvwg1lNhLM QRfkvQ7CkHfr2jUDijFGg61gK8Sp/m3WdyrDhsBFnaAuzB0zeMLkwJ/PmZ2a8eZxXDDjIhjZkXA wTeZTpQ== X-Received: from pjbms18.prod.google.com ([2002:a17:90b:2352:b0:380:9651:afb9]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90a:e7ce:b0:37d:8426:40de with SMTP id 98e67ed59e1d1-380aa0ad396mr2721883a91.1.1782934366877; Wed, 01 Jul 2026 12:32:46 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:38 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-18-seanjc@google.com> Subject: [PATCH v5 17/51] x86/tsc: Fold native_calibrate_cpu() into recalibrate_cpu_khz() From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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 --- 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 9764ac758081..6ed6f8f012eb 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (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 34E173AE6E4 for ; Wed, 1 Jul 2026 19:32:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934371; cv=none; b=nyP/d8rRS9vAWgrV3ud9TbbuD88iPDCJMYUerwcVFPXQCrCwi1kvPOulj8noyr2oQ4UrTpoUawD+FUjxZR1MoGEM74pspbElG8nv9Uzs3loOhXbuLDBKWTiSjIxllMLfIfiHrDf+h5+Hh7BaDhd2DlIqyiUIhhJW1A41SNcoXgE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934371; c=relaxed/simple; bh=LqpoY1Xy6lWAOBZfOfvu2nbWJoGoJs43yElnN9RLdxU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=SikyuadOgcRDJctr3iR17goR/iA8RrI1AROj16nZDttpX6BCXo8sq6PBBEFO1AMTJws6xtbOHx04dzbNskBBk7wg5pARtcs01TtkBdpLg5XxYCn5xy2rVw+UMo96+DfsxCvi6JvZzM8kqpncXO90KGmWEbjAUbB0Qmwb0/BQ8tw= 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=K0U5iG6x; arc=none smtp.client-ip=209.85.216.74 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="K0U5iG6x" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-380a0925d7bso1014894a91.2 for ; Wed, 01 Jul 2026 12:32:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934368; x=1783539168; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=+CBMOnR0NQyGIEx0KnXnLe9zyF/J2rmq2NSzuBA4h88=; b=K0U5iG6xtUfwAQW3GFkOMjSUmE6tJeCLAhBkP8QZTEfZ798IQNJFBJk1ZdTcg/zejj wGneKOZrAueGTxOwTFXZJV8jRDUzOEgB2U81anaL/0oJvx62N67hGsdCGCkXmqoHGOub R4YA4D60/ApQEkzP56E/ylihQC6baFJxrOnLKvD4RUndkwG54HhWqsim2a/KpjKNcVp5 dKT9JUDKwbQ+np8UM+ScoTt+CSgHi2Px+KllsTv//gd6VAX+4uaACg34ln1sXe7oU9cg ex5Ypf2xb4uL+dPGn0b2nYyCHNoML46YSfCWFiVUbliZNg3ilQw32dT2n5RPHd45p+AW dsTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934368; x=1783539168; h=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; bh=+CBMOnR0NQyGIEx0KnXnLe9zyF/J2rmq2NSzuBA4h88=; b=mFgVV5OMKVzVexv8GyoGaS2qTwY41CYxqOi+LUkzG5wRMOdJjay8MO+sv7JOsA0eFE iXYVjfDG+egyTTzNFjvnkO5KgG2Nu237FqzV7JhKWCoVYl/BIRBxlZe/amKdoaxCMWKq cYyzTJKelFRynKA0ixRPZorTz2NJSaRR9ri430g5DICCeZGNAC4R36PHrOJhJHhQVWIS MwDTHKqLAxX3bYxXC26mRGLcb7+bQNqfT4UnsujQxLhfr+2VaEWSmbol+XMeQxWQi7Va LnLQKPmJUF2DK7FE9Ghsiz43HpXfE/v/FyRHWNa+juwLTAKefaAwqiKAB6p5j6J1f7jP Fn4g== X-Forwarded-Encrypted: i=1; AHgh+Rpkpet8AWvZfqHCY9u/QsJ8AnNA/McLICzDbGLO061Y7l0x6o4qqEEyEDJVAi4iQdQOoJzXIJouSUoan4k=@vger.kernel.org X-Gm-Message-State: AOJu0YyEE8sj1cyZ4409bk6ODWO37yq7dUp26QjW3azm/OU3TteQXsaI Rx4MX+U/Mb+P2MFggHxKEIaUJvJLt4MDBgxRXIHqJEcF6/IhbkLWPmTNee6o+WG/3vAO7QLf2Ol aRIBSiQ== X-Received: from pjbca16.prod.google.com ([2002:a17:90a:f310:b0:37c:9369:8b75]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:4acb:b0:37f:d6f3:450d with SMTP id 98e67ed59e1d1-380aa1313ecmr3162862a91.14.1782934368170; Wed, 01 Jul 2026 12:32:48 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:39 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-19-seanjc@google.com> Subject: [PATCH v5 18/51] x86/kvmclock: Rename kvm_get_tsc_khz() to kvmclock_get_tsc_khz() From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (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 6AD4E4DD6F1 for ; Wed, 1 Jul 2026 19:32:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934372; cv=none; b=SsDNpI7uRUzs/1DaySdrh5aFWYGwuSk/dDAz5FrdsyBflcnHEDNC0tttXKbYDROvl2hhouIqtqZ8fwgEY/dOk8Jfb6MPL5gS/Wt39EfVR6oCVrFghIPAqf3Ji1UgzHruOE5THawvbRSmytQf1QS5CdrMXScedPauXrmBAdAGtk0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934372; c=relaxed/simple; bh=BNbYGSH55jffEq4VtE+b969iyJXTMV1HTMSCzkA3sgE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=puR3zsDN+dgEccu0vQ/a/vMoqtuUgpCON2zWw4K9yMYtoveLo0iostY/d1bnGSU/loHe9g45VgUs/rLeDQNHte1CQ4fdYjjVjcMfsZsa5r+87ZW7seTK9wfK7t7s4rEXlR3Gl5ypF9PKlXeu/wUNqiO+1X4rvsLHfJAmfm+Oc54= 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=LvuK7Ikb; arc=none smtp.client-ip=209.85.214.201 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="LvuK7Ikb" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2c9960cf96cso12691005ad.3 for ; Wed, 01 Jul 2026 12:32:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934369; x=1783539169; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=/Hl8ESM1aN3u3Me6yWngcHpVlzQnDyaS4TqcnFx8YJ8=; b=LvuK7Ikbgf3c+eZq/cpmdlcqUpa+qLo1f3a0ZbvQCww2amiuagU95Q/WpBMvANfY3I YLbdK2VaW8cIHkrmBdNFLzPc4lSZVlimmU4QZ/0ASvMOa12DpvTV0yA8pt2dYXHnK2pb 7a7lcLkLpQuB+xPfTq2T/gQxqJJsSZMmpuMUzOq3/bzQjtIYW8cbgE8qGsqz4zJoB6ea my9IIu1/B2+dtSW8hP/XWToFNFZIeqbgRAksZvFsGrbEsLBIdpvRRDZGqnpOx9q/rOA/ C58ftKujaU0tKdi/I7R6wL+bFF9WrFll8E8XvxiRNQ2h9rCsTZRIWnA3W/gngxCkfYVT gmxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934370; x=1783539170; h=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; bh=/Hl8ESM1aN3u3Me6yWngcHpVlzQnDyaS4TqcnFx8YJ8=; b=rhz66Z/qtTkH4bfsvg6he5Gmmpb31qA25KdnZri+lLmw6fKNo0VXOlmHWizmeFUQv9 2YHqULM0cs7WThSSNl7sAvepN3YdPGtvMtwsOb5LgdUHvAbd1klFRgAI2mrGb9oeZFAc 2jPQVASgGj9UN5m9XjkcGxkNkcHsSZvR9SjrjsmTcM8Jz6PDhKDc10wJYcOEoEvLNb8x dZDuXobwpWSxiNBZjaqnriVQCotUC6wJpiFw8tLs/6Ny51Q8l4NWOk3Hb7bh2pOq68dy 6JGoWrgAucQHCeQNr4RQxM29GARxqLfNahnTdwavEreB1wd2D7E2jT9KT1dQFmOne/vu MO4Q== X-Forwarded-Encrypted: i=1; AHgh+RropCUQ58h3hSvqYn++Tpd6ythr75emOfv4vWdnqvUKL4bzZKbxSzL3w59oS71ATdxxAeGpbgavwgDjzUc=@vger.kernel.org X-Gm-Message-State: AOJu0Yy0O0lSD4uxESr4tDNfmonkD/Gtt8oHdhx8P5/7JLQlf4g9qegg nqkvu1aw1lSx/fmSQfAEdIt7qGrvGNXo32pX3F9dlzyl6SkCIQre3Rd1Y8WJ3qqDONC9fK0h8lQ bP8lzQg== X-Received: from plrx15.prod.google.com ([2002:a17:902:b40f:b0:2c0:bd65:1a98]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:18e:b0:2c9:e86e:a9f5 with SMTP id d9443c01a7336-2ca7e73cbd7mr31240015ad.18.1782934369266; Wed, 01 Jul 2026 12:32:49 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:40 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-20-seanjc@google.com> Subject: [PATCH v5 19/51] x86/kvmclock: Drop dead check on TSC being unstable during kvmclock_init() From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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 --- 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.201]) (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 76CE84E3778 for ; Wed, 1 Jul 2026 19:32:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934373; cv=none; b=hpMv7Yx6tnJ6PuG6gS3EiY950S47wwvP5VbjOvDKIWtU4C4DrZT69sxu62N04i/c4sD7sJaPRFPtxNmKTqKAj/7tpU0XFe1NG8n87uTG8TpqHgF2RsSaUWm2LdwLVMv/LtLL7hlexbRFK1qrPf01omFxrXBN6wkeQrrW2mu2zHg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934373; c=relaxed/simple; bh=5GEr6ZaUz9LBDqpBNqMe5y4w6C/kc2xnNXL3ExWAiBE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=RX8QtPBYIkUIJbEzhCBwLT7STQ5hhmu08i9JHvG9TUd4bNe2Vl9g1vpWjI+TzKS4AKUNLV2zLDjiriwBlJK4H9EC5k0oKC4Ai39BOJLcdciGsF5aYrLWz6+UqFRNcoHjDUJcXzPezGERJc6BEA736cirWhsqGZTACZFbb9yOGD8= 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=jiO3hng4; arc=none smtp.client-ip=209.85.215.201 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="jiO3hng4" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-c88aab7c1fcso998784a12.3 for ; Wed, 01 Jul 2026 12:32:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934371; x=1783539171; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=UfbO84e0Sh/RDtmtar1VNwA0GsKq34HNdlIOIT+krtA=; b=jiO3hng48RMQxaItHckp/u2/qpC4oacE8xg8w8b7wgMAhrZ70W7Ktg9/NO5giQmcgQ C/sg+KFyc6l3Q3qcAONSjZdnkXu+UK2F3kkK7UfqgKUlNnwKnI+WS8tUqDEny4r85wrC yk1+u+kpIqzsAJd4tcnPV1djAKXccSssXoiYoaK4yR97UfuVjxSZNoOm2a2f/vX7aB5x 9L4kAi4mHujjbUNghRPtJ1G/YiU8k/CQ8vlhlvOpVgc/63LksqTn6RIsoMVOSL/DF+9T EhH5zftkvEpU/M/NO5tvTitdrdyMoKSAmi9hEFaSx77vcd/W+umSUsid7Vws+/aL7DUN UfBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934371; x=1783539171; h=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; bh=UfbO84e0Sh/RDtmtar1VNwA0GsKq34HNdlIOIT+krtA=; b=nlOhNNkAWNjRr4+7EXJvPSXYk6TobUHdhmyPcQzycJs1Fgq1Sue7yRsxjN+UHsUQbE 1HpRDGJIOH9gnsN9/Z9dxfCY9hTF3zQ/o1zWzHLC10JHAf9AVEnG06PP5dwCGSaiDe69 DlladRSVVjyaLJiQbG3mSdHb4oCA1NeF8hKU/QdT+cDemvpnYp94MJmNBm7s90nsgkaq AR9HJ8DxL/GvkImvrDvqp9wOkA/sUkqPLjxsG1+ZvJIkNhe0vBdx7cgX4F3OhWy7G/b4 Uofk5Vzp2YLWN8BwdwjN7Gk3kM2JMHclxAjw68BLZYt3kLhLsv9LJTZHj3AdwG2C08qD DRtg== X-Forwarded-Encrypted: i=1; AFNElJ9lOg9MMToafthMA0VF6AtjAhCbqZkCGMgILjCTi9PqBlczKXFApN5lwjedULU5t29DBXefhln+DbS8cbQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxZk4J3w08WBwqQ0S7BnheagMcL6gVEfsgV6DLJPFL1bHedr/1P JsgOfeoZQmmr2ufmGcLI5bhfIFCBP7TfIUcb+pNammZC/icI/oQq2HFmrJIzmJ319WpHBeHQv75 lVB9mgw== X-Received: from pgkm12.prod.google.com ([2002:a63:ed4c:0:b0:c9e:1056:de15]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:b7a7:b0:3bf:6011:53b with SMTP id adf61e73a8af0-3bfed47e0eamr2900412637.38.1782934370392; Wed, 01 Jul 2026 12:32:50 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:41 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-21-seanjc@google.com> Subject: [PATCH v5 20/51] KVM: x86: Officially define CPUID 0x40000010 as PV Timing Info (TSC and Bus) From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.201]) (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 0897D4D98E9 for ; Wed, 1 Jul 2026 19:32:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934376; cv=none; b=NEdEgIbiReAWPnqTV1bBz4KbJ4ftDlxriU+OSG6fzHQCQF2G/nhhRFg+lqKhLAW9EE8caegN6iPYamFDQqGnOq81+302RvSCTT+T3Qq48h+LbI4n4C9iWAeUI98ah7O1acfcCUx67m/BO9Z0hcnB+/P6VZCk8l+sSm+lf4g7t3M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934376; c=relaxed/simple; bh=Uu0k+yL30vMc62159eEgoszSNDN6Z8sh7pCxUk/baoA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=sCaEWQyeHyYqExn72TZC1V1bge+QQsaHabftbvfsiDLw3j7CJoz/gMYe8ZjMoJYznDcABlznhuqFMkShLxHHYMHPXZ1lQzizsKO5g7fso4YsOsWalgMivkj6JV1/M9xr0+dFUnFEXlXkYas1H/a2LnFvDjlb+FMBhIO7HJBLXa4= 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=lS9P9/vM; arc=none smtp.client-ip=209.85.215.201 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="lS9P9/vM" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-c8895156101so863304a12.1 for ; Wed, 01 Jul 2026 12:32:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934372; x=1783539172; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:from:to:cc:subject:date :message-id:reply-to; bh=YK4DO2yTgoTSHNgYS/yt/30ZUc46SVmXG9Yy1qokrf0=; b=lS9P9/vM5micPWyAhGjEPBMvhD5gN1BGM+5PMW65A7MKZL6PcM/yBcc+OzlyJWOlMM 08Pn2PESpBYku/K4CczQL77iL2RoMRKkaie05m7xC0xQef+bZ+SakdXT28PHLi7ovW6z EeXkG0bgyjSLW2pEWo3Co44CtWcvDJoEG9tDmG+QiOxm7MjCE703+ntAHVP/wbAIM7c1 nFG8dBjOPULFfXv7oAKxSP6uxO7GjToGajs54szog9z6EOfBdW0x77aT4w048/zjjOSP n3MuxN2wu4OMAeLjz7csy0G8MFl/LxjoE2wV9Y3WTLzvAwcTgHrxArVWHJbXoCSVEfY1 ABCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934372; x=1783539172; h=content-transfer-encoding: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; bh=YK4DO2yTgoTSHNgYS/yt/30ZUc46SVmXG9Yy1qokrf0=; b=HrM2RlMGZVXE5t9I+ytDh2Si9Yrfch/+6dxy7OGIRT/Gy3mvBQPu3N54D3ilGy6+MM YhCv7X6h4DbLde5Lac+17SHUsTaRVTy9ldlSyBvaw4CiLPR2fcxh+WfYRractxbGTLUS 4mgX4yd5K6UBgQ0/dgYgUj4CKgjrEpczf4S0ivE9WLx0HaJwqTeCzo0T3CtIWA6hOLlY xw/LvsDowMLLqaG33Nqvv3k2fznsE48k0xDtHecL/j7AsS9faqF/54m4JGSpT4Ot5Zbn qZaMk9LGOF+1/uzQgHL7nqBzusytk8bbe5xkCrh1NsxRHpZUydLFF9vtPTiW44Xq25kH wYAw== X-Forwarded-Encrypted: i=1; AFNElJ+m+tc7O1uKqoM7DXDexu0VHWzBbSPxt3LTZI1RNuTeAPLEe6HRQgPX5JzMLcZ4/TTn2d7lF/XKpSIAnew=@vger.kernel.org X-Gm-Message-State: AOJu0YzGlXdJY3UGF1TpwOvGsU5LWUZTwrDzKOBLf2q3ZEPdlLkgLRV8 PGcropSCZMmrSBJNNyovgXjreyRDjP6wv96oj0XoTCoZMxZ/quUTQrI8Ja034kVUnJfHyPTVICK a3KIC7A== X-Received: from pgam28.prod.google.com ([2002:a05:6a02:2b5c:b0:c96:bec2:5af7]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:7486:b0:3b4:65ac:e2e6 with SMTP id adf61e73a8af0-3bfed362212mr3320468637.36.1782934371539; Wed, 01 Jul 2026 12:32:51 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:42 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-22-seanjc@google.com> Subject: [PATCH v5 21/51] x86/kvm: Obtain TSC frequency from PV CPUID if present From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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 dcef84da304b..909d3e5e5bcd 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; @@ -911,6 +913,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); @@ -960,6 +977,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)) { @@ -1007,6 +1025,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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (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 057D24F7995 for ; Wed, 1 Jul 2026 19:32:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934377; cv=none; b=B9qawF6r2x6X2A92lp/ZHTuDcBjJXBmG7caX+rbsFtLI7Rau6xmAmxsp7XsjNqu1x5RnwSju143kkPhQLLffMGgyDllb/MonChDtULIoCliO4uCJMmwLR6TWUpUihpz/ZJfbRz/D2dWAXvfj8PIP+3dm8L4sAZMtwM2pf6uTPBA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934377; c=relaxed/simple; bh=9x/WoAyEJ+5eY0VNcPunpgzEF61GW0nMgcwZdXKTf70=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Kzcp/Pzu+oRiYLIKTp4ogmK8hhb7S6XUF92WEv8bwS5RpbJvmG6F7Ozt93ok9rnpD2c+2HmSJcp4wpmFrWMIIO+yQHCHcbEgG+oMaDn2rIUgqflHMqDLWjZZT++HCot2SmpwC9DEjJ0TZuvqDj7urM+oC2hfKg3EhFOTgScIwro= 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=jmpH0/th; arc=none smtp.client-ip=209.85.214.202 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="jmpH0/th" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2ca3b314193so12003735ad.1 for ; Wed, 01 Jul 2026 12:32:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934374; x=1783539174; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=h0seWmgtqawiMKFH9SI3lPf42xnOLUsMbO7m+HkPiqQ=; b=jmpH0/thpRzPxXS0u+2BbGUFeIiEjPQ+YBpryVrVZO3jv+lWbLKK1I718d2E/NLFBg IBgsbLvvZAu74SZN3pe/V/j7252FjW+1/8pbsOqhrP07oZj7zMeSH5sOBd8clFAbO4Vp L2bCLGbyFi/xKA/xYZBRQMiwxZt+HuHW4GMIBVlpa0hABvS0q9ca96Vz3aqrFDNsK2UN cr4/FJzy+SibNiEJQtJfqlml6d+JLdG4It+aRaoA604qPlWNYAQNhV0QY9m2bdbfqQ+V ZklrCozvi07w0E+XDJIE9AA2qYQJuVR62M7ChkR1kgQJfEMqLP+QBpnuViSuGZHrxm4Y MzbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934374; x=1783539174; h=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; bh=h0seWmgtqawiMKFH9SI3lPf42xnOLUsMbO7m+HkPiqQ=; b=gOX9NW9nqYVA55jwBDEokTI/CAD5ErIhzbEd36+O4rfPHo6F1ExmmmxkjIuvLBhm0t 8FIyRiP7YWhdPutaIirpF8+kOmXi7Pmv0Nl5NOH9GpYyDI/Fw13crH9eE3fMnJIHYJj+ 73xF7Ez/nzHVjx/YD+pVATyJrQKYSH3XIP35dCW8sWDO6npb9msZ0TPCGqNJ2/ub3p7O K6yqobsUSNSo+58w7ZT+oum5Qv/lHVZE4xTgnUJ/j9E9RY30nqNomONw5SrPl3Csi4va sj+x4KmK5hxp1E3npy9ueyq1YDHMOmnKW0n8kTmR7iRo9/C16rVrU72PJFfh53gx0FFE 2v8w== X-Forwarded-Encrypted: i=1; AHgh+RpHal3ce2HUdE9BXI58CTmkjvuyuvO96hcJzKoGWqze+D4J73ecu/iW+E6leXS20s1UOMiTGnVerVkISwA=@vger.kernel.org X-Gm-Message-State: AOJu0Yxf9iExSG/Ad0TU7GmCejx7iYeASfjU633sfpeBMACdmEP8vtkw 2HHbTPL58UkJbI/oSiLLUGsPgfgqP0fZEECvdU14VJX+x05ymZt5Nts28PDOrrRUAevtTy7egub 5XYetHQ== X-Received: from plll3.prod.google.com ([2002:a17:902:d043:b0:2c7:ed23:f47c]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:d4cd:b0:2c8:1f58:55dd with SMTP id d9443c01a7336-2ca7e710f10mr31641185ad.9.1782934373673; Wed, 01 Jul 2026 12:32:53 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:43 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-23-seanjc@google.com> Subject: [PATCH v5 22/51] x86/kvm: Mark TSC as reliable when it's constant and nonstop From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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 909d3e5e5bcd..1cef54e1e7d9 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -978,6 +978,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)) { @@ -1040,7 +1041,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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (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 A2945412270 for ; Wed, 1 Jul 2026 19:32:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934378; cv=none; b=arM+copRKAtEZTAd8c5fBcwjZ969W9YX0nrhnL/nQ+RruJh8+lyaw6ivNT4cESp7wf0C10TMR9StNrBU94SSRsckcfmAB/lI+NkWikH9SmAwEUdyKeD6sMPaE4aIzQnIqWXhrAY6fm/QkxlCp/W+0z1Zt6IVGsoQqVApCWOHcq8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934378; c=relaxed/simple; bh=ehvol4aPGGdBph7tPEcdqNiMmKvh5DD8WD/ckSXpqow=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=TdXbXpKxmPQlhZm38xCZEZ5xuR6YhkRM4Aa/okbEq5sw5nVJlHqfOugg3mndOmgyqXRTyrVZxPUxgKCNIezD3JGBpZDtK16xk09KWMpVYyfT46x5X8wPioYzjv+pFRn+vio0rK9Jf7vQko+NqfO9icDrAP3MBfZncK40i5eWQVM= 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/JGcFWh; arc=none smtp.client-ip=209.85.214.201 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/JGcFWh" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2ca1f16e391so11746125ad.2 for ; Wed, 01 Jul 2026 12:32:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934375; x=1783539175; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=XQAPpCEE/BDkXN3dIWP18HQMEopEl3zLKZ2PUcc2V5o=; b=f/JGcFWh9X32X3N6GvM28619cTdSE/iPF4/e53t4cFm7B4if4byqEPzdf823jJz5ir 6hIuhr2LTZWHXRmnOWOlOMIzXVRBpQwWxqWIYG3Solt0Ed+kjYkeWG9R6nyN4pW3g2HV VTbMs/xTPWkUuJeDUZ2nEiwjkoaPrszGNgkumoELpGUUoFnz8Lf6+GC5/3cPwwTBTPut 35VRi/V8IPu9wrkD1r+zsMG1gxaO29PTL6jjLH/v4es6yI7MXnMXl3MvPrEvfhjlWcgV Xqpycw2Ql1+L86OHACPpPZQ0BxdlxVlYtrme1kd9gSMtObRVQ7Nq7zkqAklqfWvCOPh7 JNow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934375; x=1783539175; h=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; bh=XQAPpCEE/BDkXN3dIWP18HQMEopEl3zLKZ2PUcc2V5o=; b=i6CzwWwaCRVb5xQk7R2uuQ3cJsB9b64EKXZKId84zhQwS66WpGd5FsjveXhpdBQgnC Xs83hHoMfzIMwvOEoC9VqBffBjmUOVhTDAKr/SUbCtSqVZAjzDQQWcPZWNIuxf0GNqot BnaveglqHUTsSRrEjXGv5sVCd+44xRVScRUZj91iPxppjGbgaAymkPQ7ke638TAr3HpW MSNxgw3sjkskLuHC4votk3Rcai5sYDgizJIO4/4EseiXO1I4KR9DDknwVr25M7WMGado SnQVS405FI8mU8DK0jcWCfWie6WUegn7Uh3hpDKBv5Zr3JFS3e/rFidHXk9Iy2Tu1NG4 +IAg== X-Forwarded-Encrypted: i=1; AHgh+Rp9lIF7nNvN09yxhKJmiJNA66g9IndKyG6tNnuRln02sexUnvQ2x61e21xexQUObrPNrxjNVoCRzX/qi5w=@vger.kernel.org X-Gm-Message-State: AOJu0YzyZsrF5iMN7f6s5JHjLfs6ktzJOkP4JB4V8MGjk6RALVGKnm+C TA4nvg/swwuYU8Q9a5alqvl3782NpcvwPpW5ZOiIu2snexntDUXLeMnCy4NzmwCMllWH1UHKco0 Pxlmmtw== X-Received: from plpl11.prod.google.com ([2002:a17:903:3dcb:b0:2b0:46bd:4fe5]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:ce02:b0:2ca:62e:cc4f with SMTP id d9443c01a7336-2ca7e7645d1mr34535395ad.23.1782934374801; Wed, 01 Jul 2026 12:32:54 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:44 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-24-seanjc@google.com> Subject: [PATCH v5 23/51] x86/tsc: Add standalone helper for getting CPU frequency from CPUID From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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 6ed6f8f012eb..56e73e96920a 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (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 B0ABD41228C for ; Wed, 1 Jul 2026 19:32:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934379; cv=none; b=uU8o5WuMKqLoE070XflNGjWEDYSSozXpq0bDxnwoLMLKivgXjRDlP7kaBXPMHMPEHYU3/oG7YOVER8pzv53hJuFUNkao/6kSIrbAGA+7a94HGaD6c8VqdXGpnLyh1Ir833k3VT7Y4QICRXpf2yn2NIytZuJSfaseLOp1LHHgJc8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934379; c=relaxed/simple; bh=qoYpZpdKAvs3c+m3l1ZOE6Nj7iAKGdPQ69UNTM7lOtU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=nFFawCeOpONPJQrI98j1uUSHPSnpxeDa2TanYwspeiPIWLfEf8HSryvQZjndiuw13A/Qf98sHUEygqhw3BS2VDWuam16xy0k5ZlFq8e3vEscqYkRQB8VVw/yULdl1L7PjWPGiG8dtBRg4cuOBqOXGWSRAYa8qbOnnlBucr6s8zQ= 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=UTADQx2Q; arc=none smtp.client-ip=209.85.215.202 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="UTADQx2Q" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-c89704da8c7so1486186a12.0 for ; Wed, 01 Jul 2026 12:32:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934376; x=1783539176; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=3ZuhwNx9YXpitDLlgZzJCjWGiYgYUv+Ggq0FniuPOLw=; b=UTADQx2Qv+UkuYpZZzj6mDpjUB1/x1XUWBXs33eVIdTmwxCubn5aucvgGyZiIBiGX/ 2TPZ8G72wpzaHNDFjufo4YNQENKFFOaBsntR93nlbouFrd7pi/CzWncg0qUVX+sM6YIE PDxiCreYu6NWCtZQk7uI8Occpw5OUR4jZ9nrgb1Y4XtSEvoQLNygWDGBHI3E0VMQVa+v PSgS+ovotPVCjzAoBDN2mYbIz6VQuVNeOmxbTzQS4wPP30RLzj2fOiYJ1RJL40e3gNF/ U3IvxDBU/KDo5NCD0EpiGoHLQl42WWqzSVU/mZAkeC29qAYoNjPrjwQBPYZ26E3mEnBm 869w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934376; x=1783539176; h=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; bh=3ZuhwNx9YXpitDLlgZzJCjWGiYgYUv+Ggq0FniuPOLw=; b=sBtIERn4Q0YqoP+VBzIegeGeqjUA/X40SSEfrr2uuVawh56/gs7Tmb2PTO2zrIm74O AIUZrGO7J107Pe6f195G/nGqzo2HeI7s6b9dcoG+OxUdUvh59nvR6M4rmjes7MbkMOWT tHPOG/nZ5FifYYTLwmae1FrrjtOBYAcfaEcoF+RlQzetw+DNe6tCNsXMuSUwlHl3k9hq dobMQtGs8ljS0piFBDzsViBI+T6SZ7JUaFwM1uN/yFhxJZGUvpP1IrnRYmZURCnE+GAP ZTfsoSbImxzL1CYGnG+ge0dJgywLsKjVtPY0YmDIH5SDc39hJJTM1KXFAPD/y72mJHc/ r/+A== X-Forwarded-Encrypted: i=1; AFNElJ/GZ4GrEzrT3t89KfudZRKeC8EXPBKrfdFmKBwabyXI81GSupsI2OqttjwCU+jAmPRMgXmJN8cb1aG7MNo=@vger.kernel.org X-Gm-Message-State: AOJu0YwMC5M1sL18w/rL9bT/QWZncoYdxPayNFHPeuMIvu9aVAx9Mtkz 4OdOr3XhrYpXTggZfj9Hs2yq7FzDX9GGc//W/cGVmtVGt+IOFst+9+EH1sPJEAzPCi2mweBpgBe BJjQNhA== X-Received: from pglx30.prod.google.com ([2002:a63:171e:0:b0:c9e:a22d:15c4]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:6e8f:b0:3bf:d0c8:2aa4 with SMTP id adf61e73a8af0-3bfed1c3990mr3189645637.8.1782934375853; Wed, 01 Jul 2026 12:32:55 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:45 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-25-seanjc@google.com> Subject: [PATCH v5 24/51] x86/kvm: Get CPU base frequency from CPUID when it's available From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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 --- 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 1cef54e1e7d9..6c7011ff7bd1 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 @@ -928,6 +929,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); @@ -1041,6 +1047,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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (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 2056E4189A2 for ; Wed, 1 Jul 2026 19:32:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934381; cv=none; b=KWy8+JKuhF54hbFXhUWU+/fYc4XUi6N4ENbgYZnhuaUXAl5K7yxqfTfz0/6YGT2nLUfVq1gBzUi2gjQ5jXEgx7WtIlXTNW5s4IpyxRZMzUmj2PZDVBha0Vs1FBrUd9fMBySgrULuSM7aZQ7qPgC5RUDZ0fUsqM9GR7Gig1YHn3I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934381; c=relaxed/simple; bh=bxwmN1s+gw9A/9J+eO2ggxcdQxgsvCoLoyxswI/ndP8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=NE5PnQLrnD1gsBYl1ZfE1S844aJFLkIvNRLQr0wGm8sRNkU9+WLMMaWh4epcsj3AtG0IclCtB+aVJMY+FK8UYajFMs6uvlCK2iokPVUynOTNDPYcfhqKQCG8kPVAQL7inyTrAcKmuWRMXo5Z+5jxPFFfxFkaokfmkg5RLi/CRzw= 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=nnZySWBG; arc=none smtp.client-ip=209.85.215.202 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="nnZySWBG" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-c889d1eedcdso935694a12.1 for ; Wed, 01 Jul 2026 12:32:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934377; x=1783539177; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=uJ3m/TrNbE4SFzRsHKX+8uSq+s8U3KdnfXDvnqXCgWk=; b=nnZySWBGp+4OwixaUbpVyRGP59jpjcE5YokPICSJZcGynsde3ud2282qvNu6jWjx3j FZRaAdNfuQYtRkUsLCVePI1+wT9dTJSRdxdxs4/xvrlMtb4eM7aQJjHGDmB9P/dCYGwY xz4t1MTj7VNgf7F7Xqs2vGVFaTqYPfTZ+mEnXADMJeecyJkf8QMP1+7Q9hbDFroEBZZG rNcyQ6gC3aE5RbFc1s+5xzx3o9uu4MalqL6FhF7DryEg9wd+OY55t9LRS5SWqwo8/XTX m1pQEyobDYDuKyWgmrhIcHj+VomgQ/sRzY7rzzeuyMAySvKEy2ptJC32e9bNy4F3ICwS lW8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934377; x=1783539177; h=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; bh=uJ3m/TrNbE4SFzRsHKX+8uSq+s8U3KdnfXDvnqXCgWk=; b=e5/cKDwq55jdGRB9PuWtZ30xN4nPZoac/IekyHBuBclKNint06ZkCXK+FoidD7zoor Rd/SPJgoYewsENtAk9l+Q93YbfSxzAu4zEnue2ZY4cUFrgmxGKbRPTSsISdypL66N1dZ cgupi3zn6tqvfsKPE3vStGgaHpwO6lL43iw100IDnwBO2KA26rNsxZIoREskc3rHyuuE tCq2c/2y9O2rOT1Y2VY0LFimAPN0SXIpJuQbtkixF3wz1ZDRqxOeX3oIw2Kq6LKeXTGc XNyZoKhmHS/tZY+GU7zNzaiEOgxvWHwCfGuyL/gdIQv0WHx1VRcF+7JWp2dIiL2mmUcA dMXQ== X-Forwarded-Encrypted: i=1; AFNElJ84/6Bnjy2abRAOsZOq9y4fs5RyxtTOmtSa6E0lcoBb7Tvic+w/DaFP+WDVaARNHNd66bBUTRfOMqh20ck=@vger.kernel.org X-Gm-Message-State: AOJu0YyhniTvwhRX9GGeuQDFbELFPQBbTjQvcZZXF+exMeKkxvSHlTXw EMMMhhIuPJkdqWDhl6OAzN5BEZzf80t2+pKeCH3+2fN4urRKRYRVhgqOv5IV6QAw2H5gAk801nn +XhCJqQ== X-Received: from pgwa12.prod.google.com ([2002:a65:654c:0:b0:c8a:eb2c:4d63]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:1b84:b0:398:9b42:69f7 with SMTP id adf61e73a8af0-3bfed3b19b0mr3537498637.39.1782934376998; Wed, 01 Jul 2026 12:32:56 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:46 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-26-seanjc@google.com> Subject: [PATCH v5 25/51] clocksource: hyper-v: Register sched_clock save/restore iff it's necessary From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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 e03c69a4db33..c4da8e35319a 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.201]) (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 26BA44189CB for ; Wed, 1 Jul 2026 19:32:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934382; cv=none; b=u6jIxFjQrruYx5rdB/jJ8maU59H/bCVEfS7mfdHEqSHr7HYhI5hcczWCoB6hZOMvIXGMzVu7/TBaCApAQdDLe0BawC3lfwWkwMHDJY0CNwrwPmnadhVEPgtqQ+frLhpWRmQpfpS5X8CloSvscVjkulYSYyGMi7xOboBDQ5i84Pc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934382; c=relaxed/simple; bh=naebGTX3IOtMBaOZ6Pc/blHlj+HGS0vQ3lqqBbsq1SI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=FOfvuMB67Ajw/6zd/i693wiASyx3vwH4oE01IlxCsVtc8MWh5FkEX8PCCoJXcOzjpsV0LudeYYF4r+mfHx5FUIbE94NfFCbuDi+gxXhB/REyR0hmMdA31Wyr1uesnxKBLJgyda8X/rJ72WomLaUTto+DOpV6zOTEF/OJpK3Yzoc= 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=iyNOMycB; arc=none smtp.client-ip=209.85.215.201 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="iyNOMycB" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-c88ad1558f4so1256398a12.2 for ; Wed, 01 Jul 2026 12:32:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934378; x=1783539178; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=m4IxRx7fOhcWBmMrJhtIUc/shJhrGyqdre87YRmUR5M=; b=iyNOMycBlszI4a1HIBWK81mhnIwgmiW948lZfDycVv/tm9NA/ZE7mQRjX/SChewDHY 00Comf23hBbSoobQi8e7A+BD+ca13v7vrr5+i4Hwqfx1NSJTZolWOhgOZTG8h4C3NN1C B/PQqiiLJv5tjPXQGEeSqi6HEHe1xUTe3YVdRh5bM+4n9lRvz0hGrJL5t4NrZ1hv9rlr sQ/PSutRmqNLJPxG+RcgkQuQYBU7bSfFBGG949J4tm/Gm6oZhPZ90srLs7+fujh5ZV5i 8G8kAEwl0+nE69jxQMDkkX3pnU+geQyWf8zmggNKQhij8pfF7zavYBEYKk0zr7dOl5EH f7CA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934378; x=1783539178; h=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; bh=m4IxRx7fOhcWBmMrJhtIUc/shJhrGyqdre87YRmUR5M=; b=O2HCuwy/BPmd1YBX97EBk1THyNoOe6kCj8HbQompwtwnWHc7R4iPklLUJQPcwOZTUi gzWeLCT45aJpDLZ+xyzF2V9HgCZyW7JEQ7aab1DajLmSmZA+dpd1imD8EhTyu4vp1p0d taOd1LsYjFkT+2qIG71ZUnHBKs+hdi6EPhmQqrDa3BamnkAsXtuui/BFeuqrMsE97ewY klCJRCWWJzPa+cENk2C0q8fcSGNDo4jaSC/q/K9vMFntcc9wHg2M4epM3KD36I38Lcyw UUGcbAJDV5Lg+Stzg7n02nt8zAz99+bwyx2aAMWRxuUp5TrH9kXMObwrHmZwKmt5jrR7 xNSw== X-Forwarded-Encrypted: i=1; AFNElJ+icxhunOhdh98bWDLe4Tx80M9SWcdH6TqcocbFBU99yaUIoxxFENvmF4cyQ0ouvxikvY+NSohImj3s7yg=@vger.kernel.org X-Gm-Message-State: AOJu0YyxZlN1PIWAGwKhuFiyBUFGk+8F+GfhQa6Q6OyEWp7n+z5INfgt +DXeHPXzyatOm6L3OivpOzsQwbMfMG5wuI8TzEPRrNTEbX0QqOsSUD8Zmo50jLDhNSIyIrc5yf/ PTJzZIA== X-Received: from pgbda6.prod.google.com ([2002:a05:6a02:2386:b0:c99:7baf:126d]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:6b01:b0:3b4:931c:3c7c with SMTP id adf61e73a8af0-3bfed50b68fmr3305567637.44.1782934378058; Wed, 01 Jul 2026 12:32:58 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:47 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-27-seanjc@google.com> Subject: [PATCH v5 26/51] clocksource: hyper-v: Drop wrappers to sched_clock save/restore helpers From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934461; cv=none; d=zohomail.com; s=zohoarc; b=U3MDbXQGJvBLU1F4XSs0NdaarMRZ1hytTHBNNYxo1JKk6gB9n9iE6WXfYFEPXD1AFgGbjxxr/k9SIcDohGMJRGLN3Sw5uTAO0lmtlKdPUazrtmn4vVGSlLtAFakDK8Ei7LCQqztVme7BUs6Vt9Qn34ij+qfyusL54a6ap5lgXFA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934461; 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=D8RMEeRf8IO60ymrjMFeZrqFOqn/98Ma8JhKdrpIeKM=; b=LX8JFb7ZQosRqXFPmpNDAgi0KOvXiifPrbU12hmS14SmJeHQ5zF3oc5F+RCkJQL+NyGXNajPqEhfZRy8EF2yfPRwReiY0W2K4OR3/rjU6Nb7Io+un1Vgz1YeA2SUDYZaUtp8qjLK+3EDOGKvrWSWH83coR5Iv+IEURHzjjRnrt0= 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 1782934461220929.4036174643019; Wed, 1 Jul 2026 12:34:21 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350551.1608068 (Exim 4.92) (envelope-from ) id 1wf0hA-0002uw-46; Wed, 01 Jul 2026 19:34:04 +0000 Received: by outflank-mailman (output) from mailman id 1350551.1608068; Wed, 01 Jul 2026 19:34:04 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wf0h9-0002tl-W7; Wed, 01 Jul 2026 19:34:03 +0000 Received: by outflank-mailman (input) for mailman id 1350551; Wed, 01 Jul 2026 19:34:02 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3a2tFagYKCbAiUQdZSWeeWbU.SecnUd-TUlUbbYiji.nUdfheZUSj.ehW@flex--seanjc.bounces.google.com>) id 1wf0h8-0002Y4-54 for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:34:02 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0h7-00B44A-IH for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:34:01 +0200 Received: from [10.42.69.10] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3a2tFagYKCbAiUQdZSWeeWbU.SecnUd-TUlUbbYiji.nUdfheZUSj.ehW@flex--seanjc.bounces.google.com>) id 6a456b9b-5cb7-0a2a0a5109dd-0a2a450ad372-32 for ; Wed, 01 Jul 2026 21:34:01 +0200 Received: from [209.85.214.202] (helo=mail-pl1-f202.google.com) by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3a2tFagYKCbAiUQdZSWeeWbU.SecnUd-TUlUbbYiji.nUdfheZUSj.ehW@flex--seanjc.bounces.google.com>) id 6a456b6c-e40e-0a2a450a0019-d155d6caed15-3 for ; Wed, 01 Jul 2026 21:33:01 +0200 Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2c6a20348ceso13515645ad.1 for ; Wed, 01 Jul 2026 12:33:00 -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=1782934379; x=1783539179; 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=D8RMEeRf8IO60ymrjMFeZrqFOqn/98Ma8JhKdrpIeKM=; b=TMNivoOfhimJCECmLDLcAOqwk2S7M8O0behC/qBKtXSqXv7ysQc3mfbhAojGDc5rO7 4iMgQkBHinu+GNDXJGf6hSwe45qGOID5CKQlscgk4AaDqlaQ6cOrtRkOflN37DX85RSU mL1Xy7fiRBi/Y7NE7aZtofm5QxWRSmmQ/E7b5f4+g4BJ9/ScbW88igyuvEjp0oEvRqDu L5WyVvZMnBcwpmT4NGyU/xUyYa1N/qW3mLN/XAwJO9tKQNCsNhR3Df8liWtxtwpVMv4S PKMdqKSRq+uhcbCyHaRPQPkKPXiBv68dHqAf1UZJ1pribvuZKldSmLBVcZA7JHtnMRF/ m3xA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934379; x=1783539179; 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=D8RMEeRf8IO60ymrjMFeZrqFOqn/98Ma8JhKdrpIeKM=; b=ZTmxfRsLy0gWTeUvlvGOx1OW9M/ntIxQ8cZfUfrb0SBhU0CYhVRHAjhlorc016xl6D 5EHqjHoctjKOC5GPhN3XZzMOSYhQzPTiZJGTgtHFD7GCS6WgFgA3m9piJld7Yp6hXh+4 nkkmMkQWJOQK2H/e/kFrpgzD4ryysQaGuZzlyKcGDPyBLBvZaqftGs4AAUA6U7m2ZHii Hqx3DzVQI1/GONXBsL8g2dB8jEwyWYkLS9Z1LwKDXaFuIGyDc7okkjK6UvawaSwH8RLu 5bemxdIvcnT/YVj5PURaIlabahO1g9JivU14gS04w5gixiK8Z5NiI+KXHBKSfsDyDuWL HHfg== X-Forwarded-Encrypted: i=1; AHgh+RplLpkp15SioDmyGN/vkaHFGQWEJ6HNtLrfO/9vLn8qwLhPg60jkcmrEAkDRneUQYgBq8TBi+Wbnh0=@lists.xenproject.org X-Gm-Message-State: AOJu0YxiO9od9iNAKoy/gyyudX3xeveCmAdkZU86T1PFRhavpUhLHI4m X73eafca4DSJS8YoY0JgMAmgd/7qqvG7de1a4BOh8JZqJb5Do0YOABj4DNnx6lbgm36++Hs96+N X9RiU2Q== X-Received: from plkp8.prod.google.com ([2002:a17:902:6b88:b0:2c7:ebed:f6e8]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:3ba4:b0:2c1:ee75:56bb with SMTP id d9443c01a7336-2ca9117aa06mr20678475ad.20.1782934379169; Wed, 01 Jul 2026 12:32:59 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:48 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-28-seanjc@google.com> Subject: [PATCH v5 27/51] clocksource: hyper-v: Don't save/restore TSC offset when using HV sched_clock From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-4011c0/1782934381-3C07ADDE-E9F45FBF/13/0 X-purgate-type: clean X-purgate-size: 2767 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934462596158500 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934472; cv=none; d=zohomail.com; s=zohoarc; b=gFXLT78kyKeJT3/xXPQOF2FtTbaO31jfScQ5onx7iFTpd+GWeZ/WJ01uqnzZxtYayFLEhWCzME4OGZpCO0EDti5X7YNfiIUKBjyaBqfPUbRZxD48KJwCRu1lKOhMthf1DY2V4pE4pkjMN+BrfBd7MpcX4PsDoWAjm7Qi43+cg9k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934472; 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=IHAlzrllQ2SIWnv0fCfBsaTBNv7ymljQujJZvblLIYE=; b=GtR3A1v9r1kz1X46VdzltWA9q69Kzt4+4NuJpFDCacBnvLF9/15H0D6beplN+inLtsxg4wBQZJKnZpk/KLvrqE6OJl7bKlZkbeiSiq5Rkttn7aQPyw3pb6d8K/Jujwq3rcLYL/SWou9du9H+3hAbeeGIJGj8qHL+gZWxEHN3EeA= 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 1782934472873303.7361120339374; Wed, 1 Jul 2026 12:34:32 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350553.1608079 (Exim 4.92) (envelope-from ) id 1wf0hB-0003Ai-F4; Wed, 01 Jul 2026 19:34:05 +0000 Received: by outflank-mailman (output) from mailman id 1350553.1608079; Wed, 01 Jul 2026 19:34:05 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wf0hB-0003AY-AC; Wed, 01 Jul 2026 19:34:05 +0000 Received: by outflank-mailman (input) for mailman id 1350553; Wed, 01 Jul 2026 19:34:03 +0000 Received: from mx.expurgate.net ([195.190.135.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3bGtFagYKCbEjVReaTXffXcV.TfdoVe-UVmVccZjkj.oVegifaVTk.fiX@flex--seanjc.bounces.google.com>) id 1wf0h9-0002qQ-RC for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:34:03 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0h9-00BqNS-7n for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:34:03 +0200 Received: from [10.42.69.11] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3bGtFagYKCbEjVReaTXffXcV.TfdoVe-UVmVccZjkj.oVegifaVTk.fiX@flex--seanjc.bounces.google.com>) id 6a456b8d-bab6-0a2a0a5309dd-0a2a450b89ee-26 for ; Wed, 01 Jul 2026 21:34:03 +0200 Received: from [209.85.214.201] (helo=mail-pl1-f201.google.com) by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3bGtFagYKCbEjVReaTXffXcV.TfdoVe-UVmVccZjkj.oVegifaVTk.fiX@flex--seanjc.bounces.google.com>) id 6a456b6d-ac48-0a2a450b0019-d155d6c9d195-3 for ; Wed, 01 Jul 2026 21:33:02 +0200 Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2c9b1b608e2so14566935ad.3 for ; Wed, 01 Jul 2026 12:33:02 -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="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=1782934381; x=1783539181; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=IHAlzrllQ2SIWnv0fCfBsaTBNv7ymljQujJZvblLIYE=; b=AzWY3OVNP78CtrQ1weYyrQkWHNF2kdCX/dbIZYAddU0sCq7xvy0glzsszuj8qaLiS9 bYXxOfNTGccLoze3wU7SSua/ZpDk/kUHusvWujSw7BewLd/VW1+vmQ2Nt7Bti/31UjZX Qyarxg3lfsxdz/d7YoilWSRNQRCtNf6JnEBEdGKx2YxeVPSmQGmdUWZziSA1fWyXCQJP iK7OBe2NoSD0SLYKe4JFWcbN7C08/ulon0ZrIcOzGMTVYo04gOg7ix/VeH+3QCCvdbyq /CtMkROfVC1/olmOdzCaDj3CbStmAr+7cgmFHCIDr5HKwG96a0dUn3uvLmxo47BLfJXs 7gdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934381; x=1783539181; h=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; bh=IHAlzrllQ2SIWnv0fCfBsaTBNv7ymljQujJZvblLIYE=; b=UMqRtpm8WrmxsC3lvv6k98GzK45gm7/h7bMDj3XBaVrolaHMDx7HXy0+l/h5naTTa/ 6LyWMrzpoNQFLPa0CwAypq9cBw2FIYTChLhT6jHuENwxb43Znk7UhaSN6vvuEpSh7N54 5QTcnlZot+bAKvcvLZwlUIx5TqUJG/hgRcoEeS0MqauSoXG09Rqee8kaZpjt1OJDTN+i 9qr8xeQP2JIGBnU8IePXbC+6XTmUyG0k+YvZcRAMad9SoP6NIP4nQntL0EsmuEohgSU7 1a9G27eQThhfPzPAaHP9jpOEbKlDVfwM5pCRe2+LqMGXvSX87VPlqUqLZtEjd5Ix213j svBw== X-Forwarded-Encrypted: i=1; AHgh+RrnR/GoumYciHhx/RIv13WvSBcBUPrCqsAOuR/R4b4Wy0CGEQ9+oPGD0CErPQWxtquREH0TbE1akdo=@lists.xenproject.org X-Gm-Message-State: AOJu0Yxa8G+2KWgdM9VRVFFxOOqCp74XnyQE4ZH88PMcszbtWAVHIznu WLgSkNK2qEPYHQ6jECify4aDY3gX4sm3ZWddLfvP5LpXKj6HaGitu8iDtGTjXfwrz766sD/qbFM yzOF1pQ== X-Received: from plblk15.prod.google.com ([2002:a17:903:8cf:b0:2c7:f338:5690]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:41c7:b0:2ca:de3:15e2 with SMTP id d9443c01a7336-2ca7e561189mr31594705ad.0.1782934380474; Wed, 01 Jul 2026 12:33:00 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:49 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-29-seanjc@google.com> Subject: [PATCH v5 28/51] x86/kvmclock: Setup kvmclock for secondary CPUs iff CONFIG_SMP=y From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-42698a/1782934382-3814E220-7C5918BB/13/0 X-purgate-type: clean X-purgate-size: 1442 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934474636158500 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934591; cv=none; d=zohomail.com; s=zohoarc; b=M2FvPRNNNXAdL0d1VWF1RkQ+t19vFEQi+erCAEk2teOYUXgn6H5m9sssSg/wDF+EFT7M7IrPHPbL4BK39wF8upBJZuOeQjb1yEBb9GwOIPhfysKs5OTZMaM+EpcvtI7QIUrzwZGQ2M4J5LsMArM9wzfGZg/r7s1+CR26K/0w1Qw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934591; 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=YK2zVmNLEJoBEawF7PlPSBbbkhRpzdy0apLvLWVt+lo=; b=UWZDaX10wsHzd8FOWRDLNXyNAIOE34Iwn94SlX4Vq8Grj5ukuEA6hHBZ4K91l/4zQD61UOtY3pdRdhB6gigQVWKsiiu6XMaTg7BDhdAlZhisssRsG919KaQgG7T7mI548ssmVoLaiY3BJAeSBn/vq5fYRkHoZQYaolH7g+iGhyA= 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 1782934591496816.6843045205176; Wed, 1 Jul 2026 12:36:31 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350740.1608250 (Exim 4.92) (envelope-from ) id 1wf0jB-00056V-Lu; Wed, 01 Jul 2026 19:36:09 +0000 Received: by outflank-mailman (output) from mailman id 1350740.1608250; Wed, 01 Jul 2026 19:36:09 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wf0jB-00056J-HW; Wed, 01 Jul 2026 19:36:09 +0000 Received: by outflank-mailman (input) for mailman id 1350740; Wed, 01 Jul 2026 19:36:08 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3b2tFagYKCbQmYUhdWaiiafY.WigrYh-XYpYffcmnm.rYhjlidYWn.ila@flex--seanjc.bounces.google.com>) id 1wf0jA-000535-D5 for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:36:08 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0j9-00Bwbb-QG for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:36:07 +0200 Received: from [10.42.69.5] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3b2tFagYKCbQmYUhdWaiiafY.WigrYh-XYpYffcmnm.rYhjlidYWn.ila@flex--seanjc.bounces.google.com>) id 6a456c14-5cb7-0a2a0a5109dd-0a2a4505baa4-32 for ; Wed, 01 Jul 2026 21:36:07 +0200 Received: from [209.85.216.74] (helo=mail-pj1-f74.google.com) by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3b2tFagYKCbQmYUhdWaiiafY.WigrYh-XYpYffcmnm.rYhjlidYWn.ila@flex--seanjc.bounces.google.com>) id 6a456b70-3cb2-0a2a45050019-d155d84ae8e7-3 for ; Wed, 01 Jul 2026 21:33:05 +0200 Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-37fccad2b01so1710983a91.2 for ; Wed, 01 Jul 2026 12:33:04 -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="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=1782934383; x=1783539183; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=YK2zVmNLEJoBEawF7PlPSBbbkhRpzdy0apLvLWVt+lo=; b=GfPMSMmuPk3zh8O5e84EIZ6P/vKNB7Eyzg2O/pzTKiZJ5+ulRzUqGZa/OLYHl7XdB5 EKZ7abIj+8dtJJ2qh98qtNXdClw+ERNQLjGUi7NIeqikuiYmznNKa0WkypvEbWKYhq++ r2a9s75lRvNwb7YwVHyvlq44LpvZ7GKKKdHCsr49c21xXvJm16E6wTt9Zh9ogft4ty4I ItJov+7e1/dYoO1A+M3nbuz5ONeWGQt/aQscE1TRPDlZnKBOdO5SnWmCQtTmGLLsgxeJ ozpyJCFJLQ99ybhoiGWHRpxH6sckAF5WHfViZfxFcsxmtTZNBYWMUwWBetNA0zBjSBqY x54Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934383; x=1783539183; h=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; bh=YK2zVmNLEJoBEawF7PlPSBbbkhRpzdy0apLvLWVt+lo=; b=WSAcXYIeSdEVYhKY+uGGhocrUuqskQIvJn07RYO/mdBIFyEJmDezVGHx72l/g+k+/c FDHE+nTSShGSkh4Chh9Dn+OSYBPeoLoypoctrDe1baZQrmqiZz/WkFvc0Jz0thWr//oI pZjHpT8KbWW6VQNFTOros/vRsURHEksg3AGYBdUEhBZ4F8QUZbp/u14M0d1GI9fA0Drd OMHtFwdLcH9YElQtTxDZGLR/41PaiX0iCC/qEBmACwZNY8ulcRbJc7Qz4OVRDHieIQCV MATnlQh5hlABEtZONO+LHQlSrrjIs+/4DDfZOFUWo9xMdp1LmIHfOq+i9mizpcVfES48 Bh+g== X-Forwarded-Encrypted: i=1; AFNElJ9HhiwmbRhvuJUlzwLs8YKy2CJPOcDVSWMOcaIhTVBjGo3qYB98CVA/VwZdl8horqq25gwPfhv9AZ4=@lists.xenproject.org X-Gm-Message-State: AOJu0YyeSCV+jVNKfLKoJqTOfSCQHcX552R3klRFWmTBt5zh7msYKhgb kkLwbrPq+la3pNSZNZWJRjmfGh+49J0lFdnP994tHKsIrgO1ah8+SaEetcavxImj8fMtO9z8/Ou SN0Y3Qg== X-Received: from pgwa6.prod.google.com ([2002:a65:6546:0:b0:c99:cbb4:1dcb]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:a11b:b0:3b2:924c:567d with SMTP id adf61e73a8af0-3bff42bedd3mr2415279637.46.1782934383031; Wed, 01 Jul 2026 12:33:03 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:50 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-30-seanjc@google.com> Subject: [PATCH v5 29/51] x86/kvm: Don't disable kvmclock on BSP in syscore_suspend() From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-c201ff/1782934385-169102B8-DC817DCC/13/0 X-purgate-type: clean X-purgate-size: 5417 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934593461158500 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 6c7011ff7bd1..604b52f233aa 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) @@ -726,7 +727,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; } @@ -737,7 +738,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)) @@ -768,7 +769,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, @@ -792,7 +793,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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934461; cv=none; d=zohomail.com; s=zohoarc; b=E66kgEIu4QZBHv16tM9VZFANtsyL6fyibpVfYIw+yZoRXaZa9FDMtOdXUIkjtp6FuIm0kplgMXmqrE5B15CD3SM/rfnWPw9wdIJq2qb3qXPnpdONyMiq/LJ4EjcznsSlbP8UB+Zxw4wTStqwHVOKUvuXaDmidl0Q/tpUCNdNPlI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934461; 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=FLdcwKjpeRYfRUJ5L0VC2fjzpWNaPddOoI275jwJM8U=; b=diPIkXs9pcpdmkBINMD6sYtcxzBX8Q3sKJQO0VE5OfSQ+CuS/0KawM/cEHlM3/lIO02Umr3A8DO+9heL9OVe6/Mr83OnZS5asVnAzlb7QgGeSkEURx4ik2frWKwaGMdGistrryw82ea+LCDxWaxbPClzBVllby1A+EvvGNgY5bU= 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 1782934461637444.6950318902328; Wed, 1 Jul 2026 12:34:21 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350557.1608087 (Exim 4.92) (envelope-from ) id 1wf0hE-0003Y0-MZ; Wed, 01 Jul 2026 19:34:08 +0000 Received: by outflank-mailman (output) from mailman id 1350557.1608087; Wed, 01 Jul 2026 19:34:08 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wf0hE-0003Xq-IM; Wed, 01 Jul 2026 19:34:08 +0000 Received: by outflank-mailman (input) for mailman id 1350557; Wed, 01 Jul 2026 19:34:07 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3cGtFagYKCbUnZVieXbjjbgZ.XjhsZi-YZqZggdnon.sZikmjeZXo.jmb@flex--seanjc.bounces.google.com>) id 1wf0hD-0003ST-9u for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:34:07 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0hC-003oMF-N4 for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:34:06 +0200 Received: from [10.42.69.6] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3cGtFagYKCbUnZVieXbjjbgZ.XjhsZi-YZqZggdnon.sZikmjeZXo.jmb@flex--seanjc.bounces.google.com>) id 6a456b8a-2eae-0a2a0a5409dd-0a2a4506ddcc-30 for ; Wed, 01 Jul 2026 21:34:06 +0200 Received: from [209.85.214.201] (helo=mail-pl1-f201.google.com) by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3cGtFagYKCbUnZVieXbjjbgZ.XjhsZi-YZqZggdnon.sZikmjeZXo.jmb@flex--seanjc.bounces.google.com>) id 6a456b71-08de-0a2a45060019-d155d6c9e039-3 for ; Wed, 01 Jul 2026 21:33:06 +0200 Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2c9e9cb6a44so8480265ad.2 for ; Wed, 01 Jul 2026 12:33:06 -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="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=1782934384; x=1783539184; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=FLdcwKjpeRYfRUJ5L0VC2fjzpWNaPddOoI275jwJM8U=; b=LpaxJwt01QnGB9s/FJttE5dmx825dvyOlzYnjhqm7jCNYW5a6JqneWgmIhY6lIs+mw En9N/ho0rTu1mCeoLIh6EVe81vK9ZP0BAFHhhnyfJm+QuBCBmUL9+e8PkklvzmUH5Ado OnAP2KcuxKkAwF5WYx4aLSvL24/fHepkF+YMTIwWi3snl8fxSu2qSgaIhfcG9RATNZq8 7GkjOwKe523lGqG8FbceEGTjrF9uL65tlldyLQd4wESF5twQB28KT9l5ptAoDKrfG7K1 mCLdlOY2H1waicOx519ewlvk5xHWtt/O3hKkk02CLKbXmY6z9ww+L5YYX2hSEVGjPJ9K yIVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934384; x=1783539184; h=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; bh=FLdcwKjpeRYfRUJ5L0VC2fjzpWNaPddOoI275jwJM8U=; b=Ma3K6fZ6NDJdxinc7WMywPMdeSvTxfdqtsBpokX/vNojCf1RtDR6rTz2lJ1WVnwEwS iaqM5hjFwNhjaLCD7WGMgi617X12Owj6KZDBXSb7BrvO1owBvfEVvRbXUIQxoCFCMSuR V5wBIX0IyVtu2fY+nMg/mMF/y1Fa771cyEnTpNJ4gOzpzHcoNZXE00tsdfm+AnUYQ126 t3l2IW9VoaYEx6bp4mBg1PBhZ0vx8EkUs+fT1fk1DtHuPmzKPISdFSe2aDNuQOJvvWOq phH+3RZQCkP+r+ozpAdIwlQq9bkbS4U36F2/tS0MenzFHBWUrHiVzdgHNYpQ4Adsn5yD 8g+Q== X-Forwarded-Encrypted: i=1; AHgh+Rqk52QtUw7XaYbupYmTvkiBzg7oWdr+10ToXR1SviLJBMTUsPodKZXtHPByVVwWLG2oPZDpADy0aXA=@lists.xenproject.org X-Gm-Message-State: AOJu0YxeRis6UYlxY1J3g4SL/qULo0lsEf+CZpW6rU5r2J0nUvlNpzqW 8wRzDLRlYEZ2JJT8vmBb3HqCJrUNv0N520nMYaA6bEqrgb7lmOb193ARuiEbQrNOCCIOb0IbG/N A69+KLg== X-Received: from plsq11.prod.google.com ([2002:a17:902:bd8b:b0:2c9:dc0d:6834]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:f551:b0:2bf:7b62:a038 with SMTP id d9443c01a7336-2ca9112b126mr20357335ad.9.1782934384220; Wed, 01 Jul 2026 12:33:04 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:51 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-31-seanjc@google.com> Subject: [PATCH v5 30/51] x86/paravirt: Remove unnecessary PARAVIRT=n stub for paravirt_set_sched_clock() From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-16d1c6/1782934386-C732668D-EC08C5D9/13/0 X-purgate-type: clean X-purgate-size: 1574 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934462583158500 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 56e73e96920a..375b0279df66 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934476; cv=none; d=zohomail.com; s=zohoarc; b=fA4/QqEYTshBhToqqEPKU9LNkntzjYVTYrwF1x22eVRXXsfC8rMgYJaDx6t4YHrU0l9A0fN4YwfuCmPMtb3ovr4TKYBdSV7/sqEG47bxSP7wgE4WSh1W1wkFT2Uk86dAxXOfiKAXwPcb/Jve3sECAf1Mk78lxep/z7ZEWObKPiQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934476; 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=E6ig/L0f6Bi8iYQ5fSK4jpuHUho56x4PQqpcZJJeUg4=; b=SZdcts1yptCsCAllTsWzf612UjBYjKdKoqNrU/D8DbCY/prJvfVNHkCQQKEoLvoberBxWC0YWJeRSgUwFAhT3PBy/y0mXT/CY0rxdgkEZIEfEi0ofcGxrQ1We3I+fOEJOrjAwzVxeXL95eyoVLM7fePR656Dk0GVx3+aODipWEo= 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 17829344763020.5840341440271004; Wed, 1 Jul 2026 12:34:36 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350559.1608096 (Exim 4.92) (envelope-from ) id 1wf0hG-0003qx-Bs; Wed, 01 Jul 2026 19:34:10 +0000 Received: by outflank-mailman (output) from mailman id 1350559.1608096; Wed, 01 Jul 2026 19:34:10 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wf0hG-0003po-5l; Wed, 01 Jul 2026 19:34:10 +0000 Received: by outflank-mailman (input) for mailman id 1350559; Wed, 01 Jul 2026 19:34:08 +0000 Received: from mx.expurgate.net ([195.190.135.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3cWtFagYKCbYoaWjfYckkcha.Ykitaj-Zarahheopo.tajlnkfaYp.knc@flex--seanjc.bounces.google.com>) id 1wf0hE-0003WA-GG for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:34:08 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0hD-00BqTu-TS for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:34:07 +0200 Received: from [10.42.69.11] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3cWtFagYKCbYoaWjfYckkcha.Ykitaj-Zarahheopo.tajlnkfaYp.knc@flex--seanjc.bounces.google.com>) id 6a456b8d-bab6-0a2a0a5309dd-0a2a450b89ee-34 for ; Wed, 01 Jul 2026 21:34:07 +0200 Received: from [209.85.214.201] (helo=mail-pl1-f201.google.com) by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3cWtFagYKCbYoaWjfYckkcha.Ykitaj-Zarahheopo.tajlnkfaYp.knc@flex--seanjc.bounces.google.com>) id 6a456b72-ac48-0a2a450b0019-d155d6c9e4d6-3 for ; Wed, 01 Jul 2026 21:33:07 +0200 Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2c81c7421abso19964455ad.0 for ; Wed, 01 Jul 2026 12:33:07 -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="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=1782934386; x=1783539186; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=E6ig/L0f6Bi8iYQ5fSK4jpuHUho56x4PQqpcZJJeUg4=; b=k6si1nXEP9jsax29d2Ai1DzSnZ1UEnEv9lA0DySdekTMnbxH3lXtKcN94ls48mbuwp dDT37+rzjj8M0AD4U7S08OPDZfkQ6YFjvd7WV4hmMy3Y+8JSFlVqFqJ6kjgq0ysdvWP0 bjxZvCIDZC066TP7K//HtwE3eJXerHg24iFc+FJr4LZqAGncglB9OCYuzPHZ/VCHYlpE nkVMQOzEN/no9grl31LFMTLf8y+20LMJVWLWuTaJ8rppIL8iWg1VnP/SXh3WiclDUGaf eaXL9jA/uGJvMHJVx3aaoNtKL5DWdMWNwTMHOSG9hxddsqaA6tClbOTqh00FRuXqfxrZ H19g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934386; x=1783539186; h=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; bh=E6ig/L0f6Bi8iYQ5fSK4jpuHUho56x4PQqpcZJJeUg4=; b=ZKrnDZp9gV724NqNspv2N0UAwSZhL/sVDmpFBNnSANh+1dG39d/sHKtBsBQER7rkhH PZZ6OoA6RI6luS1qjflDa5GnwJ7j90ARY3eM3JsVmpBQzF9hO41Yl7y99A/QL4FhlSxD l4B+RCtkobOtEsuJJg8JfeASxZAsxIG/Gbutak8z1u1fVawVHhNo0CItuqDnUoBFtToM M4TZXSeM2jV9bYYqldYk40il4ssftnxI2UBBi6bq7yrHLj3ybheAE+CGTWj6dk8waxES o3FgNH1Xd5sz+kyLnetnEJfsPMUKEiGE3/qWpalUiejyGYW5VMdorixDdahj5T+pWMSL oW+A== X-Forwarded-Encrypted: i=1; AHgh+RrquGFB+Q8e3cM9oVqB7+W4o1xIsNRRuO7KPEUEgP2ztQTS9+d8EXWZ7Lh2Lmes3tsf1aB6z+TRz5w=@lists.xenproject.org X-Gm-Message-State: AOJu0YymyOF5vXAivBOmblT5dMuWvbUQwo4j+izQs4jVYxpUlHVvKvQn JNhpK/1UEpaWbRIBybkapQiEDwtQQWCm4bPuezKsGRADILwCCiZest5A83RibYCzwHvos2KvCDM 1BIcTWg== X-Received: from plbmt13.prod.google.com ([2002:a17:903:b0d:b0:2c6:b7bd:4804]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1acb:b0:2c9:c54a:7915 with SMTP id d9443c01a7336-2ca91140306mr23508775ad.14.1782934385462; Wed, 01 Jul 2026 12:33:05 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:52 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-32-seanjc@google.com> Subject: [PATCH v5 31/51] x86/paravirt: Move handling of unstable PV clocks into paravirt_set_sched_clock() From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-42698a/1782934387-A6B38220-66DF81F0/13/0 X-purgate-type: clean X-purgate-size: 2573 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934476674158500 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 375b0279df66..a762cb5cec0f 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934596; cv=none; d=zohomail.com; s=zohoarc; b=UGxwz9noPDx5VtESii4qm1XePMLwwrvNb9c30IJgTKKlBGUO1rt4BKdooAdzLSvvO61dg4QQWSdiB//0n5FFPf26K1lOPQrFT+wCQ1l+2cQSep7fY1AFMMl7W5HKZl+A3CcEe7YGH6KWZyHHMjHQYKiKfBdTl8rfrykvUETCqWU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934596; 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=p58sqQbLovUVGNo0nSS6BNMoKcJfer5lPY7RvPBWYyU=; b=gjAFkrsYs8+jRXl8zf/A6U2CeNRM5RSI5XcS7POczFS4Ik/oJBp+1xY+CJ7Zn1GFlp2acOK3jOOKs6UE/R7QTGAiEzHJS580JQNCN+GWxauqHF9H+j7GGq5fM1/iFzUe700DcP6XE1Y1JQnku87m7c0ZNJ3APDHgwJkALZXvpeo= 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 1782934596898206.670074741568; Wed, 1 Jul 2026 12:36:36 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350741.1608258 (Exim 4.92) (envelope-from ) id 1wf0jD-0005Le-TS; Wed, 01 Jul 2026 19:36:11 +0000 Received: by outflank-mailman (output) from mailman id 1350741.1608258; Wed, 01 Jul 2026 19:36:11 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wf0jD-0005LU-Pq; Wed, 01 Jul 2026 19:36:11 +0000 Received: by outflank-mailman (input) for mailman id 1350741; Wed, 01 Jul 2026 19:36:09 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3cmtFagYKCbcpbXkgZdlldib.Zljubk-absbiifpqp.ubkmolgbZq.lod@flex--seanjc.bounces.google.com>) id 1wf0jB-00056Q-ON for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:36:09 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0jB-00Bwg5-55 for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:36:09 +0200 Received: from [10.42.69.6] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3cmtFagYKCbcpbXkgZdlldib.Zljubk-absbiifpqp.ubkmolgbZq.lod@flex--seanjc.bounces.google.com>) id 6a456c00-5cb7-0a2a0a5109dd-0a2a4506ae74-46 for ; Wed, 01 Jul 2026 21:36:09 +0200 Received: from [209.85.216.73] (helo=mail-pj1-f73.google.com) by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3cmtFagYKCbcpbXkgZdlldib.Zljubk-absbiifpqp.ubkmolgbZq.lod@flex--seanjc.bounces.google.com>) id 6a456b73-08de-0a2a45060019-d155d849b446-3 for ; Wed, 01 Jul 2026 21:33:08 +0200 Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-37e17ec1940so1079273a91.0 for ; Wed, 01 Jul 2026 12:33:08 -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="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=1782934387; x=1783539187; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=p58sqQbLovUVGNo0nSS6BNMoKcJfer5lPY7RvPBWYyU=; b=m7SSsnLTPrJAscY4pqjevoFfCkG+XkGqrfdH4EEeyG89fXJ4xxX0lArZTmkaZWrXIk CceEHqNV5rNv02FHxTS6FyVtiYny8dKN95OKZJ3JjcQhHz13NIjTBb0zuJpeKE+9O2Nf B7eM3nL4NQA9cUFYOjf769Zaeit+s/GciIJJFfvUc0yewjEdWwlMBs16xBf2PzE7xQ0L me4tvfvenUUIyMptj9ozuqEsomvcQeRZoJzjsJc8Q7pxjXOMN6G8wV+d+1HK0EN9NT4z Nv5MWuVIsNFnihDxH94OxTBG6VG+b081QpUVPnmYNG4hAUg7U5dZ7122U/RzF+BXWwpl o0wQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934387; x=1783539187; h=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; bh=p58sqQbLovUVGNo0nSS6BNMoKcJfer5lPY7RvPBWYyU=; b=ioiPhuWx4Y/xs95aa7GFaJpm0448Su7u0Eew3FsDscx3xcBT5ScFpPslKLgQqJ62S0 JHVtCTS8Oh93aghz1Kudk3v12QGQ3XtXm9oo1e4+W/s8o6sbl9gsKGC1kr0hLeKdXi6J 5CVVVQA11LnQrYxrQ9xl+2fmYnnm3RW/M1xMR5WjG0djYnqKqHWV5zvIVvPwJjVJ43ne J/fU8fvC1HEgQ4+jKR3MBbsg1EDLtIMjMVhPz0xjjq3xgZI93CL4sViwpv9uWWHibql6 U5w0PbtpflCFEGw6RLx6363T1AywWkOG1zbaB6OD6reSqJ1ing2IrtRltsRgYjKW3eQg kBRg== X-Forwarded-Encrypted: i=1; AHgh+RoVc8bTGChRrZIlltlGX3j9rv8SZZ+A9YuFBGfuIEsBtq9r116eRMlPG/ZjxqhlbgJBDORtV3B0c8U=@lists.xenproject.org X-Gm-Message-State: AOJu0YxvFDEP7M5W0bZK4WgCR2qb98/P2X6DXidhSZ69mci3qwJr/buv EcqJl48rkdpBX1YJhtbF9l7CX05861gGsChYV9WKW8xBgy3bp29jWPZ0xcsaibjca9d4UVuxJ8l gax467Q== X-Received: from pjbco22.prod.google.com ([2002:a17:90a:fe96:b0:36b:7f07:6fcd]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:5823:b0:366:3517:1aa2 with SMTP id 98e67ed59e1d1-380a9e519bdmr3237404a91.0.1782934386500; Wed, 01 Jul 2026 12:33:06 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:53 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-33-seanjc@google.com> Subject: [PATCH v5 32/51] x86/kvmclock: Move sched_clock save/restore helpers up in kvmclock.c From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-16d1c6/1782934388-C5D3D68D-D4C08C89/13/0 X-purgate-type: clean X-purgate-size: 4424 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934597546158500 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934543; cv=none; d=zohomail.com; s=zohoarc; b=ARC2jMMU2RSNxnf4U+u9Cj2VOsLstqVtEcr1Pp9nhtjox5qArFHo0ErJWgvhquYHPDcakArh2cbTPOp3itVZAxG9f/3VmNBK6LsCiigOyHKlnO5392HPVijEfzpjlTXK6TRgyNHstCG1/1WCvZbPxmVRvU/emRzQZpp/CWLIs9k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934543; 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=qFfbhUmYyCU6tRW/uev50JnnPJRuq59CtmTnO4qaTps=; b=c4l2JGj8N9zJNHD1wIj8rCd87qSRnf5AwGfAGBKHV0OReAcWiYI2lGa5VlbZRiyPlozn1pRQIDZu8E9Z091yhL3M7JzoGrb81ynh+v9+lHk5phStTCceNbkf4W5ddZfaS32017iswGyOSOvEMwGY72j6dZQ4aSe5XfwyEMHwl78= 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 1782934543897551.4931831563617; Wed, 1 Jul 2026 12:35:43 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350651.1608150 (Exim 4.92) (envelope-from ) id 1wf0iF-0007yl-BT; Wed, 01 Jul 2026 19:35:11 +0000 Received: by outflank-mailman (output) from mailman id 1350651.1608150; Wed, 01 Jul 2026 19:35:11 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wf0iF-0007yc-8n; Wed, 01 Jul 2026 19:35:11 +0000 Received: by outflank-mailman (input) for mailman id 1350651; Wed, 01 Jul 2026 19:35:10 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3c2tFagYKCbgqcYlhaemmejc.amkvcl-bctcjjgqrq.vclnpmhcar.mpe@flex--seanjc.bounces.google.com>) id 1wf0iE-0007yG-Mf for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:35:10 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0iE-00BwWE-3I for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:35:10 +0200 Received: from [10.42.69.9] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3c2tFagYKCbgqcYlhaemmejc.amkvcl-bctcjjgqrq.vclnpmhcar.mpe@flex--seanjc.bounces.google.com>) id 6a456be5-5cb7-0a2a0a5109dd-0a2a4509a272-8 for ; Wed, 01 Jul 2026 21:35:10 +0200 Received: from [209.85.210.202] (helo=mail-pf1-f202.google.com) by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3c2tFagYKCbgqcYlhaemmejc.amkvcl-bctcjjgqrq.vclnpmhcar.mpe@flex--seanjc.bounces.google.com>) id 6a456b74-97e6-0a2a45090019-d155d2cae192-3 for ; Wed, 01 Jul 2026 21:33:09 +0200 Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-8423f544944so787918b3a.3 for ; Wed, 01 Jul 2026 12:33:09 -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="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=1782934388; x=1783539188; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=qFfbhUmYyCU6tRW/uev50JnnPJRuq59CtmTnO4qaTps=; b=AxzzU/WWBFxM1ih4hQFfuPffcBmt54/E4Kri07Z6dfJKSxnSX+PHuSwRkaGbNDkoe+ d582W/KvOKR4aBCwT0fXAySLmEgSilaZx6pXyZBUBFGthUTmPVIQQb+X7tWsd1B7Wpuk wcTi+rD1R2ZgAAOzcujS6adKUVZc9GRRTQ8rDbmaRFapTcNi73hthu58AY9HLVjSg/YF eXb+luqEa0sBliPLHhY6tcamIWAcEJnCwV8cnt4MiIInlIM0Kkuy+Zf4DF30Co/73E1v RxwwLNaqDwP6QSwHlpm2FFIu0tfGJMIcSPIoxCsJNt/cNW8Or0Bke6UXs1fKlrjozu0W hpGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934388; x=1783539188; h=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; bh=qFfbhUmYyCU6tRW/uev50JnnPJRuq59CtmTnO4qaTps=; b=ZbklHBViHJf7CrpuJhfV26iz2sGbSIL9N4VOG4qtdNVDkDESp0xfTiYMu5zKCJmdfT 6uAczrwWFdGUoLPw+Zun8WPROnLSVfcionVqO65QlcFNXMoisah0snJIGx78Nr6pm2ey e3EYriSyEsN6jIWRDSfEvQcg0j4GLH0LdAUIIiQEnoAHK/aEjdgn8aKQPbpmL1XlHneh sc/xC6bYoj+4zcQOK4Mth0jXExe1DSmCX9UxUFRy9DSrGkY59a5Q8eMDUFwtbdQ5QpEz JaKAAoTJ8/keaf0dTN3jOdAW1QJUZnKY2+2pri4lLqMdK6eL5mrsR4YYoliUeainMYGa WYew== X-Forwarded-Encrypted: i=1; AFNElJ9BBYIMutAaDQPt5oDZFqvKAKCfpX/JVjs9zn7/qSrH3VvaYV8uMR/2VVMpiPi5qw2QLxNXJ6D8xjk=@lists.xenproject.org X-Gm-Message-State: AOJu0YybiqK6h1ASpIcR0VBRfL8fzqCpAjmi94GDKBaWUnnbllmZhH3Q nWRxAQkEAoarPKVoznk8z+/EjjrQnQg0Ks0jOI45OUbVSXvwb5M51JoMZWr0eOCY92EswNi+McD +lntN2g== X-Received: from pfvx7.prod.google.com ([2002:a05:6a00:2707:b0:847:8f34:1b76]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:8f0a:b0:847:86d8:5937 with SMTP id d2e1a72fcca58-847c51e4a35mr1955201b3a.50.1782934387701; Wed, 01 Jul 2026 12:33:07 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:54 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-34-seanjc@google.com> Subject: [PATCH v5 33/51] x86/xen/time: NOP-ify x86_platform's sched_clock save/restore hooks From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-bad1c0/1782934390-46739986-C55DB5E4/13/0 X-purgate-type: clean X-purgate-size: 1157 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934545148158500 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934533; cv=none; d=zohomail.com; s=zohoarc; b=lnuy8wSzFFnFSU+Fk/l6whCQ0GH3KsKiPy65EAFAntwY+EakW3vrntMwJv9aD2lgszYmQSBDWZ3mIraEBbgVAnGFiLvRg2XkXwNXJu7rE7/yfFkSbJwAsMlZFiYUbxVGmqY+F6qZoog5NM9FolWKZXc7TzhTBqXFUBXdHr+Tklo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934533; 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=Vvd9sO5KFA4UCvVy/DPb0p6l2OFovCFuh6GrZNkoHew=; b=R5uWOCaeYYrvXTMPa7RktZUa1sBHbjMYsRBtQomm8duyTxT94i7omfBxNK6DbmZM3ZiniWId4fZWR5cDRfkVy9JcR7f6cE/a79Rw+gDoqRdKqLZqQAi6N3veX/vS7n8sH/gWmD1ld0F84VGL4RotJM8EbIvZ2rFO6LnG4AXpN4U= 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 1782934533909247.5505888906107; Wed, 1 Jul 2026 12:35:33 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350652.1608159 (Exim 4.92) (envelope-from ) id 1wf0iH-0008DK-JB; Wed, 01 Jul 2026 19:35:13 +0000 Received: by outflank-mailman (output) from mailman id 1350652.1608159; Wed, 01 Jul 2026 19:35:13 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wf0iH-0008D6-GF; Wed, 01 Jul 2026 19:35:13 +0000 Received: by outflank-mailman (input) for mailman id 1350652; Wed, 01 Jul 2026 19:35:12 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3dGtFagYKCbkrdZmibfnnfkd.bnlwdm-cdudkkhrsr.wdmoqnidbs.nqf@flex--seanjc.bounces.google.com>) id 1wf0iG-000852-7J for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:35:12 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0iF-003oQR-9c for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:35:11 +0200 Received: from [10.42.69.10] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3dGtFagYKCbkrdZmibfnnfkd.bnlwdm-cdudkkhrsr.wdmoqnidbs.nqf@flex--seanjc.bounces.google.com>) id 6a456bbc-2eae-0a2a0a5409dd-0a2a450aa144-36 for ; Wed, 01 Jul 2026 21:35:11 +0200 Received: from [209.85.214.202] (helo=mail-pl1-f202.google.com) by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3dGtFagYKCbkrdZmibfnnfkd.bnlwdm-cdudkkhrsr.wdmoqnidbs.nqf@flex--seanjc.bounces.google.com>) id 6a456b75-e40e-0a2a450a0019-d155d6cac1a5-3 for ; Wed, 01 Jul 2026 21:33:10 +0200 Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2c7cfa17fe6so22393605ad.3 for ; Wed, 01 Jul 2026 12:33:10 -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="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=1782934389; x=1783539189; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=Vvd9sO5KFA4UCvVy/DPb0p6l2OFovCFuh6GrZNkoHew=; b=rUW7+yPq06Rfq50laibByGCSRLoDu4D+V1JdWI1Xom3I5MCiPrF7SoS7xKDu5oSAg7 Og51WatP2oTdd6MGmQc3dJYfUA3Kb1IXbYXmiGmxjDhK3xyQNmn8lx0jPlr8vy39jG6U t0S9xF0RZcHAT04hMjiKvJLSGls16OVqVEOu3IiMf89HgPGqYzE/q4Xu58Vp+l3aa0mN 4Ysm2ffoQCZyZ89hh9lvrzc7Moqt/8LCiABHquzMnmQ/v1Ao1eDKrX7iUVYeuuI7RdQJ cCZntdhi534BHDMOtr/nvbqR+FJdmG2svOWlOISOhz+rckpUE0MQMckPvl8Qc1/mGjVo nrJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934389; x=1783539189; h=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; bh=Vvd9sO5KFA4UCvVy/DPb0p6l2OFovCFuh6GrZNkoHew=; b=jjOKiEV5nX9oY6SFr88X7X1dUp1+ikoUEXQFcMp9uC9wdNBCnqLuoVttfu9qFvTX6l gRRj26a/QYED1V6uvejNoOWTCnRgMkv8Ait8v9XoSZkJ8BLAdjj8OFWgcWSYb28OydQc 7sFup02+EkSZN9pUraDRdKaJw5Er0qUQwQg6L6uJJsbRdOFVaCvvQkjbihWww6Zeoi0a tLluppF6eMWv4mmIDbVDiQKiltF0xzbLNE1QoyIuepVJyPDv1HM5dPqC0dh8vNaiNbDn OFvkeu3k2N1F8tjLAB84nWel/O5tXs+jQhg03D/yfk3fBHG/F5z3jfVl5yhrz45g7Xqu N7cw== X-Forwarded-Encrypted: i=1; AFNElJ/XdURVaByPF805H7kvNMDjghfhvxs65LHN+hTg57fZVUthHyiISwxy0/cXQ4IaC2crzmxdS4SmM9o=@lists.xenproject.org X-Gm-Message-State: AOJu0YzNAxJ+rzmDS3fJ4ePsUTiPiu2S3rHkw591TI+9+IZl3X9rlP3R DXovz1VmqlInnoauLuOJdwpW2+mpnJBp2m82nTJrkFxMeXSws3Rmvm0DD5fjvRTJXlt74lhUtRC GtgBbKg== X-Received: from plho13.prod.google.com ([2002:a17:903:23cd:b0:2bf:1274:c8f]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:41c7:b0:2c9:c46b:129b with SMTP id d9443c01a7336-2ca7e67c028mr32017335ad.5.1782934388785; Wed, 01 Jul 2026 12:33:08 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:55 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-35-seanjc@google.com> Subject: [PATCH v5 34/51] x86/vmware: NOP-ify save/restore hooks when using VMware's sched_clock From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-4011c0/1782934391-3DA71DDE-5ECD9829/13/0 X-purgate-type: clean X-purgate-size: 1267 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934535147158500 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 0a3bd90576d4..5c1ccaf4a25e 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934546; cv=none; d=zohomail.com; s=zohoarc; b=RMknG6Nk8nOQtbCjjiMPbeoJi/4AouQ4bCQd+K8AFlU3ONZgEfKCBvLRc+lyyR//vOUj6y8KvcVrickoClH1ajR469F9+IXhsLPbbDTmXtdD8c91x0hBRjYrW6l4XPQ1xtdxTJ60e6BZS3fhuVvlQJW5pdZpWZE3+RK6ylrhQv4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934546; 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=bEdSCU5mjiDv3GADlP0fC3hWLpC5/Jr71iPsXhxCK9Y=; b=HjCDKoocxrnZkqE1WAU96t3fyB6hw7kDaYwbnw2fIUag8/pp++HDkwchbgNz9grlL+QRVykcJpgpwqvRnQinttC3l5kgO84lR9qS84OTWhF6NMBr5j89b9c9SNqY1QWbk6HNIXANNP+d1olnYbkTh7H4Ks5BPncdAD05uvn3JTA= 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 1782934546411408.5776261673276; Wed, 1 Jul 2026 12:35:46 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350654.1608168 (Exim 4.92) (envelope-from ) id 1wf0iJ-0008SC-3S; Wed, 01 Jul 2026 19:35:15 +0000 Received: by outflank-mailman (output) from mailman id 1350654.1608168; Wed, 01 Jul 2026 19:35:15 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wf0iI-0008Rq-Si; Wed, 01 Jul 2026 19:35:14 +0000 Received: by outflank-mailman (input) for mailman id 1350654; Wed, 01 Jul 2026 19:35:13 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3dWtFagYKCboxjfsohlttlqj.htr2js-ij0jqqnxyx.2jsuwtojhy.twl@flex--seanjc.bounces.google.com>) id 1wf0iG-0008CK-Vb for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:35:12 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0iG-00BwWE-CE for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:35:12 +0200 Received: from [10.42.69.9] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3dWtFagYKCboxjfsohlttlqj.htr2js-ij0jqqnxyx.2jsuwtojhy.twl@flex--seanjc.bounces.google.com>) id 6a456be5-5cb7-0a2a0a5109dd-0a2a4509a272-10 for ; Wed, 01 Jul 2026 21:35:12 +0200 Received: from [209.85.210.201] (helo=mail-pf1-f201.google.com) by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3dWtFagYKCboxjfsohlttlqj.htr2js-ij0jqqnxyx.2jsuwtojhy.twl@flex--seanjc.bounces.google.com>) id 6a456b76-97e6-0a2a45090019-d155d2c9cc4a-3 for ; Wed, 01 Jul 2026 21:33:12 +0200 Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-847a90cc5e2so1365548b3a.0 for ; Wed, 01 Jul 2026 12:33:11 -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="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=1782934390; x=1783539190; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=bEdSCU5mjiDv3GADlP0fC3hWLpC5/Jr71iPsXhxCK9Y=; b=wdevGvroHRkQ3LBPn8LO/8Q4/dbwUPa0fQHgC2hH4FLtVNFDnb9Ni99iX3z0t+mE3D qOjR17AqEyBxoqluFq6vG86t20Q06VpufcJ8psHLRCPjhOzO1VW9yCKfDGgDoH7cL2gu iX1DSW2gUu4J1cmCj7jFKRaQ4POpvv/Te6N6qO4IL03uDsedlCQMyUBZvQy0BFAkjIAT MoAG/S4oH/1gqw6RzaPXaZi7VQ04qblXZiFVV6I8BM7zgRAOxrFeDxlAYHAros/0tnsx QbPsr4vR4nsVJ/t+mBu9Khh+BirGE55G6zjjdF5i4gaWy20bEj8cKYH+fHC4ICUiVi0L H1Vg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934390; x=1783539190; h=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; bh=bEdSCU5mjiDv3GADlP0fC3hWLpC5/Jr71iPsXhxCK9Y=; b=MjB2iEASi6y3yprTDdo3iVEoD2PBItiezdrbIBmi1/DHgDkpsgrS7T3UA43/ENSQjv buO9fI1eyVX+nn0vVv28b56Di87lkf3ue58dC1nuCrw/z+uPuHDtfewv5xS7aEXbberU pCw1NSmEE9EtkdqTPh5qKVlJUpG4Pzu0bDTo3DwjWz2ZCLaO+iEciEDI7vWYUAtJqe1p HF/rClvzmboeqjUZfRchgBU88xSilL6tmqLLUDgxh3yJ627LMAFareFekKrR9gXjFAmt 9JgvIYgrEWeXVAtVhXBN7ejQB0S8QMp4h+Be6li/f34tjWRdizUMZ5yKzOaQT9awNSoL 65kw== X-Forwarded-Encrypted: i=1; AFNElJ9cCcgdlP19wYcydxmaFh88YIjaH3iij11dB49BLUEVTmv1ACuyfvdnbrjiBFuldLV5SbxB/AJ5wAM=@lists.xenproject.org X-Gm-Message-State: AOJu0YwlZXA2GV+Y7BPHtjSKsM3A2GaH0k3oqcVex5ftn48b28Zy8SiG gacIfXjZKlET5KwXOfkqEsN2m6q2ZQev+eqDmSb/g/9iafnCEQKqrmgWYYVWeGACJS01DbRhR3L LsPJu4g== X-Received: from pgh6.prod.google.com ([2002:a05:6a02:4e06:b0:c8b:19f4:6228]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:4320:b0:3bf:6c08:fb88 with SMTP id adf61e73a8af0-3bfed4b9441mr3531733637.56.1782934389876; Wed, 01 Jul 2026 12:33:09 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:56 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-36-seanjc@google.com> Subject: [PATCH v5 35/51] x86/tsc: WARN if TSC sched_clock save/restore used with PV sched_clock From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-bad1c0/1782934392-573AB986-DA0568FE/13/0 X-purgate-type: clean X-purgate-size: 1426 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934547195158500 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 a762cb5cec0f..7473dcab4775 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934414; cv=none; d=zohomail.com; s=zohoarc; b=kpa+S8uiQdRr6/kcgoNet7bbA4cPIDMtkSW77Zl7lvt5OX+eWsNBtd//ADbQj6P6Q9qiFUXNmG276hQPdCE0XiSHaJ+qViR/eCfjnawvEyBWgfGqW31iXMYMOO0sI/33VNVQr64EYVU1Iz+q1QW+Dr8LGZGd+VsldwS7N5H6A0c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934414; 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=V+q3+pR5470wsF5QmCXBVWy55xlVZlxhghTF4iDuO4s=; b=Lu9kXAmPFl+4kgAmD6IUc9/4AZ8N9kWbkGczx/EhRGwey+hM9QjoKZT23yLJXVm2lgiPZvFpepKziCGfSro06RS/fNckoarlRLIhXh0K1SzG/gNvat/vXOgyhIIJuYAC1ILiOTCBq8zM10ej8r/APC99DbvmCfdKRb8/IDuwNls= 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 178293441428955.15024602819324; Wed, 1 Jul 2026 12:33:34 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350471.1607996 (Exim 4.92) (envelope-from ) id 1wf0gN-0007DJ-Hx; Wed, 01 Jul 2026 19:33:15 +0000 Received: by outflank-mailman (output) from mailman id 1350471.1607996; Wed, 01 Jul 2026 19:33:15 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wf0gN-0007DC-EU; Wed, 01 Jul 2026 19:33:15 +0000 Received: by outflank-mailman (input) for mailman id 1350471; Wed, 01 Jul 2026 19:33:14 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3dmtFagYKCbstfbokdhpphmf.dpnyfo-efwfmmjtut.yfoqspkfdu.psh@flex--seanjc.bounces.google.com>) id 1wf0gM-00077Q-5r for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:33:14 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0gL-00B3zO-J2 for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:33:13 +0200 Received: from [10.42.69.4] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3dmtFagYKCbstfbokdhpphmf.dpnyfo-efwfmmjtut.yfoqspkfdu.psh@flex--seanjc.bounces.google.com>) id 6a456b79-5cb7-0a2a0a5109dd-0a2a4504c410-0 for ; Wed, 01 Jul 2026 21:33:13 +0200 Received: from [209.85.210.201] (helo=mail-pf1-f201.google.com) by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3dmtFagYKCbstfbokdhpphmf.dpnyfo-efwfmmjtut.yfoqspkfdu.psh@flex--seanjc.bounces.google.com>) id 6a456b77-a01d-0a2a45040019-d155d2c9e504-3 for ; Wed, 01 Jul 2026 21:33:13 +0200 Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-8423f1fe39eso1388375b3a.1 for ; Wed, 01 Jul 2026 12:33:12 -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="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=1782934391; x=1783539191; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=V+q3+pR5470wsF5QmCXBVWy55xlVZlxhghTF4iDuO4s=; b=k/jTfYAXzhYkYwJe2JoqeSZsue0Bv+f08tun5UaL/5Ytz5h2e0lkBz1mRhR5qWkDjZ qewBBvuv7qCJ5QBWztC+B9uUv1G+defKU3U+99BCzBD5DWcW1/wfh6HedKpK+fJLIoNW vly2dFFRvk3+diZLZi6Goqht29p1tPS666bOMs6uRYFLGGgYMvw8VbR3Trqcpnmo3S/f 0fvoxxKtc1Px5IlCtscD5NkRCSa0Tx1SoypmQVHQNu3V4r9cTqVWaU6uBUenGN2ef2Cw +plK28ccWd1Fw/qdEJzuRaQcvfRgP3RkCCOoRLv4TmZFvCZJ+CcXn5DY6Fni2Ez1Jwvx 0Dwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934391; x=1783539191; h=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; bh=V+q3+pR5470wsF5QmCXBVWy55xlVZlxhghTF4iDuO4s=; b=DhV56l2G4NT6wV7U3bSzKp41bhVvBNAn3Jd1gkMfOtfvPCveWJbRUYnn0YCsV3CyFp HoAXrsYeM8sKSvUq2hUyQe4fq0Tnb23u08jpk7YfJJi2mjlnCTpe//YzB7x9hnDzXk3y eZ67JVtsN6c1Lf6H9pQ4ev+Aa656Uu/39mvGsxPE7etT4C9uFuXTrX/FUk+lQO1TmoU2 w1nFZr6WbyG2jXGxgPBWqPiQvSh+kuMfSvPdyL43u4hbZHXtb2pdy1uArsW8DrIJ5SHr kmlv+6pMqTRaxcFb+m2MQtoFYImUketSTtgw7cDeOHTo4o5eJuEujFRkMJcpMTeHeIIs A6sQ== X-Forwarded-Encrypted: i=1; AFNElJ8gxUfFUT6Z9+J18d0Fgq03EVQ7dd/jta98mspO7G4DZnbZwFsUiA/fksQMr9sWV1OdQCFM7wSIik4=@lists.xenproject.org X-Gm-Message-State: AOJu0YzYkIPehdpksCBvAYJggMRBNgh+asMawGM2UR2ahtZAcCUMhzt3 Tw+ecLsqZOzfjtLkrlP6gLyc0b2pzprZqHe0db0SSZAy8LmEIMF89+kmqkSiGXWTF0UrnE5zNI5 1vj7/Eg== X-Received: from pfblh19.prod.google.com ([2002:a05:6a00:7113:b0:847:926b:dc16]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:2d0e:b0:845:d284:9e11 with SMTP id d2e1a72fcca58-847c51d242emr1964528b3a.56.1782934390999; Wed, 01 Jul 2026 12:33:10 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:57 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-37-seanjc@google.com> Subject: [PATCH v5 36/51] x86/paravirt: Pass sched_clock save/restore helpers during registration From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-ebf023/1782934393-2E95B1CC-BFF08E8F/0/0 X-purgate-type: clean X-purgate-size: 5719 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934416436158500 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 Signed-off-by: Sean Christopherson Reviewed-by: Michael Kelley --- 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 5c1ccaf4a25e..232255279a6e 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 7473dcab4775..83353d643150 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934600; cv=none; d=zohomail.com; s=zohoarc; b=MbgDen8GYzMJFijS0Be1nAErqbj5ReaT681h+4QamB/DKxFLvLakaASOWCTqmF6J/Tg6hDHKlChoZJ6xgQKI9SeSJKd+9YJtmAYYozz6K3bKmF2JX9gXiAv4O/1Wl7MExd5Zey717K+tKS1s4/2H/rqTRyLfvB0C5oyFUKMPOjo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934600; 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=aK5m/cPAf0bdBYumbExr1aJO4L8QPhhYatB0l9CbU30=; b=irY7sn5G2VUYKcdkHJP06JvIsSG0SyyLblp4CWYEvfuWYFGMUGlKMIF01oGhPGrAhwswQQnJCEb7a0bqChaN/ZIWVBIaKG4QYTWrI0iGBdrOpLah4m7QuJTKLmRaM/DzLBv31QsJMR9mZwyopwAXfeeW1Fn3mn/inmY5omlAZYo= 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 178293460057862.746865989506205; Wed, 1 Jul 2026 12:36:40 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350745.1608266 (Exim 4.92) (envelope-from ) id 1wf0jI-0005hb-4p; Wed, 01 Jul 2026 19:36:16 +0000 Received: by outflank-mailman (output) from mailman id 1350745.1608266; Wed, 01 Jul 2026 19:36:16 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wf0jI-0005hU-1y; Wed, 01 Jul 2026 19:36:16 +0000 Received: by outflank-mailman (input) for mailman id 1350745; Wed, 01 Jul 2026 19:36:15 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3eGtFagYKCb0vhdqmfjrrjoh.frp0hq-ghyhoolvwv.0hqsurmhfw.ruj@flex--seanjc.bounces.google.com>) id 1wf0jH-0005gb-FF for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:36:15 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0jG-003oa2-SK for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:36:14 +0200 Received: from [10.42.69.9] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3eGtFagYKCb0vhdqmfjrrjoh.frp0hq-ghyhoolvwv.0hqsurmhfw.ruj@flex--seanjc.bounces.google.com>) id 6a456bfe-bab6-0a2a0a5309dd-0a2a4509b1ae-44 for ; Wed, 01 Jul 2026 21:36:14 +0200 Received: from [209.85.216.74] (helo=mail-pj1-f74.google.com) by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3eGtFagYKCb0vhdqmfjrrjoh.frp0hq-ghyhoolvwv.0hqsurmhfw.ruj@flex--seanjc.bounces.google.com>) id 6a456b79-97e6-0a2a45090019-d155d84ad47a-3 for ; Wed, 01 Jul 2026 21:33:14 +0200 Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-37e24235ce1so1374668a91.0 for ; Wed, 01 Jul 2026 12:33: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="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=1782934393; x=1783539193; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=aK5m/cPAf0bdBYumbExr1aJO4L8QPhhYatB0l9CbU30=; b=RFJGBZma1fonKwjoMQxVhpEy/UOIMSO+s32U36rMVRqgLIFF6HYhxZ4V4DfgMc3HIZ 8jX8ccc07Xo21pk5b39hL/z+fpammNwoWws7RFiKLMbaGXLV9WbW6lFbj9T59+oPXJYt C0K/VZEJD2NZqBuHG1LWIJTgz7BHgnobobm0ycIYesMFY5sk4PYFvzjDt/RHVK9msifi m3J8izuHSyH5ipo08L5wFyytZmH8ciI7jtU/PE1aPHgwJ/c3IwpFdXutRP4hPANMyMWE 82Q9HrgqdW15Pt4ShQ0Krbrw32ig+WQpblxNGmvIkJLxycG8qekLmy6rSQJiyAXGwseb Ouvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934393; x=1783539193; h=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; bh=aK5m/cPAf0bdBYumbExr1aJO4L8QPhhYatB0l9CbU30=; b=Ih6dRLR4lQi9xbmnEzq/AlmxJERs7CygcVsJ/OkyUoffuoBMSUuSnSEFwfqMiupWAM F/qxdU14KgjgLYWjnP9ttspmg4nz5s6LsQ2nWyh8veYry7ure74MJsLdlbgSKw2jdo/w c0SKntYp9ChCEmqScIbb0HSg4K0aXhiKExdW0i2clWqTS/F9A+dvNCvIirfuy5qFsvF3 8k/LakuG20ejjywoPvOa8+88cFHsEBlo0IOUZfC/69YNzprVB9np8hHy3+5XBlSqmMXK FHLZUI9tRZWn3z7hB9ufVXcpJOuQMGxMMQpFnJgQX/bIO+hs9PZf6vGPq9f3/xrNsiSf d7Fg== X-Forwarded-Encrypted: i=1; AHgh+RrKPTvC8jPaTy6gS+tNvsTEmUXEnO/KZSUEnHztOUWsJWjotX9I8vUj3nLYi4IHbKy8hW2TAMSNADI=@lists.xenproject.org X-Gm-Message-State: AOJu0YweOnfzrwzy7IvxAEA2xIIUD4nD+G6Q2pERbZCrq7yJg/IAbLu4 zMT+1fZHLMwG2G4dg/QHDFkAq+mYk7HLULW8KIeu11qAWF8ixT5a/LZiuYG0B0AmWtqzqGuWN3X 57yLiJQ== X-Received: from pjbil4.prod.google.com ([2002:a17:90b:1644:b0:37d:ece0:dd38]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3810:b0:37f:9ce1:cdaf with SMTP id 98e67ed59e1d1-380aa1ed882mr2896319a91.29.1782934392117; Wed, 01 Jul 2026 12:33:12 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:58 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-38-seanjc@google.com> Subject: [PATCH v5 37/51] x86/kvmclock: Move kvm_sched_clock_init() down in kvmclock.c From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-bad1c0/1782934394-45B23986-928943A0/13/0 X-purgate-type: clean X-purgate-size: 2301 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934601459158500 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (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 4572C4229CC for ; Wed, 1 Jul 2026 19:33:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934396; cv=none; b=UcKECgZoVGEaUq3hPRoi+55i5pD7HEVrxZjadnQ4rUKeOaz4ws5OQO+f+KW68b0jKMxZTV962pItZ4167DDu9kmDeLsWEFRYMW+XasbHTMX55L1MPUcZjqtNDrQdDdncf+FnSlsH01AYpyB9ZsseEBDKFN+HySAUahoG0qFbEgg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934396; c=relaxed/simple; bh=KWdxvECh9J5tLpTeYZdnmrdHt5yEzLjA+8xSwXhHHr8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=WmiMAUlQJzwNIeQU1rOMrL35z3kl/QS8VcXFPVm77HNLJuqC6SAm8odOmP5q6f0/BkBbfRDDylzIGr1ols+RDDxG5kn91EBfSTRoiQc29FdvN3Q6YM/X9dDEPIxvuAVkMeKDnH+Ym6RGBPGemjsXg5bDSpW1DE4nlpXmQpV/O+Y= 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=Yp6RIZSf; arc=none smtp.client-ip=209.85.214.201 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="Yp6RIZSf" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2ca3b314193so12006225ad.1 for ; Wed, 01 Jul 2026 12:33:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934393; x=1783539193; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=webyAG7YP8cSF0fuLH5JBcVLeBtJwYsS/eijECri5dU=; b=Yp6RIZSfsCZnQYHcbIzl7wooDYSgzuwZa+Ith3fcpdGs7+APLEx+Qp4g3O0YoD6FZj L2wIu7l0UlV3KQf5FKZS6H9itoKUr0Sf/srVZL7QZn5UczGlkT9VGduZnBrI/6PQ06Iw Luvtv4lvczkJEsYikiSbv/Pa/HR1vrWxs7X4IG9R7wVfLaTOAfeBiBRV93/zwgFnDM0/ Wb2U10CAB1tr0gEsxVmPxHhSEO/c3mwOits/YfBsuAp8avlU50mYikIuOjVazptfNI3+ E4nsx/c/FJA1xclPCezijnmYPYIy7Ts7o8zJQZM8Xz1vTcdVzMr3aspgKC3V+mLv+eAe 1pyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934393; x=1783539193; h=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; bh=webyAG7YP8cSF0fuLH5JBcVLeBtJwYsS/eijECri5dU=; b=Q0KUaJFeOBBsJP5BkTxlN7rWPiBjcqZIW8He/rbj6RcxhxBKYF/MfpjfHTIbvAVvRW 7b0dufBOZfnKVoaXjdiO+NFlrDb6sGNOVfeZoe1gIrUA77fQAQM+lEUCS6F9OkOFqKCp IcyOLA5f/rK2V1+CMs6uQusPJgp+AaBECNfA9ECfi5OeI7Ry93MD9h52ggK2+lJg7k8J 6zpGBZhNUcWB3YtLi29XSKDzEXGxuy6Kh8TTvlVJHvDLQVSBZ+Q98ZsFo1AdX6y/JMN7 18JYcfYZG+TVFDJDaDRALU++Ho8KKevGoLYE0Qel//6CTSE9/fhGEDe2XugX2RVDOAMA Fcog== X-Forwarded-Encrypted: i=1; AHgh+RpF/UuQqjU6pCsWZ8pJZ13/1ISXQkM7WHGxJPw32Xf+cu0TKkgwrhUnmAlIGJgrv4JOnzWxdPp2FF3CaNA=@vger.kernel.org X-Gm-Message-State: AOJu0Ywow5ObzgLBAnXUBc3wW19eo2S8UKb7maiBTgnbjShLr7mNFaeu uZHmiLewkV9YEZiR6feuY4lluuw+9CIsHOHgH5HhlorH4Pxq1ArOaME4O2J3HabZqRxWeD4Iny9 H2ikxQg== X-Received: from plq6.prod.google.com ([2002:a17:903:2f86:b0:2bd:c5f9:e27b]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:d48b:b0:2c9:feea:4e50 with SMTP id d9443c01a7336-2ca7e71111emr31590225ad.10.1782934393274; Wed, 01 Jul 2026 12:33:13 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:31:59 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-39-seanjc@google.com> Subject: [PATCH v5 38/51] x86/xen/time: Mark xen_setup_vsyscall_time_info() as __init From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934542; cv=none; d=zohomail.com; s=zohoarc; b=XCHywnr0Y/Phw6Dfee1vxCHB46v2w8MXKZOtmU3bWmSD5m7yS0YTOEuMWJq4tU6Q3/epKT4RtxeNfla/1vZhwD6xnVeLmGbffQp3Ippoe47RSQWhWMpiiSzDEEH3/obf3xh2KqSBfpPvaIQI3ixgaNv9G78Aw2EpfU2i660B7bg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934542; 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=gy5b+9Ie1Ki1M0iB4wQwCtkzcjH6HRhEeykN2jC/eJ8=; b=Y3rsjWXx/H2pox3wqCArFnMUriwtZ2iGZYz+PvVZYMvo01UAB0bJehZIH1XrZL7PKxm0TbvXRgF6SYUO9BYeCL7+pm6GPOO8kzTxm40ErvJ93KlQVkvamotjob36Oghg9ceAnYUZCjaQ3BtjG4WfefBOfNxh1x93nUEqoD+c/I4= 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 178293454271920.798211073225957; Wed, 1 Jul 2026 12:35:42 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350659.1608186 (Exim 4.92) (envelope-from ) id 1wf0iM-0000Za-KS; Wed, 01 Jul 2026 19:35:18 +0000 Received: by outflank-mailman (output) from mailman id 1350659.1608186; Wed, 01 Jul 2026 19:35:18 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wf0iM-0000Ye-GV; Wed, 01 Jul 2026 19:35:18 +0000 Received: by outflank-mailman (input) for mailman id 1350659; Wed, 01 Jul 2026 19:35:17 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3emtFagYKCb8xjfsohlttlqj.htr2js-ij0jqqnxyx.2jsuwtojhy.twl@flex--seanjc.bounces.google.com>) id 1wf0iL-0000Om-RX for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:35:17 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0iL-003oQR-8A for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:35:17 +0200 Received: from [10.42.69.10] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3emtFagYKCb8xjfsohlttlqj.htr2js-ij0jqqnxyx.2jsuwtojhy.twl@flex--seanjc.bounces.google.com>) id 6a456bbc-2eae-0a2a0a5409dd-0a2a450aa144-40 for ; Wed, 01 Jul 2026 21:35:17 +0200 Received: from [209.85.215.202] (helo=mail-pg1-f202.google.com) by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3emtFagYKCb8xjfsohlttlqj.htr2js-ij0jqqnxyx.2jsuwtojhy.twl@flex--seanjc.bounces.google.com>) id 6a456b7b-e40e-0a2a450a0019-d155d7cad925-3 for ; Wed, 01 Jul 2026 21:33:16 +0200 Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-c916d17dd43so1230778a12.3 for ; Wed, 01 Jul 2026 12:33:16 -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="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=1782934395; x=1783539195; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=gy5b+9Ie1Ki1M0iB4wQwCtkzcjH6HRhEeykN2jC/eJ8=; b=rWmBnnBCYRZ4Oc21boEFED1J2x0B1UJGWEeE1ot96PznZdbNEtpnLmoBOMI0jvcB7O RNcuGFeG4GB2oeSiN8PhrIEkb0IyB4MDOdnOSQOPv4i3xbHFc1zZSkJN3V2T/LYOgiFx pT9GpoeQGCg1VkrFSb5zQ/q9piHFNQTeSmuVdJScsFKDSC5APEfaCnhDuYoNnguDyS7u v0g8Su8B8JZuhXzVT03s8iqrpbANsZ6xBHKaI6LQcXHElSkBD8wTdbFy2q7e+rZ2L+bE RcvoSq24554CiWE25RlIZSy+3IZVdpW/LeqE4lfvxVI5XgwbpV5LZoV3OMn8AbKl+/gZ R9ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934395; x=1783539195; h=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; bh=gy5b+9Ie1Ki1M0iB4wQwCtkzcjH6HRhEeykN2jC/eJ8=; b=FbNsNHdLOqmx5ZLTlBbLdYXFu2ngBRxvbxv3jdwCJ8M/6gZQE8gGfoPQHFQOr8G2OK 7bxbJF0y4F/U4aFg56oqEPFqj5JE2+ViOxKKIBBN5vh49bRb+ntjyOVomyddCJj4xiXd /dvsA/9IqwDS0uABD8GJblfre8v10bNizAgD437Oyi0lBotAhW2709RzeN6EA/+OVDl0 sjJ3+aBb2JiO9uVd2gAWrkHiKMif5hYU0r4YTAMLcpP592/FT7KgPfM0Ny8VihEjlZ42 vAEgb4T1/Mn7jo3/LXrDrCZKUsI4M44BzpQ78ii5HmZlMu6JdnkstSg/lF1T3uTfQKzA TiKA== X-Forwarded-Encrypted: i=1; AHgh+RrX2hcZbUflFUhJjV+ixfLlofW6/MBH1Z2b3EraNT5dUBcdOnPczZPMokGE9UimM1hnpJSDdCnrBaA=@lists.xenproject.org X-Gm-Message-State: AOJu0YyJLHmu5xX8EAsm11hLMbrQYCa+ToroG9ctSJWj5glGSzZIQm2E r+SaBAbfdUd8TZdd7UZ2CdLKrH6jI4laemvWo1jvn3kHxf/zUPkudfrmwcQG3g6sxIZkv4Ojauf fWL7xXA== X-Received: from pfbbk23.prod.google.com ([2002:aa7:8317:0:b0:846:7503:7350]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:3d56:b0:845:36a0:9eb2 with SMTP id d2e1a72fcca58-847c096d1f0mr2944243b3a.34.1782934394416; Wed, 01 Jul 2026 12:33:14 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:32:00 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-40-seanjc@google.com> Subject: [PATCH v5 39/51] x86/pvclock: Mark setup helpers and related various as __init/__ro_after_init From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-4011c0/1782934397-D472EDDE-E6EA5604/13/0 X-purgate-type: clean X-purgate-size: 1388 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934543118158500 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) (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 EBE31428D21 for ; Wed, 1 Jul 2026 19:33:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934399; cv=none; b=k6JAYykVXFEUaXMIXTsuCYVBtTteyld6PH2JbV4jP8mKRYMH0H2l87mUmDYD92zi7EbIfKADQhD69DmMsQq6WRD2xjOnL0nUZE8XTjEkpVpCQH+Pi17R860pOnkNH7TJuqP6zrt0NJZdzQ1EUtl4blcBN3GxkWG9W72ruu8crwo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934399; c=relaxed/simple; bh=uS9BChC7KgGK2M+8u75Q9Ryt/QRAbZtmL5i8BGg+y40=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=m164jLZdyTxAFQj9eNDUXt1h4s2p55TDPmMBRgbUlBCBH81I12oXy2K49387O9x8Xv2cq2Awuh8vO7NzeDYNK20Zb4We8LXsVe1bwP4Hju1fZepEe1to/iHwbA/LIRjbLpczbjG/8wz0gTTUoEOUp1xGiw32l6dfTvNZ33L5DVI= 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=CGRt9Qfg; arc=none smtp.client-ip=209.85.210.201 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="CGRt9Qfg" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-847ad67cc51so1165140b3a.3 for ; Wed, 01 Jul 2026 12:33:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934396; x=1783539196; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=w419X+lYiD/kBIvhKaeAU2oxypXcdz+V5rg+/s/ZS+Q=; b=CGRt9QfgbZ4A0K1KvEd7oB0E5MclUUrNEZsph5oNIYNfP+sbjSBR7+iS1jJR01CMix 7DMJ8JYtmzETMNvFUfCm5Bf5DrelvA6Q1iXc9mNy8yZTdw0k7OmfW7SfWNTGeWBLEI+Z 1Js0Y7t8hNHAUOAOILmf8df3Hu4Aojz4YugYTVDBEWMqDcwPjReBlaTbeYUB40PV/v8j B27FjEGoE86wdAnxLcd7nxkbCDjrdZdc/dehlitFIQdvVBYrFX50fudD0mgDZ7+K7lQI mNT+ZoyAy8DUwx02z8/hNM0HLgdyUw8Lijaj6zjIv52m5hLawcNuiNW31pqeozVaP+YA L+3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934396; x=1783539196; h=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; bh=w419X+lYiD/kBIvhKaeAU2oxypXcdz+V5rg+/s/ZS+Q=; b=cQMKtmgkOmlACWtcHRZULx35xXkNjdWkDzxz9n6ijRiA1/5RhVyNnVewhrmijTh/ef S0p1hU3pb8ApsMDkyChsOHSgh4hpNVvMJGgnuK6UhjzX+sK/5lfDjkZKvvwRGfqcKfRG beKGFFAJNPN4FSiH0/6fEEO7zphC0zuNsoTNgjuM6vCUfJSE2/mkohSRILEBjJdLxdAv syWxlj+JcJXahd0zKbmV36IOWombSqdSFpPMsNQGsJmxwao6C8C3JE5QiuA5ch3Brufi gmTkUhsvuHpJ4lbZw6ldWgskcETkCvZoJ8LNdhiLiq9VKoHnpabNnQQRoWqlIbT7sBov qm0w== X-Forwarded-Encrypted: i=1; AFNElJ+x7ahekw5WLWoHxks8+/MTbklxVBdx++LuDa6x7hDmWm17SDzbQJp1meBY+E/OwWyPvT2CimkNRQ/Fe4s=@vger.kernel.org X-Gm-Message-State: AOJu0YwCuwGxTBI4+7asZghn/bwJ2Ug6LijIC7jeUN78KqPodxn2x789 viyPl82yVBnXfIYFwwoHIwjcNiBj6Nc+S+ds5x8xfs86jwQ4b1vBI+rxTSaam6fKKOPbduz7Wp7 o46KvwA== X-Received: from pfbdf8.prod.google.com ([2002:a05:6a00:4708:b0:847:a13f:28e2]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:a112:b0:847:8f7c:fa10 with SMTP id d2e1a72fcca58-847c0894ebamr2717987b3a.35.1782934395673; Wed, 01 Jul 2026 12:33:15 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:32:01 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-41-seanjc@google.com> Subject: [PATCH v5 40/51] x86/pvclock: WARN if pvclock's valid_flags are overwritten From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 072C3429DB0 for ; Wed, 1 Jul 2026 19:33:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934401; cv=none; b=QCzvyL1ZjNykC6qniTJolGI2pkINWe7Dm3TvC1NRMvniBMt9zZCIQzj+0tPiMnfu5ghMgRB68rwEm3Oc7bxW1eOnL129t7Nb02x4+lgx/FULltD+hi+20KXkeuWDbNXd7S0j7SSFXvbz/XhOHMZHpB8aWkzAV63yOQ1JMokPZBw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934401; c=relaxed/simple; bh=WFd4Q0rqoZceFAWrIK1Xzvh1py+2tI8zh2sgEj9iv78=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=R3U8zso1g5lhCDkDf2pZQ2DJRT6/URHt6x6Tc7wtXPDU34bIOlROvMSt3hTc9n6axRdLi1Nb5w8FGKzM9W00S+d/RCAssTEA/FbbUf2mEi3sGkk6BTlQkmrwrg1kP+baGPbzQdpMieqEiC9dFGNbxmNARa7uxMO6i/tJUMFsKFw= 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=hKg5bAkl; arc=none smtp.client-ip=209.85.216.73 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="hKg5bAkl" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-37c9127e316so1038124a91.1 for ; Wed, 01 Jul 2026 12:33:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934397; x=1783539197; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=UQI87jJDSOF5xYM7+FYJ7P3rXlAyaoExltyOrt00Pyo=; b=hKg5bAklcge/JwT+f8awNmiMreptjcKgs7P5EcOYf83EBMKW/fXVo9YX8gpXEc7PZb AKFL/m4B8G5CXJJMAwOiDCWkynvG0ashzX2JpU6lLgCe/7rtFEgdzeRGR8myV0zrAYGo isANjEYlpgSp8mXn6NaBGSJ1USqzFKtqAZtgsjKXz5j5hfYEb2q6rV1Eg+iKOQvicgdb Ems0EjsEF+cnSkVGUg2t1B5w13JvfFA8Yd+ljfACXLNOgjGlGDY7NDGLZwBqJrvSHdf2 +LSR0UmrtFXxfwf+0mUbmZJk3itW8bT4YsexCuQMEs1N67vpIGElbN50pSnL4oUJrlIW qgfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934397; x=1783539197; h=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; bh=UQI87jJDSOF5xYM7+FYJ7P3rXlAyaoExltyOrt00Pyo=; b=NFQxn6Ffxj86+6VAKpKNfzDtRxhbhkjq7hKNNETXuuQCAJ/B1SUyhV8XiDK7p2hNvg i/tGFXnotsPxgMTNW/VeBG0n+mdFOvpozbJMsxMvG3W0KiREirwtisb909HuVY6haOuh uLcX4lkV5Pj5DLfQHwR3n9DJUNlqkNeiO0XVUgVFRFHVvYS2XSkLIt5Zlhi8uy3d4fYa +UlRasNOcquLy9eHytO4PxufDwPOXjWeXZRmbOXd14hcHbIq+dSXOMX8pFDZYg6AAFTE e3st8QUXAP2q2F4qu7r3BYSAGgDqLMSbwkGXDZyP2RrcQV1PurEWU4b5RTwTx/S7C4QP k51Q== X-Forwarded-Encrypted: i=1; AHgh+RrczfTk0S7iU8Rla55Z0nW1YAjiU3S9+FNqltwrXKqo3G/bnt3EykMHfSeblxNLdM+Z5+G13e3iMGTitmI=@vger.kernel.org X-Gm-Message-State: AOJu0Yx8R/trhKULjohmllFzWEQWQ1OAbEThGM8DL0JDV74S97pDQdeN vzt3D9nF62FqQf5SMVlqPFYpf56dAYuRHYenXXsjZLYAkoBkhdzwEN4V3TGtoxzckwleQG1P4Q6 D1iiOmw== X-Received: from pjbcv6.prod.google.com ([2002:a17:90a:fd06:b0:37d:de2f:3ddf]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:4e84:b0:37f:eda5:5169 with SMTP id 98e67ed59e1d1-380aa127da8mr2911601a91.13.1782934396852; Wed, 01 Jul 2026 12:33:16 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:32:02 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-42-seanjc@google.com> Subject: [PATCH v5 41/51] x86/kvmclock: Refactor handling of PVCLOCK_TSC_STABLE_BIT during kvmclock_init() From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (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 497A8429DDC for ; Wed, 1 Jul 2026 19:33:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934402; cv=none; b=agz/Nu0cfIFTYxDi0XI6+k6PZg6g0UjHCSlF1ZcGXAQjUAilzvdN0AMZ9rpHXEEMAirSN40cRcMgsWHT3e0mzJDOrf3sKU/mkdrcm6UbxNSMSSDg/i6EH3wFASACDXdYG0xHJr7fNdZqGgrdY8aPtyIZ90bZrBOYKIpb4SsgQvU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934402; c=relaxed/simple; bh=v/jmxMkGYZ/HTlvohOgxWHlLEZvO6K2N4svMiche8Yc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=i4pp1WR33f+q/8VAJUkYaNochTU7Vknnb1pF95Tm7S+3YL3GUNmsJvYFqCaEM/RJOe7g2OIdTny/ncz5zdgC/i2Q13u4vh3BjKKSmI92R818KvqdTQ+/YabTr9CFwD1uMCKZrzeOQuKdRnYdcR6wUWI1+3UL5rSuixRrhABMp6Y= 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=vARzOcPo; arc=none smtp.client-ip=209.85.214.202 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="vARzOcPo" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2ca0481106cso11583865ad.0 for ; Wed, 01 Jul 2026 12:33:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934398; x=1783539198; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=E0Ky72UXh2AIoPVqIZkO5elKJbkXgXhRlg1eH2WcetI=; b=vARzOcPonbotl5Eu8R7YZwr7DwSNSZllNUakNzDPaa03BrG6Hai/OiNmi6tMe7Y18z KzyPWN8mE9QmO4wQw4spd6qjEkowdg3aMtO7UdtsS6u5NP/K9ITuTpqGMjKolXClE9QN eaYH94/Of+Hei9JF6ItM5ObcsgvKkOeJnmK9W3BP04TwClkAqzN0tEgB99x6Biy4UeGy VW6UNukIfpt16lg6XBFmyJk20BuqgXsWyX40aOHtIIoq1aiO7VkYyifRAlTElGEf8WoV 5qyOxOjNq9pPUryKjmZyG3Ew2PEHk9gO3LCbOGT/s0d52Ir255x+O7cOO0dKrzFW4hiY 6Z1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934398; x=1783539198; h=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; bh=E0Ky72UXh2AIoPVqIZkO5elKJbkXgXhRlg1eH2WcetI=; b=YDV2yTD41iXaFINOph4Q5td5+n6aK0RTcCmtxM9wPwFbs+j+enjpb1MQW8qjpVLcDI cdQQzwGBAbPFiZfKPtncI7bZyzX5C47yoZ6emw2ezMPNaBSz3u9a+gobAshxmHc/xLs5 yK2yOPVyeL29x6klyGApLIlblmeWIk7MHqBbuUsa7bIt9JWyLIH/UbeFp5lKw7ovXRQ3 IaemskpRrrq81nBeznyCB4VoPp5CLeaRrLvyJ4Z4VjXES5GpMhPyhu+y4YO3ThMSmd5j oxPj/a2F5PePZ2epXCFQGhJi1juo5dyyys9YVhD7kYNRaBnWokKO3g+RTI7sqV8HI9TT l+Lg== X-Forwarded-Encrypted: i=1; AHgh+RqSGWrCEmAom/c2oL+jb6X+5kqIAbSH7ydMn+Z5RQmK7SHR82NksYWtCDKfDonktG2kLLtOOD8xQCprL9A=@vger.kernel.org X-Gm-Message-State: AOJu0YzzGKFP8ZjI1ikPEbbjUD3B2lJNixFNHs+V5eJK5r0fkLsgnskT InPUZ6oiUbzTZ5q60yu6jbDLBuW9X98LCSMYOr2emdY40J0rYJJQGnT1bqujBHMQTLvbiAxpAFu BSDIgvA== X-Received: from pleu6.prod.google.com ([2002:a17:903:41c6:b0:2c8:5a:8056]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:3885:b0:2ca:17a8:cfce with SMTP id d9443c01a7336-2ca911d341fmr20775345ad.29.1782934398119; Wed, 01 Jul 2026 12:33:18 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:32:03 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-43-seanjc@google.com> Subject: [PATCH v5 42/51] timekeeping: Resume clocksources before reading persistent clock From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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 b1b5ec43c0f2..5bc77d36c7a3 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -2180,11 +2180,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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (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 71A0642A797 for ; Wed, 1 Jul 2026 19:33:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934403; cv=none; b=Mezewe1pHSLJmyCX45yEPRIGdtgiBjoeDHKBe4ipnoGhrBRWsOYYtoDsGifNeCDMFKuXCRpfUdXGC38/5qXWouc/uo7UMvvKCloqPj9Q08+R83k2Sg0gekig2xwRtg2SPToo7laVDW90LQ6HFg6DGtpo/TjRlIfUL7rm71YQCZI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934403; c=relaxed/simple; bh=5RmHG8jQeFaxWLyXRFh1e6DyJpHBisQQEigG7SgzsNI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=KC0SZe/JbunRViZp1CMwX9Wg2D94zmvZYs6Lbgg39EDkGWnqHrrAAGNPuM94mj7MwzD75QSb0yg0mWxoxMirH7/6GsUqACnEKTnYUdj/bixOXDIGmGju1wd8WgF0J4aBKPgnh9x6I2z9YBJxe3r3kYXfsNlpcUJEeg3ozmxg/v8= 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=SuVFKY6P; arc=none smtp.client-ip=209.85.216.74 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="SuVFKY6P" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-37ffaca522dso716868a91.2 for ; Wed, 01 Jul 2026 12:33:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934400; x=1783539200; 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=VKCobU9qtcP/hN9BlhIiU1X9DFbnjtpoNJAd58RipCc=; b=SuVFKY6Pn8WHrrhDJo65fRVbP0QSq14/ulHcDZTceBBjSXQTUxS8cbOe8TRHeTQOXw n0BLMdtEUGhWNU/eUEEJCd+av1RT4Q1srto5DQmnWFa/xNMQ6xcCZ7t/Qg15KdEKo5ev Cb0Sonw9PqLyxUHyO8V6K1AKnmobUrvImEuf8Wy50/OlGHTeLpgB+l8Db1Kbj0FRZzPF IzVWTDiHYsgpZkUjRjc8i3ffd8sTdADTPIXkd8LYebsQfCZdXR4b3vJTRvB0Y/FLeIyD 0yFhZ/W51zyjkBzK4IK6OFG3GQ2KwrHlGOjzIGJHV/sX72s1MDyAusZMO4NEDptYOqSq FzNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934400; x=1783539200; 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=VKCobU9qtcP/hN9BlhIiU1X9DFbnjtpoNJAd58RipCc=; b=GjYcyahA7xc/+rkRS5GhOe7/IUxzdDiHumV5wNVF8jWghn3K/MAqTotfo4SiXWpeMN V4b2ugBzDTWaWXG51+UFys66jRUVg5xZTq/HJZWY1lUdeA5JKUh3NDo9tpA4XbOlLbTA uwg42cbExA1a66SyDOrdUM79CAYRAVAwty5IOEFuo400zdWcryC25pbI9dAu2zRRlt+T pZHuUBSkDAshP0Q9wLsu7eg7wwDQlxGaWw8H1WVNzvzUM2a8w7SH1PXOqbo/Iy9SgH3p RSg2rBHfx9zrxGNpZTwluWxPQzLZHcGWChS2SPby4XIqQDupb92q1G/ves9+hllzSUTt caiA== X-Forwarded-Encrypted: i=1; AHgh+Rr89YqRDxH42EghAdHBU9tiWFSeLeZ80y3SXb4fj4nl2EYaH2qm3g0vzahzMeijDkkpXX+3GRvHPMYGqdA=@vger.kernel.org X-Gm-Message-State: AOJu0Yz5XGEdDqQjxKH4PjalqYPbyChQWdvF/u1AKLx4Whq/0DrMiKxG jhI5JKgp58kunoYCZq+U/YlOygDmOumGH6nPwrxVpsYPL9xPgXMhEo055S9aGQTFqPSGQXxSXAk /btsPRQ== X-Received: from pjqu11.prod.google.com ([2002:a17:90a:ae8b:b0:37d:8595:7a08]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:180e:b0:37f:ff9d:ad69 with SMTP id 98e67ed59e1d1-380ba80c706mr2175388a91.7.1782934399271; Wed, 01 Jul 2026 12:33:19 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:32:04 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-44-seanjc@google.com> Subject: [PATCH v5 43/51] x86/kvmclock: Hook clocksource.suspend/resume when kvmclock isn't sched_clock From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934543; cv=none; d=zohomail.com; s=zohoarc; b=c2/wOf0XLmBGpwLebvu9FlUQROea4tEyNS0mVxX4N0eTqtUnRVbshI4e5t+408Xa86q3NpsQCTutB4RK6EUdmkbG6qe1MxtXJ84pMdv8uJcXEc/d2qsNzEoDrUTC1skDeoVwPRI6xvHsUyPasnOgAkgCvgH0RfP4rV1ARefQDp4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934543; 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=X+4LkvbZ4eCaIbae7uS/MPBNwexrDlCNdhdaInFV7cw=; b=OnDxY9welLvIHxEG4ySeqcWWg/6JhyyQw+vhB6FmuAvBhjHxv54HONznZOPw47v2CYG4Fup87tRlYlQsBlVrFvxWGfKPX2NOGWYb7UUD3b/7bOPEIpathAofMN69GplFsVKMqKXPxWq5lRaMMizGmUGv+FVzONf/vRMXBt9fH9U= 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 1782934543875527.3122907641605; Wed, 1 Jul 2026 12:35:43 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350663.1608208 (Exim 4.92) (envelope-from ) id 1wf0iT-0001Oo-2Y; Wed, 01 Jul 2026 19:35:25 +0000 Received: by outflank-mailman (output) from mailman id 1350663.1608208; Wed, 01 Jul 2026 19:35:25 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wf0iS-0001LH-Ov; Wed, 01 Jul 2026 19:35:24 +0000 Received: by outflank-mailman (input) for mailman id 1350663; Wed, 01 Jul 2026 19:35:23 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3gGtFagYKCcU3plyunrzzrwp.nzx8py-op6pwwt343.8py02zupn4.z2r@flex--seanjc.bounces.google.com>) id 1wf0iR-0001E8-J3 for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:35:23 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0iR-004oMZ-00 for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:35:23 +0200 Received: from [10.42.69.10] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3gGtFagYKCcU3plyunrzzrwp.nzx8py-op6pwwt343.8py02zupn4.z2r@flex--seanjc.bounces.google.com>) id 6a456bbc-2eae-0a2a0a5409dd-0a2a450aa144-48 for ; Wed, 01 Jul 2026 21:35:22 +0200 Received: from [209.85.216.73] (helo=mail-pj1-f73.google.com) by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3gGtFagYKCcU3plyunrzzrwp.nzx8py-op6pwwt343.8py02zupn4.z2r@flex--seanjc.bounces.google.com>) id 6a456b81-e40e-0a2a450a0019-d155d849bce7-3 for ; Wed, 01 Jul 2026 21:33:22 +0200 Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-37d4f23eb37so1673025a91.0 for ; Wed, 01 Jul 2026 12:33:22 -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="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=1782934401; x=1783539201; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=X+4LkvbZ4eCaIbae7uS/MPBNwexrDlCNdhdaInFV7cw=; b=rOlOoVJov403l+V5pxkWwqdOR9xnngUXzQkGAs4jNhh8wXSgYLpN0O8qcTZtSoCfCS jivxQqNThdTlY9aWQOtr8c0j0nssDUMw+qyoh1fgW2ef9pd8HCNId9d2fVOaSLEoyWqB Q2HtAHObtq+rWhsUz7CHwkZVTBsBAONk64nomuUv9/beBAU10k8kJbX8t30/AIQd3/bL OpuHdbZ5bZgtJOXXk1+d8AfAOe1DbIKnjqxRVJb+y+qM70YG6IruQrS3i0BJCaz8wTRD kUbPwrzS1FqouIh2ITkP+Ti1MQ+qpufbXHPMWiseaCZiq7HzrfwXLtk5O1pG3yA48Kii Bc6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934401; x=1783539201; h=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; bh=X+4LkvbZ4eCaIbae7uS/MPBNwexrDlCNdhdaInFV7cw=; b=Ypfk3Xhnq7NE57y/qlM5qzp9XmWI0iT62KR0jLlnE13R0djc5iQRfeITTjyhyOw2vI IwNoBkSQ2iMw3A8XVY3W547j76IY/IufxlHSLOU+bZWIzy5K2iuJAoXWQ9Q5tpGNLMVl lStDVl+y3mGF8unr/8UzVQREczGsiwSxpY0rYq15XXtHP/hwU+eqDcZwyJUtvnWHlcCO KZkv+2XDZz93hYOTRE9fCZBBnzODlwVlsfEjSHkbH6p9S1y4nFPavikwv8E8aJWNNezv yFyeHE6xemBXZ1LQFDBAWomlHeBNLWl1qcCL5KsOnqBX6bvbzE3d2ScFOWDVNv8zH/BO /eLg== X-Forwarded-Encrypted: i=1; AHgh+RoXk1rMaDA2+Ozrc4csWxF0ivnBk1UgwUjk8nyLz5j/ijL1tDU49TvD7Hgaz7JLbdQnO/Gz82/pBcc=@lists.xenproject.org X-Gm-Message-State: AOJu0YyMi4RvKYXBA2DIagG45VtZcbon+etpI9EfZGbcAe4W1UhR6Llv l9ujrZ90H+GIM6fR7nSy74cAi8izEQ80X2k+U8pefb9mbgYANjLNNCJEGm7YHS3R0775XQRYt5H vvRwElw== X-Received: from pjbms9.prod.google.com ([2002:a17:90b:2349:b0:37f:9ce0:f1f5]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2c87:b0:37f:ed7e:7e42 with SMTP id 98e67ed59e1d1-380aa0e0512mr2733682a91.14.1782934400395; Wed, 01 Jul 2026 12:33:20 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:32:05 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-45-seanjc@google.com> Subject: [PATCH v5 44/51] x86/kvmclock: WARN if wall clock is read while kvmclock is suspended From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-4011c0/1782934402-CED3BDDE-30CC84DB/0/0 X-purgate-type: clean X-purgate-size: 2069 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934545159158500 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (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 89A4F42B327 for ; Wed, 1 Jul 2026 19:33:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934405; cv=none; b=Qj7U9I4GUB84BPYxCbr//lbJI2hhjijqbRMbAwx5Z9pJgAwmhIfYMjGPekNV6tZiug+G+GOff5ivXRxrgS8M/2cPAKpaiib6A9REvDqLLf3gPOXBXlFQYMnBk1db9dfEEE2gDkfUgMzg3wEB+w1YnhthC61Xp4S9oAD3AezBZvs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934405; c=relaxed/simple; bh=UExHFmJ65vTRSuxY6XqQx736Zu2Yk6LZG1h2YXf36Dc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=BneLqgWm9WXi4P+l1y/nAzdRjSbEWIsMKR2J3yUFMq3bekREOU1czDT8hrYQrSZU2FHnYaB2JpQGAwLIYQk89G5I1n8Hr5qTdyCRid/DfmtPgx9sjBKFTrgrs5Mo5M9OQWPGw6ZfFks5qAO2UxZ5I9BD0HcDyUWK/8voQ7dWGZU= 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=tYeK7jVr; arc=none smtp.client-ip=209.85.214.201 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="tYeK7jVr" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2c804e38cb1so10415205ad.0 for ; Wed, 01 Jul 2026 12:33:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934402; x=1783539202; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=Z1gCn97n2OaQgcF7BGVq6zaJwKJkpkAfWBIFdTpXq3s=; b=tYeK7jVr9pte1MjlrhhuhdAOMYT93kUFcQW3zUg6ggB8NhFyZa5dV4BnqLumk/00TC HayvniQdI5OCkhm9Qgx/zaF1gAQJLIs58EX+hNAgZXaLW8OsVB9d3djooUz3rtJE/Egt cAQBxko4rv8z2LYlBJz9N/Xb7lrLbtLfpUJQmy30UK3xlpQx2l6qnsq6XoNHi1lnz9jZ C2QvzYkT/KC0GZ4pGiDQ+03EbS9y4b9sLphEVaf3ZtYpk3rB6wQTQQ4tnGyEvGJVbmLm kLHp4uojtiJjjSQozBzmUiBJXPZu7Xcbeuc4OFUZ5kSPYW+YeaM1FLQd18ayKQhrgfcQ 3O7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934402; x=1783539202; h=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; bh=Z1gCn97n2OaQgcF7BGVq6zaJwKJkpkAfWBIFdTpXq3s=; b=D/zN/KTU62hNJghhNpG7ZbVUrgplKBCTg56rnhDNawFTiGYhUCZEb+j1bXuOdghNvg 2KNfK26BOVUN0pAv/JuYmxI3zkbT2YSFyQNJvMLnXCmNWk7ZxJ7xjLswsUfcHtTmYcsU YF68236N6LrWJYJRnVIjGdkrfU7+w1iNurNrFkScpYVC+pEH6KsDN9AY6pJSx3W/igR8 judTbvtkMQK1jjKV7e8ItCZoPPa2WZxcC/rdB7Qg2UoGLOG1Gggp2lIQOcr7zwyu+qDu R/GEUT6DiULec/TNOEQKUkA82/1UEzKLpos9vmBRPZy0sY3yLfRHGTP0e72lMJdzmgzx nKsA== X-Forwarded-Encrypted: i=1; AHgh+RquCWroit0xRxUml+UVD3qpZmk2xBt4YakkavqmxKa3sxd9JJw6pL5qMiOTbDRV/IAo0ySEev27Ki70xQE=@vger.kernel.org X-Gm-Message-State: AOJu0YzhWdgg1jV9mjyZplaUaBY2U9OXGoZlBOKtpZT95dlj0RKS8pqt o2pBmUYdFiY8OXlVsRyKFbKplRKEEjvHJPHneVtpebN8EFy22TZD2q0LSVyzxWizm2q0a7GeIew DPCA1FA== X-Received: from plgo7.prod.google.com ([2002:a17:902:d4c7:b0:2c0:b770:dcd7]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1245:b0:2c9:fd62:a709 with SMTP id d9443c01a7336-2ca7e6838d3mr33515195ad.10.1782934401463; Wed, 01 Jul 2026 12:33:21 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:32:06 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-46-seanjc@google.com> Subject: [PATCH v5 45/51] x86/paravirt: Mark __paravirt_set_sched_clock() as __init From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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 83353d643150..0f92b29adecc 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 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=1782934427; cv=none; d=zohomail.com; s=zohoarc; b=NBwgPJMMoXDWCS/TtggXm4uyGRkSwWwzmKNM3xqXkGpXmmmcXR3GFZGL1vBTA1Yvggjjszme8RP99yC4JW8AG6K6V/yy+xcf5baMG7hrg9qtNpyMPwq2+RfYK3v1nIvCF4TI6hGVmMPSPTck1ZazK5OtoqaZeoTtYHOv4VKsK98= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782934427; 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=4/M1D57lssm/A6RYRKDqaCs4EQpgkZGCf/uDo3WK1sI=; b=R9i+kCD+lMAQHim2Y+1MOpXt98CrVyNkTcOHs6sQJJSDpfs/pKLBe4ocsl1qbhN9rDlqg/7zhFy8lKPzjSKv0svXQTlW+Wg0OUJEhieufXM9hPgnS1lI2KINdIYcyAuz4LMznlNMzB+Wc8zbLUlZrCBh6vpxXVEAivnQebUvO5c= 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 1782934427598529.9327017256654; Wed, 1 Jul 2026 12:33:47 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1350501.1608015 (Exim 4.92) (envelope-from ) id 1wf0gY-000075-6V; Wed, 01 Jul 2026 19:33:26 +0000 Received: by outflank-mailman (output) from mailman id 1350501.1608015; Wed, 01 Jul 2026 19:33:26 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wf0gY-00006l-1u; Wed, 01 Jul 2026 19:33:26 +0000 Received: by outflank-mailman (input) for mailman id 1350501; Wed, 01 Jul 2026 19:33:25 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3gmtFagYKCcc5rn0wpt11tyr.p1zAr0-qr8ryyv565.Ar0241wrp6.14t@flex--seanjc.bounces.google.com>) id 1wf0gX-0008Vk-Ga for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 19:33:25 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wf0gW-00B3zO-To for xen-devel@lists.xenproject.org; Wed, 01 Jul 2026 21:33:24 +0200 Received: from [10.42.69.4] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3gmtFagYKCcc5rn0wpt11tyr.p1zAr0-qr8ryyv565.Ar0241wrp6.14t@flex--seanjc.bounces.google.com>) id 6a456b79-5cb7-0a2a0a5109dd-0a2a4504c410-16 for ; Wed, 01 Jul 2026 21:33:24 +0200 Received: from [209.85.210.201] (helo=mail-pf1-f201.google.com) by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from <3gmtFagYKCcc5rn0wpt11tyr.p1zAr0-qr8ryyv565.Ar0241wrp6.14t@flex--seanjc.bounces.google.com>) id 6a456b83-a01d-0a2a45040019-d155d2c9adc0-3 for ; Wed, 01 Jul 2026 21:33:24 +0200 Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-847a2509456so1136966b3a.1 for ; Wed, 01 Jul 2026 12:33:24 -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="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=1782934403; x=1783539203; darn=lists.xenproject.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=4/M1D57lssm/A6RYRKDqaCs4EQpgkZGCf/uDo3WK1sI=; b=wfMBPqMjP87Bz44fHELq8qviF5v6Gytxq5XFD8N/7Y8mzyjiAUvgOCxF2ZBVRBp/Av IvsQsfjPu0ZbzepH2FnezRhq0oux8Cl6MMaVInWmk2Ab3++7OQ+xn8goHbkGBgKcWMbQ wJBM+k2WxcmC54nGWFSYnItTMC0n3Vf2aIATS5DN2sJBUrO0fUBnHU90EBdXY95M7KPB RPQhJk9tnUxGoAuAkPNiqT4TUe3odr30dudeyO3EqG4CeXuFIK/hr694q4fNeAWqRXTw 7ALlIJrkL9Fik8a+oOu+EuklROkCbFrAMDLOxpQJFsPKdEwDEzE9KKOGv4AGI/bilEUt 8L5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934403; x=1783539203; h=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; bh=4/M1D57lssm/A6RYRKDqaCs4EQpgkZGCf/uDo3WK1sI=; b=p7Iv5dKEz+O7Cbx8W5EX+naq/DizaYkMXwEQrKH1lb6HEKNahQDTPuCfwccTbI/0Q2 FxrG+ZQ3yQW4r/YDWS3hK+xcf6kCknGLXqRKWC8u2MptnBMeGtMxSFI79j2rjfVLKGvp Cmx3CMsRELjLOKddgy+qZox2PYcU/JIlf5+DNIZLUCSZnjlqwkGy9wr5cOYyv1iD6Xly 7QJr/GXBhlRpbNPT35jNFOKv5GLKAvOw2FfnbyBmNhlxarSQ1a5Q9NR4pq2bFgLz5XYS MubWWIVmEdPDyugYX2SkfXkBlhMBeJ8J2ucLUFhCHFFdcO70zyyvoV3+N4KJslhOBN+x R48Q== X-Forwarded-Encrypted: i=1; AFNElJ/A/LQJGzCm5eRSn7PgoUdV/oK70m0T9dWmv+lXSVKwreLlYEvLsDZftiFniKnv+xkVRqzE4J4vykI=@lists.xenproject.org X-Gm-Message-State: AOJu0YwpTZX315N6b/Ty2HRvN0FO8gd5U80WkvfAimjmO8GYrhGkvTJO w1fHQoE8apZY2lAZkSOMaI8dJGhg2jwxKVHjAOAysbS2HguqJxE4TOYLLSdiLuujDYcZmedo4Mz ed1IQTQ== X-Received: from pgal188.prod.google.com ([2002:a63:3ec5:0:b0:c98:a4cf:469b]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:62cc:b0:3aa:c964:3c27 with SMTP id adf61e73a8af0-3bfed49ea64mr3435408637.46.1782934402561; Wed, 01 Jul 2026 12:33:22 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:32:07 -0700 In-Reply-To: <20260701193212.749551-1-seanjc@google.com> Mime-Version: 1.0 References: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-47-seanjc@google.com> Subject: [PATCH v5 46/51] x86/paravirt: Plumb a return code into __paravirt_set_sched_clock() From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-ebf023/1782934404-77F251CC-CF0FB594/0/0 X-purgate-type: clean X-purgate-size: 3369 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1782934428370158501 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 0f92b29adecc..012321fed5e5 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (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 76FC0423F7F for ; Wed, 1 Jul 2026 19:33:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934408; cv=none; b=tW6Te9dlOfS9kfsltnL1xkr+DJAUnB4xZy4jvak5zLOGQ/YJo4FNlX3P/mJxYUd1d5Jk1LwzsBoAYES9qeCaApQm+LDEPvaisCwcDniv3lJ/H1X77Ee+Lw56rEB09+N8D6oL8EqWY8D7GTgYqH3aegO+r2cC4Gx3RMeNoFtROPc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934408; c=relaxed/simple; bh=y0eTf6sBBqtgXOMcKj6+dRH4mQYHxDct/p+oWayuTuo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=BPl4jGo1y/ADTiStQ/M2HlFsEZRwg7zutyGY2h6AKPFS8lwJ8rdpsrqPSWomlRp2XLn9l+TSl89l1UeMQgTz9z9aETwERSEat79iDm9IkoUev1etTmteutHhG17MAU67mflLjQ0ixiRYesNFZESIvmmMtTDzKRRB7yWy/WLTtUo= 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=VYsGQwdb; arc=none smtp.client-ip=209.85.214.202 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="VYsGQwdb" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2c804e38cb1so10415965ad.0 for ; Wed, 01 Jul 2026 12:33:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934404; x=1783539204; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=KILxImADtcVlkoacCtqYmxEGcZEGxD9ytdtd9JfAHyU=; b=VYsGQwdbjNJamdALhE5BlmfZWBGea3Xdh8PfI0QLC+lE6ZyUQD0GnseyDS4wXNB6NP 1jPilYvwLauF/zZwSz3VMO8R0HoH8UAPNUtSjrgKMoPwPABRXzoGLNKPYUmmAkJRq1Oj OQU2cmTECKsQvaa4//608dJkwLv4bOKIFUHQkdndI8uscNR/oJNp6IEUI49ae9n2lPOO jIH+47lmH3sW8dypj7XK6izqBPyw6bKYlOHoMBxMw6v+zCN8F+soOCkeyfKB7LwO2lln 6bXN5cGaBT+RZUNeQYwR4x5x2l1uf8VRjmQXewatyNgl5CBM4OIoCA9KZBmDWkSj+uv/ SR1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934404; x=1783539204; h=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; bh=KILxImADtcVlkoacCtqYmxEGcZEGxD9ytdtd9JfAHyU=; b=apZMaxwZ/tpk1wxgzNaPYqsm/VPQqUbQS06d5YWm+frol5UnRzKK3of+HJC1OCh13r C2jp6G0siLvr3PhIYH1UmaqKv68wjhddCIOXjxV2aLPM3cYnjd+S2js5CgGb/mhmP5ZL Gh9JUieA3Xiavyspyjp9/9aQ1zaK5pMV4h85pdSHJNQ9SK0Gp3W7dUsUDzeMySLGrbWi /3RCRAVWWRqTwffU/sLafrayxpnvyh5ovPeNvownHFgKRP+7A0KqdEW/ZINi1Q8ip1T1 ucCivyFpI0jpEYQ6WlIgNXxTWX7ehtAX8ChqoT1ihWkl2bWhHuFozHHKKHS+ly5+08Vy e3Ew== X-Forwarded-Encrypted: i=1; AHgh+RpMBkwQb7dVfaqLCkLAvLI0SRwXSjE7/9tc1Suv2ExXFrCbAyr6C3oChClrP5ZJGOXbWqLSPkId948/6hk=@vger.kernel.org X-Gm-Message-State: AOJu0YzYkNAEgJ+k2St5Htqw4F0zaGoYmkYCC3KNnnwepOdncMXPE+jq n9DbKVTPXlhD2iym3Q60SI4oL0WlMM78ZcgbXU83SzkSUbzhCOrPlYpD9LGF1bupcbVvxP5CduG zHe+uVw== X-Received: from pltf1.prod.google.com ([2002:a17:902:74c1:b0:2c7:5af7:37a3]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:c952:b0:2c9:c169:7483 with SMTP id d9443c01a7336-2ca7e87dc6bmr34187285ad.37.1782934403691; Wed, 01 Jul 2026 12:33:23 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:32:08 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-48-seanjc@google.com> Subject: [PATCH v5 47/51] x86/paravirt: Don't use a PV sched_clock in CoCo guests with trusted TSC From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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 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 012321fed5e5..a146fc7b5e74 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (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 DDFFC42D6ED for ; Wed, 1 Jul 2026 19:33:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934409; cv=none; b=hzIwzzx9/0bZswKvV1kPtCJvi54u5hYrFKf/h0mmdSaPu1+xGLCBNDNH5m8hAQI62wf+E1mwzk4QQlL56SY6hV9nM1+olw5aEnmiO1TymcRzHokrf8iPGYeCy3z0BIKam4d7RHq+RUbOlOEDvMDUFltIyyVdIQfGVtIoh3S8ymc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934409; c=relaxed/simple; bh=1+k5bW4sotKJMM0NqHqr71EffqplV+UQXiw8XbSTW9o=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=gJJf8iGL3VUKnQ/OlG1oxmDDNWrA+uJHVRq/NzxhnWCV95KX+P2n0VsiGSzXS3CaS5TjKypK5TBVyo9pBzS6Ez765rgsUAODrOFU6t+e0hNyQ6Xp76xAerpCtluc9+DZeaWpXne3QRM/94cJ8C87/HeIwHa0LftAdBy1D2XrbV0= 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=c3PeuXt/; arc=none smtp.client-ip=209.85.216.74 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="c3PeuXt/" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-380969f6d97so1688554a91.1 for ; Wed, 01 Jul 2026 12:33:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934405; x=1783539205; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=sbysuOQKV7W7YbruNHYRSyCV0jaRsBQX5EoVXm1Gq/A=; b=c3PeuXt/tgiO285TH6bRFAbMFKTiwEoZzlXsqPEiFWyQ2FpgMWYceyK9lwkLeHjKah +el+ErfWA4ciWbGnFYAI9UwkLpVFKKV33LWWNJPOujoc6UMgbeyqzYvq+zyf8wxMlMhJ qhd1KRHCj64PN/9fero+0OiR1fBcpwhGljrDYLM6+hG3BO/vMcgfUQevJJA+eAoe39Px +fR1usn1w2CqZ+Mux2iVwmt2dE32CYy3Y7z107q1NJmCurRuyHyWQkGXhvSlptgbWQ19 jJfWBqvU3cZQCrWbQtZrb+RkLetwPZ7LFpHYwR+3PVSePKvGipi2vviFW/SJNU84lK6X gY6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934405; x=1783539205; h=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; bh=sbysuOQKV7W7YbruNHYRSyCV0jaRsBQX5EoVXm1Gq/A=; b=JDdd6DKFFc2MUm1/xHJUc5WLzhNMsFrbIeKMtVNvvBLorSBawDh6PMH3Lx0ti89VxD Yl2Al3suy+WA3qTS4LPo6Y7Cys2Cicot88qwLu95AXtM2d1jkq/P1yZNDYgoeob+VVaf Y2C1UCrgJqCpT9X40uyUVkHLQP6RAGMUNLxKwe/xHyBIGBuHp6Wp3W5TvBllB4z70s24 3iOA2VxtLW+NCH4YF45YSyyMp40rIrwy3izdcU74mTtStIr/MlvVJbAti4GRExdjjYRZ b8xeKXl4V7iRk+RnjLeGWexjG3nhdP9rXvzfTMoABGFLE0fGnCVWeMiyCXnx05N+qlA4 g8NQ== X-Forwarded-Encrypted: i=1; AHgh+RrdLanN0Dq2PIoV49rhPueVIX0PNYLVyfE8Z5Vn5bsNYmVilUcGIUU/8fW2NYYQLUJeoDnPjf4PXJX9SCw=@vger.kernel.org X-Gm-Message-State: AOJu0Yyj7cSUiHWdX9Z4aMh5qu3X5D4/AIDs19P1Eonzn9yiIdDPW10Z NT5OPIOW5fmzAoeJVEVuRkrQSVxTUTLk9UvN190XTv1OAxSWXoEuK5gzzosZ0/C39SI3EG5oq/1 8eh2U/w== X-Received: from pjbbf15.prod.google.com ([2002:a17:90b:b0f:b0:37d:e898:7cd8]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2886:b0:36a:f612:e6a3 with SMTP id 98e67ed59e1d1-380aa18d2b1mr3062418a91.17.1782934404832; Wed, 01 Jul 2026 12:33:24 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:32:09 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-49-seanjc@google.com> Subject: [PATCH v5 48/51] x86/kvmclock: Use TSC for sched_clock if it's constant and non-stop From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (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 DBF7B42D70F for ; Wed, 1 Jul 2026 19:33:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934410; cv=none; b=rwlFAIu3bjgo1MzZXFUkKYi/IlDQbg2Iw5w2v+z5jSwnYVJDei8mQQ3ljMo0zQG5vXPdWsNVnfWl/hHP+9g2b9WLDjYFCnrx0weO0M5SFzxQaxn94/SNVWuncRaeWJwUY6nx0y7VcGa5XP/IQH9qeJclZlOeEpjTU/JEjN6chJo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934410; c=relaxed/simple; bh=1PQjxlx5nubnpTfQaTN8BFLRTtJFTrF7SV6DilzQr90=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=OTIZpzTLjnrXt2hZJ/A6HUby0NY1Q8LeGoZTLSmje1DrEFNGVcV0HpUYPszA2Jk04Rasy+i0ui1DV0tTf1Any219wvP9SzsklRlsZGW3Qk8Bd3S2FZn/HSwiKOkoe+u6zWpzIkwdwbzUohqRWpkHGCDVCFBc01l+wMUGh84YCOI= 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=Dv/irHEq; arc=none smtp.client-ip=209.85.214.201 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="Dv/irHEq" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2ca1f16e391so11759085ad.2 for ; Wed, 01 Jul 2026 12:33:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934406; x=1783539206; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=TVQraC4E63kxSjnR08hIOoNSz/X8YqL1FfZb6Oo6qbM=; b=Dv/irHEqt0nTIm9YtSOaBUL50OgmzGDj1bZ2fbidixjdaiBmbYE6bqInZbF+o3sCCj 0EnKUciZAIrk3G7WkbYEc8RSDHVaVf+DUygUrer3z+u2vzhMHnIQGDpuHzA2FMy4xXAH ACWFJRqij4niFHZseKv31PQmZ8QQDHnT9xkyhrxer3YDp4jWZsdHRtc054+X64XAUk3F Hef5rYnwcuvgVa7oYtjfdVairYV5FUQzn+LP5GHoWJA2U1rhLT1zoFqikhH55Z/CKQEe ccZfBP1ZcCovCtr/QED88tJNcj42CrTZgOgsej6Wz16DIqCRzOq0DzNOmdRfy/nxyDt/ zVTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934406; x=1783539206; h=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; bh=TVQraC4E63kxSjnR08hIOoNSz/X8YqL1FfZb6Oo6qbM=; b=sgzT9hJt5FjHrEeY9osBWcoF0ee0FUSI6HY0sNS7oS+kvrDdFOZUfpJ1TVzwpAj2x3 5dCbgbGwmE7iRTMGc57v47mTaaJfNOlsWcoQXAaKTeTvssTla2MoLSdSjdUr3wQO1678 22+voW59R50VNScZ3w9cMAAa6W/6ggJk6vRoDimy4e3swdAPH920CV6rSEKOwGVC39Zr HC6/+iYFXKmY253HFy7MPeIksA5gD1lye4wsL+ff7s7tseCH9Sx4EPE/cGnYJBgwDvWz UFX6Ae7YHSacBOzxlkFmMrqqIAZiRGdk+/wzncIF8WqqtfuVtBI1h6+ef5cnmP6dYu0B FUUQ== X-Forwarded-Encrypted: i=1; AHgh+RoSKDQoVBV9Yoc+pa/hwX/80/0nLEbjKZG/iKSN+NfHNT+y7cB7AO1tprj+gge0ZUc4rEVpvURT2/HkolQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yzq9/ROaB55lGOZB8GrL0M+b6pT0/CnL2/BAWWhZmL2nAEinuNj dPQM5YFF3rNbZlUYC+9BUmKonLjbIAg9W+WkdJ6cNexnk8NIr4lL4tbi6wJVTYuVWqqzeaXWjXG bKA9Y/Q== X-Received: from plkg7.prod.google.com ([2002:a17:903:19c7:b0:2c6:a4ed:efee]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:c94c:b0:2c9:c97e:71cf with SMTP id d9443c01a7336-2ca7e683909mr35659695ad.6.1782934405912; Wed, 01 Jul 2026 12:33:25 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:32:10 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-50-seanjc@google.com> Subject: [PATCH v5 49/51] x86/kvmclock: Plumb in AP-online and BSP-resume to kvmlock, for documentation From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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 604b52f233aa..f9a6346077b0 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) @@ -750,7 +756,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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (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 4F9014D2EF4 for ; Wed, 1 Jul 2026 19:33:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934411; cv=none; b=aVvGczkk875SXM7/8b5AmnNHdZy8nuGGTQFD9LNuoB47/P+o+YAiye/KD/oefwoAo2y3DmI2jVqC0033hD47Ahi6X55by3mDQpu5A4U9BWZdlw/ijmdlwkTiaRdEyHeOmTa4CXZg+MC16lvD2gi4RlLecDHkQjapCdaqsBKQZA8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934411; c=relaxed/simple; bh=eWWyL7UaDO+jO5zpybHvT2ywbxk2X6+2Y5u8hqaq4xo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=BIvNJwmwoR5Uy2ClN/zNDAlH6sFM2U9+4ZgYeh9lCgiSdprBTcUO0oeYUSd0fReQ31kYYrw7SrGOXaC+NI2DwWsooCg6m46kVjM2Ep0l3tNjRnwPDblfQXEk+23fwJ5e8HMa7YPaM8RC7NU4ussp+waHoLZuAIjZlMPIUcGKihk= 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=tX3Nf3ES; arc=none smtp.client-ip=209.85.216.74 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="tX3Nf3ES" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-380a638fb5bso818893a91.0 for ; Wed, 01 Jul 2026 12:33:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934407; x=1783539207; 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=BBdglu7Hd/NWIo80QzRStfEHhLuTnQAY4zgBWN5WaBQ=; b=tX3Nf3ES0CGsDO/m7eU49aDvQK/9mnb7NF8+IEiQlJx7nsJyORAtD39WmwqtL3chd6 meNrsW73xdBmGh9IuLuyH2+uypT9l3EmCSFXU6FfHP0FgP2leqkdhY+GGuxzLXCPwVny 89jeFohIIExwnrNZe/zUVjOkdCD7a48UuyiKrEeVT25TvYfayrOa81NiGjjLBn8Sp7yf AbXpBAoL+1n+9Hk1v/ugu81tdt4wqv5rI1jKnJYJDWZdyvIJsZF2KuWzJRlWpbqdBvqd Lma4oivVEZ/dgR4vbGtbOwur/CWvKSuYSZT9DLn6oEM6KWhEvpee8qsHuKFGzYaYf34y j48Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934407; x=1783539207; 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=BBdglu7Hd/NWIo80QzRStfEHhLuTnQAY4zgBWN5WaBQ=; b=Hyd8gHwuwsu4dybK3v9tnv8SFVrZE6D9vA9k9rXT2Z279lnuZaLCzzEzMK+s4l4Wr9 /zDqV/hmR0L/JkcYiO/y4ma2Tom/I6FTbxTnJD8UNpwJXpuwYqkgSK1xgUg3K+xbDFI8 jC3dMe3jecd9Duj26FhzKklsbsWXXSJDoQCXr6IQ9JyVOOMBqeGF0tYWzYRts3hHJya9 kezSznkEhFNXQyhnAPil53PFmoBxxLK6GoKs33dW9LzLMczy7R+ROv2dIht5I2Sn/zZe NIGf+dydYNUyTMYTkshRRrQvMf2ryBXHg6+skvmZ0NXMxqyK6d1xf4XnaseaRGMxrC95 CWeQ== X-Forwarded-Encrypted: i=1; AHgh+RqzDdx8+kOUc2nouTkkz8OljXXvjtAZxlJJ/apgnYNDjsrieAJw7QTQVYXTfeTfuZtsNjJLA1la6p7pGQg=@vger.kernel.org X-Gm-Message-State: AOJu0YxkfHd0zCykSv9u9srUenbqfIWqJoVciCzVWAz9B4GPCRGkbJ1C IfOn1dpI9RRtxHQVReONkQSMX02gI0cVLtFOO9cRFH1EjSdAlFEFjD82VxADKIiA5e+EzNR8KF7 3Sx50oQ== X-Received: from pjbmt23.prod.google.com ([2002:a17:90b:2317:b0:380:79f2:a916]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3a47:b0:37e:2005:6507 with SMTP id 98e67ed59e1d1-380ba84865cmr1899432a91.15.1782934406994; Wed, 01 Jul 2026 12:33:26 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:32:11 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-51-seanjc@google.com> Subject: [PATCH v5 50/51] x86/paravirt: Move using_native_sched_clock() stub into timer.h From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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 a146fc7b5e74..564be4faa5a0 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.rc0.799.gd6f94ed593-goog From nobody Sat Jul 4 21:05:51 2026 Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.201]) (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 4921542E8E1 for ; Wed, 1 Jul 2026 19:33:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934412; cv=none; b=mzu02csp1MJBkZUxHMf2kJvYZroolaA5YFdDsQvyI8P89kPtlUAhbDx/u4KcBUwHtIsRqMXi+pUm2pF+uCCr0kUuPzKp356oa0qjsrwjngV0qd806NGB0M5wOQTtpL/SkHoH8zy8Nof/K8tCBBOko6gHZmBc4qR7Xg1yC4hbkUo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782934412; c=relaxed/simple; bh=t2gV+eBO9o787fvbLEefqahl8FVWKIIpfUP+z3tzyok=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=SsKa+A1ZHJWdQ6LvviY9Ck7l6P5pJORB79lddYP+pgz2zMa4FwuyiqyFFXQEtXJv5UeaC08jr0E7XriCiPM9beZhw3OaSx5Nab0j78B6+xu/3YqKi9GMWGtrLp9QDPA3yBkRenRaOfPQsq5w4Yo3UEZezY9/dRY3sXUudNLKNXc= 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=CpGN1P1H; arc=none smtp.client-ip=209.85.215.201 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="CpGN1P1H" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-c894c1c4aa9so929052a12.0 for ; Wed, 01 Jul 2026 12:33:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1782934408; x=1783539208; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=ukYnz5D3jEol4z1WUeRHDVtFiLPopAappLYurzMw/rI=; b=CpGN1P1H52ALfmV+alPEufAf7OZvon8wnQ8RSUhwdN+rh0MsVG22DNGYwW1G3Sklve tgpt1TlLtiRwjPGPwvHyHTE2rIINLSOL6kEpl0umVw7vVlCFFJmnawfjTtANyEacNiFC QEaaSL49+7cbPBf5MI5EQrhzVS5pvCOwC8yvzAsqiIGu0G0KtuOliTEyZfpbu8KY02Ly B7IBv1vk/+FcKRViRdCS2Tt/v0m+coR1rSyNmfMdlw8wN0cGTFKMaGC0XUlGnTyfCWak 1OkT0CyamIAagzIgBkLYnxEUb70jLJBVnkSHpckGOgj7tytUB9DEEYkZ2cbQ6NZq6kOV /06Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782934408; x=1783539208; h=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; bh=ukYnz5D3jEol4z1WUeRHDVtFiLPopAappLYurzMw/rI=; b=gW3MyDGlLrakOELxDD74QqgZlzd7TkcW5LzNPlHTpy1Pf/9i5D17Ypws0HTz7SMhWA cH2T9pG8TWhrqlpeFFwzyycvZUskuskbjKyx+lDDBqcj6/+mUxjGn8cfYzmpN/z9sq/1 +6SlS7kHtD1LJD5J7s+qJ1r4VaIVpRF+BFDpQe0VLl/t/XVmp12Jh5S3QX4P7pHFihX7 mgY6Zns27p5ea/tB8sRZk+AHun4/9vtOQY9UUPA6HamG5Kxj/CJO6p7X1Xpt968uW342 ayjGomlxV8wd7uc9WoiIYOjmLmRfOB2ZEJn1D4ZfcOtN6AkfVfHXBa+fhSWnk0NAQhl4 QBRw== X-Forwarded-Encrypted: i=1; AFNElJ+18FDtkYX8pOPCfBmqjY37B3WbdS03gCddd2apeE9IXHhb5915UVjqYtc/8B+B7OLTGZ02gYI6mNJMOAA=@vger.kernel.org X-Gm-Message-State: AOJu0YwazEOzGEXE94Bd+UfKO92APRNTfoWsbVPzj8xBjAlOWRYcoPCo CmG3mRllhnuBqVg3oYH/g/HvYF8S51BfWB0TuAmVxwyFbH51t51spMiyreTxfWEja+oCg52kURy sM/cYJQ== X-Received: from pgad26.prod.google.com ([2002:a05:6a02:4f5a:b0:c99:d21a:f6b7]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:748b:b0:3bf:d1f9:b1db with SMTP id adf61e73a8af0-3bfed5e1001mr3530009637.52.1782934408107; Wed, 01 Jul 2026 12:33:28 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 1 Jul 2026 12:32:12 -0700 In-Reply-To: <20260701193212.749551-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: <20260701193212.749551-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.rc0.799.gd6f94ed593-goog Message-ID: <20260701193212.749551-52-seanjc@google.com> Subject: [PATCH v5 51/51] x86/kvm: Get local APIC bus frequency from PV CPUID Timing Info From: Sean Christopherson To: Jonathan Corbet , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Rick Edgecombe , Sean Christopherson , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Long Li , Ajay Kaher , Alexey Makhalov , Jan Kiszka , Andy Lutomirski , Peter Zijlstra , Juergen Gross , Daniel Lezcano , John Stultz Cc: Shuah Khan , "H. Peter Anvin" , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, xen-devel@lists.xenproject.org, Tom Lendacky , Nikunj A Dadhania , David Woodhouse , David Woodhouse , Michael Kelley , 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 f9a6346077b0..beea0b6aa78e 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -990,7 +990,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) && @@ -1052,6 +1052,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_period_khz(apic_khz, "KVM hypervisor"); } =20 /* --=20 2.55.0.rc0.799.gd6f94ed593-goog