From nobody Sat May 30 11:15:07 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=1780065924; cv=none; d=zohomail.com; s=zohoarc; b=XsGXC29COaTINIo5TVdNfccd5xhNz+DYlHv1HtMb2dJSBqo7qgXHzsjZIM7uxlrQQTLQTN4L+Y5zJ9EB8kHr8ND7XQ2xTzm+URdOLrY4tYps3r+XH5qXucdEhP8MLdFEUsefY5D+2lKPeXvC6urd/ArPfszjF9vfu5j0yUxMTXo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780065924; 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=L0mUatEZLxv6BfkDJUt0JsLCmFdWpOkVYX50Nml1d/w=; b=iYIxfC4XheT0Gkdj0Ix4L4iQTAGZRkpR3rUr0DsIDTWklhmAMfQTzOhbNYVI4BJeH1FruxmQ0CRveElgEFwRiilbqkGj9jbG/MK1nkv7rqWiz55Xj8s1oFVIge55wdYXRzOL/YVk3bsytJBR6JLseZHHvX287FIMo6k7rLxV5q8= 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 1780065924253971.6688127196837; Fri, 29 May 2026 07:45:24 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322200.1588429 (Exim 4.92) (envelope-from ) id 1wSySH-0001vZ-42; Fri, 29 May 2026 14:44:57 +0000 Received: by outflank-mailman (output) from mailman id 1322200.1588429; Fri, 29 May 2026 14:44:57 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wSySH-0001vS-0l; Fri, 29 May 2026 14:44:57 +0000 Received: by outflank-mailman (input) for mailman id 1322200; Fri, 29 May 2026 14:44:56 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3ZKYZagYKCW8fRNaWPTbbTYR.PbZkRa-QRiRYYVfgf.kRacebWRPg.beT@flex--seanjc.bounces.google.com>) id 1wSySF-0001vA-SF for xen-devel@lists.xenproject.org; Fri, 29 May 2026 14:44:55 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSySE-004cdT-MQ for xen-devel@lists.xenproject.org; Fri, 29 May 2026 16:44:54 +0200 Received: from [10.42.69.7] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3ZKYZagYKCW8fRNaWPTbbTYR.PbZkRa-QRiRYYVfgf.kRacebWRPg.beT@flex--seanjc.bounces.google.com>) id 6a19a653-e002-0a2a0a5209dd-0a2a4507e0a6-22 for ; Fri, 29 May 2026 16:44:54 +0200 Received: from [209.85.216.73] (helo=mail-pj1-f73.google.com) by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3ZKYZagYKCW8fRNaWPTbbTYR.PbZkRa-QRiRYYVfgf.kRacebWRPg.beT@flex--seanjc.bounces.google.com>) id 6a19a665-229c-0a2a45070019-d155d849ac94-3 for ; Fri, 29 May 2026 16:44:54 +0200 Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-367f715cbd0so13424631a91.0 for ; Fri, 29 May 2026 07:44:54 -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=1780065892; x=1780670692; 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=L0mUatEZLxv6BfkDJUt0JsLCmFdWpOkVYX50Nml1d/w=; b=gtdAqbfyNUYJF7GXqgRkbtDOAHLELFzQpdZBq+znIFuBpENnvlpvM/EoXSUj/nJcoV wn6s9LJ5DS+QN0NNcqxkV1ZeHPoWt5VTvv1Huyzy4Ut316Ohr0apAmFdm053U8PEIMBy USlMjkxpWVzQKW/Z/Xwm147Ou4pIE78yTXpGhFAmH8QXLcjQmark/PBirkxZeRqoaTUD qclibh706zabyQXpRhYcYFI4eUaOEHMYpQjCArwcJ6LAw9Il5W9DJRMs84GFF9Gt80kx 9uKwGNp4FJWbr4Z/vS4b+NXlivM9bGzTUamJfInCrT3n6af+zqRz2MuO4UPUjdwW3lJl 9XNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065892; x=1780670692; 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=L0mUatEZLxv6BfkDJUt0JsLCmFdWpOkVYX50Nml1d/w=; b=DUlZBm2Na2S0kjmPFwcvyYM7KPd0FjPLZ8RxDPybOJ9QFkg75iN9bdroPz6Qz2de1l VKEll07LP767tZXD65V/W0Ae7ty7KuMXbsEIAaUsNbPSrIWRSKlf2OQ5raTuMmvB8j+U lG/K5sOFkoGhn/RKxjgr8KRE+o68A5IJP4MkHkVfIKy3aJ9974ncgAPZ7wW9FJGf/TWC 7kDo5omYwTZUOMGkmr0eimGT+PYqi/Vw9mDiSLoei96m8QXsWko6DdqnWI/nE9AYDwHm 5vMlKDcJ2k62au+PHEDBbmr/702y/2v5oj/SqaEo399CoZ1UseLEprI0vn1nZuRZefcS 2+sA== X-Forwarded-Encrypted: i=1; AFNElJ8w/5zH0bcWVJeAoE/M6XPLmdQuSoKr6yV6kXBAFQKSsXKjBPZlbeMYerKosFXbNfwXta24AfTNQFQ=@lists.xenproject.org X-Gm-Message-State: AOJu0YwR0Gz2pn+3MeSWBoAsn8gycbV3TT1X7qw5Pob7Q8opYrloIxSy 1U76RMJvTVkGedHL3QQKSeI0xc78ITVujYRmP/5NbZJjBVRkU9b8fYRLEAXrS8IZXjUIbjNMWmh REfy/1w== X-Received: from pjbev8.prod.google.com ([2002:a17:90a:eac8:b0:36b:d883:98c2]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90a:e707:b0:36a:d6dd:9fee with SMTP id 98e67ed59e1d1-36bbcd6f8c3mr3583126a91.12.1780065892195; Fri, 29 May 2026 07:44:52 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:43:48 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-2-seanjc@google.com> Subject: [PATCH v4 01/47] x86/tsc: Never re-calibrate TSC frequency if its exact timing is known From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-ef75cf/1780065894-0AD77C48-7DE8818A/0/0 X-purgate-type: clean X-purgate-size: 969 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780065925293158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Don't re-calibrate the TSC frequency if the TSC is known to run at a fixed frequency. In practice, this is likely one big nop, as re-calibration is used only for SMP=3Dn kernels, and only for hardware that is 20+ years old, i.e. is extremely unlikely to collide with TSC_KNOWN_FREQ. Signed-off-by: Sean Christopherson --- arch/x86/kernel/tsc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index c5110eb554bc..08cf6625d484 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -946,7 +946,8 @@ void recalibrate_cpu_khz(void) return; =20 cpu_khz =3D x86_platform.calibrate_cpu(); - tsc_khz =3D x86_platform.calibrate_tsc(); + if (!boot_cpu_has(X86_FEATURE_TSC_KNOWN_FREQ)) + tsc_khz =3D x86_platform.calibrate_tsc(); if (tsc_khz =3D=3D 0) tsc_khz =3D cpu_khz; else if (abs(cpu_khz - tsc_khz) * 10 > tsc_khz) --=20 2.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780065934; cv=none; d=zohomail.com; s=zohoarc; b=fO+yHslyVOnR6jBN/cpTVpZM3523JFiFYoHCwnq/jqtE6XMSXqgKq8ylaisp1sGMfRIiDi31fSC/JUs0kcpxIRCckcTVpnrefiHi5pE3btkyaZGppeCc5s5G/jUh60A1DEqdAWNmOD+lNHT97vdrrMoQJMcwPBUbrNo23U3a5eg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780065934; 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=QToNnoh5SrIptFu//tMv5GaZF9D0Gq2HC3RBnhHkcok=; b=FgPfjhCi0qfrVOIT68puNV9DMLZU2m2cBjEC5fYsFMbAvB+37Dn8uSGFInbapqslaGdOj/sXQKcCICSLXa29jLd75jamyhbtEgtGvRoBFdnJDECqIAYXcR8ZvthNoLbWPKnB6xVTyVP1nyHHKVSJenlvhtP8B5IUTnFVc9I14wQ= 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 1780065934031559.3594244510421; Fri, 29 May 2026 07:45:34 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322202.1588440 (Exim 4.92) (envelope-from ) id 1wSySH-00024a-LH; Fri, 29 May 2026 14:44:57 +0000 Received: by outflank-mailman (output) from mailman id 1322202.1588440; Fri, 29 May 2026 14:44:57 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wSySH-00023r-GJ; Fri, 29 May 2026 14:44:57 +0000 Received: by outflank-mailman (input) for mailman id 1322202; Fri, 29 May 2026 14:44:56 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3ZaYZagYKCXAgSObXQUccUZS.QcalSb-RSjSZZWghg.lSbdfcXSQh.cfU@flex--seanjc.bounces.google.com>) id 1wSySG-0001vL-Gn for xen-devel@lists.xenproject.org; Fri, 29 May 2026 14:44:56 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSySF-000xpH-To for xen-devel@lists.xenproject.org; Fri, 29 May 2026 16:44:55 +0200 Received: from [10.42.69.8] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3ZaYZagYKCXAgSObXQUccUZS.QcalSb-RSjSZZWghg.lSbdfcXSQh.cfU@flex--seanjc.bounces.google.com>) id 6a19a652-bab6-0a2a0a5309dd-0a2a4508ccec-34 for ; Fri, 29 May 2026 16:44:55 +0200 Received: from [209.85.215.201] (helo=mail-pg1-f201.google.com) by tlsNG-c1860d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3ZaYZagYKCXAgSObXQUccUZS.QcalSb-RSjSZZWghg.lSbdfcXSQh.cfU@flex--seanjc.bounces.google.com>) id 6a19a666-63b5-0a2a45080019-d155d7c9b134-3 for ; Fri, 29 May 2026 16:44:55 +0200 Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-c8292e18166so7016596a12.3 for ; Fri, 29 May 2026 07:44:55 -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=1780065894; x=1780670694; 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=QToNnoh5SrIptFu//tMv5GaZF9D0Gq2HC3RBnhHkcok=; b=OI+Qeqp2sBgBUjI7V7MlomkKInwHaXSAg65whwqbE/AltjjZWH7qkKarRvnzPsXt+G SMUQD0ZcAy+S36tXvNZH9J+cfO40um/9BmzjRPtd+lqCNdI9aKUCQbXq4goEZ2DPnMqA wl6YP3d67AkqlOGXGoU3evy7XqFgZCVSTYIjBUU/kOua0nhkopp3zRQuEZmLfoK2HlpJ pqn36vj1+CIUVhvAWHpt5sIiMqQj+gT7riGZCvsuuh8gPYGOJ7e1VSzPnd+toVK+4m5x l9AYpuJKt5dv1Z3smxeNus1Wea+DPhfkYRieFW83T7P5bYjNYesxCAWT11CRed9QFoDB 0DMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065894; x=1780670694; 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=QToNnoh5SrIptFu//tMv5GaZF9D0Gq2HC3RBnhHkcok=; b=Lqj+Y9DGX22p2Sl8r5R8EYAqcJQ7waUHaTMEGXzbeiEodINutSysHl+7o8GgSt66Ww 7zbVAD0A5yGlVp9+gz2vwdsPjODOr8weDy+vTChv31j+xUBxHCKmhYRVOdXPjcQSm4tC su3y6a4QYWhiwXL1ozsqBlxN1yxMyRYBWsbhG99ntfhrOAnbb4W5gElliwdKkaH7Zhmt 6NRW1CrbGY1fWmK6gSBu5CGTxz5BHE3+UrY12d1ho3oVRAcnBm2/QnDYOGtGH99OXsML af72Fy0U0zyG8uwu6CTek27zxMg3Sap68oWSC8/BvxMF+btV73R3AhRD9/VtQ8qoZpEu iHMg== X-Forwarded-Encrypted: i=1; AFNElJ8CoiyVRa7U72JDW17u6LQDPT72ahPbE7Rvhs883ImYI6RmFTs1mfwmtnyHZKDpOoYcmpj10be0IDc=@lists.xenproject.org X-Gm-Message-State: AOJu0Ywne0yrOQhZtG22wn0MLM/SZSmhlfFKn3oRPNvJr1E7T1VtcViT pZNFAcXS00q4XShrMswKaJUjLwjipaf03xNT7KblraN+S9WZPzmVDPZQmVCXHXxa1UKbWRQauzH dvufrHA== X-Received: from pgce4.prod.google.com ([2002:a05:6a02:1c4:b0:c82:354b:8e38]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:6da0:b0:3b3:bdf5:117e with SMTP id adf61e73a8af0-3b411dd174cmr3909322637.27.1780065893358; Fri, 29 May 2026 07:44:53 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:43:49 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-3-seanjc@google.com> Subject: [PATCH v4 02/47] x86/tsc: Add a standalone helpers for getting TSC info from CPUID.0x15 From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-c1860d/1780065895-BDB6CDB1-C939987C/0/0 X-purgate-type: clean X-purgate-size: 5253 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780065935045154100 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Extract retrieval of TSC frequency information from CPUID into standalone helpers so that TDX guest support can reuse the logic. Provide a version that includes the multiplier math as TDX does NOT want to use native_calibrate_tsc()'s fallback logic that derives the TSC frequency based on CPUID.0x16, when the core crystal frequency isn't known. 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/include/asm/tsc.h | 8 +++++ arch/x86/kernel/tsc.c | 67 +++++++++++++++++++++++++------------- 2 files changed, 52 insertions(+), 23 deletions(-) diff --git a/arch/x86/include/asm/tsc.h b/arch/x86/include/asm/tsc.h index 4f7f09f50552..6cf26e62e9a6 100644 --- a/arch/x86/include/asm/tsc.h +++ b/arch/x86/include/asm/tsc.h @@ -83,6 +83,14 @@ 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; + unsigned int tsc_khz; +}; +extern int __init cpuid_get_tsc_freq(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 08cf6625d484..f7f561722efa 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -658,46 +658,67 @@ static unsigned long quick_pit_calibrate(void) return delta; } =20 +static int cpuid_get_tsc_info(struct cpuid_tsc_info *info) +{ + unsigned int ecx_hz, edx; + + memset(info, 0, sizeof(*info)); + + 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; +} + +int __init cpuid_get_tsc_freq(struct cpuid_tsc_info *info) +{ + if (cpuid_get_tsc_info(info) || !info->crystal_khz) + return -ENOENT; + + info->tsc_khz =3D info->crystal_khz * info->numerator / info->denominator; + 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 /* @@ -705,15 +726,15 @@ 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.numerator; } =20 - if (crystal_khz =3D=3D 0) + if (!info.crystal_khz) return 0; =20 /* @@ -730,10 +751,10 @@ 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; + lapic_timer_period =3D info.crystal_khz * 1000 / HZ; #endif =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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780065921; cv=none; d=zohomail.com; s=zohoarc; b=OFr80uAavH/d+6kjp7eobfcgNsC/uY/VFifkOB9hFs5pz7woYUtNV9Q5EYhe8/eYWWGaQJ0omKDtaaX6RDbXdbvU68BtsQkihsny0MYVeOX7QYDoWXszjwI6Qa30U7xOfeRUvCGUwAaJVvgTGKPJF4U8y2i0itJhMjEEAbkwYww= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780065921; 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=BmTkJVHUffmv2iD67o3GahQBnXBWwXEIKjsjKzRmdQg=; b=SK63fahqwA/PThAE/vij6Z5FCyA+UlIfuCKHt4Krm6Gi6NhO2y2q6Ma1FowEP0wE+Fnlz2iJcQGcNuQx4eIlVV8xqmXUqJsKXh57Ye9P6NY1zWmcSt5vRrw5R+7u+o8LOy3Topgb+z6Up06FIqKM64XBwg34dutMygKCkHyx9hM= 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 178006592142943.39519701392146; Fri, 29 May 2026 07:45:21 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322203.1588455 (Exim 4.92) (envelope-from ) id 1wSySI-0002Y7-Vq; Fri, 29 May 2026 14:44:58 +0000 Received: by outflank-mailman (output) from mailman id 1322203.1588455; Fri, 29 May 2026 14:44:58 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wSySI-0002Y0-TK; Fri, 29 May 2026 14:44:58 +0000 Received: by outflank-mailman (input) for mailman id 1322203; Fri, 29 May 2026 14:44:57 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3ZqYZagYKCXEhTPcYRVddVaT.RdbmTc-STkTaaXhih.mTcegdYTRi.dgV@flex--seanjc.bounces.google.com>) id 1wSySH-0001zV-IG for xen-devel@lists.xenproject.org; Fri, 29 May 2026 14:44:57 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSySG-005qKS-V4 for xen-devel@lists.xenproject.org; Fri, 29 May 2026 16:44:56 +0200 Received: from [10.42.69.1] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3ZqYZagYKCXEhTPcYRVddVaT.RdbmTc-STkTaaXhih.mTcegdYTRi.dgV@flex--seanjc.bounces.google.com>) id 6a19a668-5cb7-0a2a0a5109dd-0a2a450193e4-0 for ; Fri, 29 May 2026 16:44:56 +0200 Received: from [209.85.216.73] (helo=mail-pj1-f73.google.com) by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3ZqYZagYKCXEhTPcYRVddVaT.RdbmTc-STkTaaXhih.mTcegdYTRi.dgV@flex--seanjc.bounces.google.com>) id 6a19a667-c1f2-0a2a45010019-d155d849e867-3 for ; Fri, 29 May 2026 16:44:56 +0200 Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-3663cbff31cso9157855a91.2 for ; Fri, 29 May 2026 07:44:56 -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=1780065895; x=1780670695; 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=BmTkJVHUffmv2iD67o3GahQBnXBWwXEIKjsjKzRmdQg=; b=Gw7szUH6Vcz40Mn+4g+W9wIGjb8HiWQH93sXRge4IsapFk3ySatozUwoHDq78AnO/k uc38agznM39UTVN1U8yVlastdxGmejU1SzogHlBTiLV4jkNHAV1x/V1M7lR6J7gHvtre +mHNc+p7L92476gijI8GyWG+MRQImX+3wGDVRYSp7Bf0gcNrm1h8TNbSLZWkKn74T0F+ KXh7Oqr8gaidcOijJaNNSbCPQUP0IOuP0OjZb81y4P/R9ISCx/dTylcCOXu1f/RqKy4j d0bwiJ3HJE+aCP7ZUsnHwBFZizpGDBB6U9FJmysxo1p9XW/+0y7pAxnCnJ+xXq5Z/B3r Ucng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065895; x=1780670695; 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=BmTkJVHUffmv2iD67o3GahQBnXBWwXEIKjsjKzRmdQg=; b=eSLHz9MJ+zSruYhCXBVpKMS9r7GmkMQjCxevgCzqmcE/nnSXd0BEUKTJ1UK8IVUUoF Q8vRdJbxMPKRa2pfMvLg6y6Ziw1lrvQ8eTI6JrgreX5BKnAnmtl5Ugo/rdBRwnTbYFgl +gbK7Ea3SUNksI+KNRsSd9bRgtbzea4Kbqv5Jvger59VLNxJ2b70ZK55C/mKGh0gfcaR K28jC6xkdf6qBfGV1EPQ1ESwfloE+w0EPQaGpjzr/2RIqfw8vBL5QiTsdX+pv6tedVdX ZeR/pkY6nGMjfYp4ZcG/QCZcmyir//I2GffnE6m/9aVA4TjvzlTQ4oqqa1R+LvLuiEKq IwoA== X-Forwarded-Encrypted: i=1; AFNElJ+A8VdiJv6cxB/vPqkoMQ8T8QoDqsif+ZVlyL8tZ7AD952oZNVMPmtlRV70i6JIQMAvy7cfadVFFss=@lists.xenproject.org X-Gm-Message-State: AOJu0YzzlRpQ1qti28T+sXq7nkpPt4mRqxzQZMvQik8a6hrBQ41hf6Kq Hi3GnD6V5yzsUayazk2mrfDzxAaxJsfJSYpEEeVUbz1nFbmXp8WIEQJEgqA33+MQE/ZS2hxwQNa 0QtAj9g== X-Received: from pjbfv16.prod.google.com ([2002:a17:90b:e90:b0:36b:7407:9b72]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2fcf:b0:36b:9c4a:e05d with SMTP id 98e67ed59e1d1-36bbcfe11camr4074961a91.17.1780065894470; Fri, 29 May 2026 07:44:54 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:43:50 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-4-seanjc@google.com> Subject: [PATCH v4 03/47] x86/sev: Mark TSC as reliable when configuring Secure TSC From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-d62444/1780065896-AE95FFF4-F63DC245/0/0 X-purgate-type: clean X-purgate-size: 1723 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780065923084154100 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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780065938; cv=none; d=zohomail.com; s=zohoarc; b=c4mGZZ4VHZnhxo8dou1aiGWpw5KlLXQvP38100bJeBeppXphXo5NHL8bme3kHCP55Z8H0QAYVpsdbTIzQS0XNbTZiOvYku8s28ZrXkeOEoH9WREUpinoTW4GfsR2bkZxIhslIUCMpx8zpjBcF8zCJeF8wZMTHw4mTSakMncje6M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780065938; 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=Q/Ssx6Evg+apl0YO4v5bDvJ7vmmhU3NWEJgFIU1d/78=; b=k6htGzpVsVFzExJrfmg5k/ZSSYIyOEcfDoa4ZJuAHNPLxHf5fJP1bNM275+nBobjMbwtqgNzMJFpqYEWbSnEBErIVsAAcYoCwl4KutPhi2VEdXoKoTW+9CqaYk3IhDZkgTI8H+yKqRSiQrLaLaZHf7dq1IfQq5tXE4WHUtdddWE= 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 1780065938276701.386250782886; Fri, 29 May 2026 07:45:38 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322204.1588464 (Exim 4.92) (envelope-from ) id 1wSySK-0002lt-BC; Fri, 29 May 2026 14:45:00 +0000 Received: by outflank-mailman (output) from mailman id 1322204.1588464; Fri, 29 May 2026 14:45:00 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wSySK-0002le-81; Fri, 29 May 2026 14:45:00 +0000 Received: by outflank-mailman (input) for mailman id 1322204; Fri, 29 May 2026 14:44:59 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3aKYZagYKCXMjVReaTXffXcV.TfdoVe-UVmVccZjkj.oVegifaVTk.fiX@flex--seanjc.bounces.google.com>) id 1wSySJ-0002eQ-J9 for xen-devel@lists.xenproject.org; Fri, 29 May 2026 14:44:59 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSySI-005qKS-W6 for xen-devel@lists.xenproject.org; Fri, 29 May 2026 16:44:59 +0200 Received: from [10.42.69.11] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3aKYZagYKCXMjVReaTXffXcV.TfdoVe-UVmVccZjkj.oVegifaVTk.fiX@flex--seanjc.bounces.google.com>) id 6a19a655-5cb7-0a2a0a5109dd-0a2a450ba186-46 for ; Fri, 29 May 2026 16:44:58 +0200 Received: from [209.85.216.73] (helo=mail-pj1-f73.google.com) by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3aKYZagYKCXMjVReaTXffXcV.TfdoVe-UVmVccZjkj.oVegifaVTk.fiX@flex--seanjc.bounces.google.com>) id 6a19a669-212f-0a2a450b0019-d155d849dcad-3 for ; Fri, 29 May 2026 16:44:58 +0200 Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-36b982ec338so1811706a91.0 for ; Fri, 29 May 2026 07:44:58 -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=1780065896; x=1780670696; 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=Q/Ssx6Evg+apl0YO4v5bDvJ7vmmhU3NWEJgFIU1d/78=; b=LhtWt9jkYEK+cdCFgV6fJQphooXitVUnfpijn90NyS/SqqCpvcADA7UJ82LcEg7pXz EgpafOZODlLxSwcKKcmnniau/OZLzF7KZLsRd1KtyrTYdA8ouz4/zqUqNPlfsx5eTNVd /wTCdn1F57z1rIhJ2Yksf1I1PdRsNYuA6b/QDEuWvjUhYEyNuidR3SCEzqP2HPTreUu3 K0aGT+PUM6uRoID8PcXhlg0gi8HC4cQG+x1rUbnBwTABAz/IiKZmslaIvUUr2QOAPG4T 5fjVWMQ5xQkPjIHni0K4CChm29oy+gLTc/eRsTd+95ga6Y0ZhN3VJ/WxqSIzTFKaEVsR CLsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065896; x=1780670696; 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=Q/Ssx6Evg+apl0YO4v5bDvJ7vmmhU3NWEJgFIU1d/78=; b=fVmuV7LwZyXifob8HM9eytrDkSawGS/UQoxKNBzpEf4BO/flKEfphLd4JHT69cNMxI R69V5kmV8yDU+oRpjMDf1/sUwewWC0ckIBfT0WE3bkMo6xrA68OruMf5nrQFaXA78slt Mo0LSH3BkQl7qMtw9yKsuaDUr2pdJ8wMbBrcn155GzdGvqSp0UMWbS+HgNG4teRW6FsL ziwalid4xxLF8JA691N4CJblHTbs0gy/wkdeTp5sIQXjz49dsJc2FoyW5iPuIXHWBQ+S Tc7x+1D1xmFfANEgdmxeb+gNT80MdOEHSV1b0/fQjM1POCr/IwXsX8jeE1GwKd1jGaGV RT2g== X-Forwarded-Encrypted: i=1; AFNElJ/3OPHo5WxxIRGPQ78JOIzLJ2vTPQC+22BgXfdjHvOpm9eRevqZcLM1eR/D1tYj2LrVLh6RNxattaQ=@lists.xenproject.org X-Gm-Message-State: AOJu0YwFuGJno49wqVCmsPnbEhAH8VCOU7olHgobbLfbsQjD2XSD6T8b KRZbdOGoVh4jgCRA4QUqunGCCop446yp7bXEhSR+SxCmPYZDXqiHpb1ZlfEghk/bnNnuH4e8G44 TiCP+Og== X-Received: from pjnu11.prod.google.com ([2002:a17:90a:890b:b0:36b:8d3f:d136]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:1dd1:b0:368:ac5f:d31b with SMTP id 98e67ed59e1d1-36bbd006f90mr3628748a91.24.1780065896168; Fri, 29 May 2026 07:44:56 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:43:51 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-5-seanjc@google.com> Subject: [PATCH v4 04/47] x86/sev: Don't override CPU frequency calibration for SNP's Secure TSC From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-42698a/1780065898-19F6EF3B-D043C1B6/0/0 X-purgate-type: clean X-purgate-size: 1454 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780065939133158500 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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780065928; cv=none; d=zohomail.com; s=zohoarc; b=YGyFiq9E0iTFYG3IY/M6fPbOdemq4qIxrbnr9+a0gwAjwc0KGlx9LfH4uKiF6y4T6xY84NXebNf1MT6hmxoJ9N9qE2H4G6jDDmC9oe6M7S9dv1rJ/YrNxYBynQ06p//Dv0/uCotjgacU6bbRd7L7akhNly7QcMp6ZWXHG+iaZfI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780065928; 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=xjTz/hwdMHYqh+2ceX2noAC2jls+xA7f9jce5I1nRMU=; b=R9C3svRKYvHo4UE4aolgR0NIldpFS/frnSV9tCdGdFOMr6Mc4vGX/F+kH/Os03nZ+Wk3K+rEl+GYXHKEt3VbVD3CLtD4P8WTB2O79hpL1wGsT26s51vQM8msDfTIR8LEtzHrijXLnlYfmsz9ahZrhMuJwyj6Alj5X6qeZpgyHVQ= 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 1780065928016978.1210103140719; Fri, 29 May 2026 07:45:28 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322205.1588474 (Exim 4.92) (envelope-from ) id 1wSySL-00030P-Ia; Fri, 29 May 2026 14:45:01 +0000 Received: by outflank-mailman (output) from mailman id 1322205.1588474; Fri, 29 May 2026 14:45:01 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wSySL-00030G-Ea; Fri, 29 May 2026 14:45:01 +0000 Received: by outflank-mailman (input) for mailman id 1322205; Fri, 29 May 2026 14:45:00 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3aaYZagYKCXQkWSfbUYggYdW.UgepWf-VWnWddaklk.pWfhjgbWUl.gjY@flex--seanjc.bounces.google.com>) id 1wSySK-0002lz-GV for xen-devel@lists.xenproject.org; Fri, 29 May 2026 14:45:00 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSySJ-00Fv7l-Sw for xen-devel@lists.xenproject.org; Fri, 29 May 2026 16:44:59 +0200 Received: from [10.42.69.8] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3aaYZagYKCXQkWSfbUYggYdW.UgepWf-VWnWddaklk.pWfhjgbWUl.gjY@flex--seanjc.bounces.google.com>) id 6a19a66a-2eae-0a2a0a5409dd-0a2a4508d1a0-10 for ; Fri, 29 May 2026 16:44:59 +0200 Received: from [209.85.216.73] (helo=mail-pj1-f73.google.com) by tlsNG-c1860d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3aaYZagYKCXQkWSfbUYggYdW.UgepWf-VWnWddaklk.pWfhjgbWUl.gjY@flex--seanjc.bounces.google.com>) id 6a19a66a-63b5-0a2a45080019-d155d849e90a-3 for ; Fri, 29 May 2026 16:44:59 +0200 Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-36bb6c41341so1429741a91.3 for ; Fri, 29 May 2026 07:44:59 -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=1780065898; x=1780670698; 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=xjTz/hwdMHYqh+2ceX2noAC2jls+xA7f9jce5I1nRMU=; b=PJMSVuLvM4ZM/zfFcVEXjW6ODKCpWJmOkODezlvbIkYCCl8T9QpqrfOLBh50tsdnyn T5jYH7FlP9U6MS2ISnCHj/0d2QgQDT0RKUZctdJDKzZHxSuXTx+oBzSKOwQrSnVPok5+ qUM7FP/nvQmgjcin28193IYZ5vRfL3REdDvQWgYr0pt+tVZyifvdMoFUVpM8UMAWuT1W gdH/2wgfBGqZ2BHWDVwhtenT9EhetW65g67fD981uDY9fvcoCYh8wOpFZ6dJGaoKtWe4 0Vx7OpzVj9dVx9HokaQtnrcn8D9Vz4VnIEiatWFhNQ4P6/rTzDAfjgKWWcBqjEeQZQLh 7PpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065898; x=1780670698; 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=xjTz/hwdMHYqh+2ceX2noAC2jls+xA7f9jce5I1nRMU=; b=pGlAKm5vriIJCDqgY2kvhJiLPvBHvvEBYwLW2cK4K4WqPXK5XMV7/Ljpz/J7U3kWLG 2v8J7n2Udb4FaKKnff/EXADTtT210lMeumcEWOxM6B+AxrKkJgkzppILNNjbRz2hu73L orUs1elEMxPjOrW7CSbueHAhjsSCg9PgKgrxINNYIgLOtCeasxSmPxM8GW3Te+YExpwW MjfWeWo56ePNRFgHvXuOQavj+3H9O5lbRPMd/Tu40xIzoWtso2ccGIUeFJGgJwbmAU84 r/Ig2Lr3iT4TvigeM6dng5RhnRV30zJuybdSH1vbgz753RIAZEMfEx2ngBBpW28Fz4dF mAkw== X-Forwarded-Encrypted: i=1; AFNElJ9sOkrq2OlRk7xz07BsL4WqlSQ71REqXo3XHeuzAFm9xGYoXWFWq5uJGP5sUxXpb8ZQhwzwduM9+2Y=@lists.xenproject.org X-Gm-Message-State: AOJu0YyIr3b5oFpgCIrqjtQ3jfeyhgcthS1NYX1ZGBHNo1hhwjrhMjXE +uSifK/5vxdt3nWvLYYbHFdENvbN6wIPk5GprIY1A3aRLkbsD7gt4DOVwEcHXg//TIIkaWZEZ62 i4AHRoQ== X-Received: from pjl14.prod.google.com ([2002:a17:90b:2f8e:b0:36b:be8c:b289]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:4cca:b0:36b:82cf:f779 with SMTP id 98e67ed59e1d1-36bbd1305dcmr3958387a91.21.1780065897442; Fri, 29 May 2026 07:44:57 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:43:52 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-6-seanjc@google.com> Subject: [PATCH v4 05/47] x86/sev: Move check for SNP Secure TSC support to tsc_early_init() From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-c1860d/1780065899-BF57FDB1-73B69ADE/0/0 X-purgate-type: clean X-purgate-size: 1583 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780065928953154101 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 f7f561722efa..833eed5c048a 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -1543,7 +1543,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780065929; cv=none; d=zohomail.com; s=zohoarc; b=P/f58ko38gT+LUlCAi8KUM6zQiddxHWqyDWM0rGW8xv3N7q/0UODcgn00xactS7hF3HrhZG5vZ0ZQIEe05LtvkwgvtfCHkNUk5h5/LlW3D13CQPc4vhGEDti7xpxBtSOhwYLra8nBtfESEBSUUsi5nMNPN8Nm6JiAjy7t9Oj7Qc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780065929; 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=fwFQzI2jeVi8q9emUB9u5qsW4Gj215t9UPhq3t/oEkw=; b=ViMVC6rQ7tYnXnYvEFOCG0CqpMeTuZcWsJ8hGuDIZv8RL7HHn05QDKdBT8yD7lD1Q0HMfl9jnaZWrrzedsw6dd2/kOI/5j/LKGZpD3haPQxbTwDQhyFj0Ftd0EBizCfiXQ5tE3AkhsQ3GyERWztDqZrCCG+kxNK0YO5slXrDEf8= 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 1780065929301743.1214182712461; Fri, 29 May 2026 07:45:29 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322206.1588484 (Exim 4.92) (envelope-from ) id 1wSySM-0003F5-QO; Fri, 29 May 2026 14:45:02 +0000 Received: by outflank-mailman (output) from mailman id 1322206.1588484; Fri, 29 May 2026 14:45:02 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wSySM-0003Dz-Ly; Fri, 29 May 2026 14:45:02 +0000 Received: by outflank-mailman (input) for mailman id 1322206; Fri, 29 May 2026 14:45:01 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3aqYZagYKCXUlXTgcVZhhZeX.VhfqXg-WXoXeeblml.qXgikhcXVm.hkZ@flex--seanjc.bounces.google.com>) id 1wSySL-0002zV-Ie for xen-devel@lists.xenproject.org; Fri, 29 May 2026 14:45:01 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSySK-000xpH-V8 for xen-devel@lists.xenproject.org; Fri, 29 May 2026 16:45:00 +0200 Received: from [10.42.69.12] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3aqYZagYKCXUlXTgcVZhhZeX.VhfqXg-WXoXeeblml.qXgikhcXVm.hkZ@flex--seanjc.bounces.google.com>) id 6a19a663-bab6-0a2a0a5309dd-0a2a450cd4ea-34 for ; Fri, 29 May 2026 16:45:00 +0200 Received: from [209.85.214.201] (helo=mail-pl1-f201.google.com) by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3aqYZagYKCXUlXTgcVZhhZeX.VhfqXg-WXoXeeblml.qXgikhcXVm.hkZ@flex--seanjc.bounces.google.com>) id 6a19a66b-62f1-0a2a450c0019-d155d6c9e4c4-3 for ; Fri, 29 May 2026 16:45:00 +0200 Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2ba718173d1so106709105ad.0 for ; Fri, 29 May 2026 07:45: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="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=1780065899; x=1780670699; 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=fwFQzI2jeVi8q9emUB9u5qsW4Gj215t9UPhq3t/oEkw=; b=pFPDOYbX7nWOlF04QIQ2le4gdTxa8BcGoJz6DdC/jKm1VFMILRUoRTjlFEWyJLtzBH N/hEceHP1oIk1WrvQroRaDEHx2MievW0lKnIsNPSTVEGFOWjIz7GDiCqP4YtNguL8u3y xzFZwGCbW8OnsNsuHybdBjIP3/5h2CRLwyQuTrn3sOnXz+ALiH+am0Gw7QBwtAqqFBPH RbPjw77ijh9L+UxA+o2YrHzizttzo2mHn2XdbDLP7c2k71JvlNlt+FmtFOMUbIbZPzya jR0D89Sa2kOJtZi4KArLGn1ZV8uUNUzy16O+hATPj3D+CXI9DctovE4hcmOSidASFs85 mLFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065899; x=1780670699; 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=fwFQzI2jeVi8q9emUB9u5qsW4Gj215t9UPhq3t/oEkw=; b=QoQqPPABEhGAX6cJPti1IKCPwE2sxt9aCRNO7WZIQ3nnZKW+Fx5qi3PUlGzQ5BXA66 FVllYAFBdJ9BeuV6x3I19FictPF/li9H63MLaoK77Yd4aksOaeg7OHxhcmHemiUsIswu b3gEqVkF9ixlArdeWy5Y6Ukc0r0ElmCPk9C9IXPkwsyUH0O8ejY0TkCQwZFERT0xyWT1 MDAgfWQpq/0U2EUxA0pNr+Dag7aQt2vzox9an5/26yuMOQmLzRSAkBa5c8rFLJbeiY5l k5Gp9hwA2z535rKanCeuBqJjfXcZDJNIQJCdbYlvLmcj5fjMinHkeoHR/AoVc31vwW+k q9zQ== X-Forwarded-Encrypted: i=1; AFNElJ+Q8HBk82vI3IDtHvN0MZwW5rAZPljFOds8nLBciZQdB+idFdvqIiNyDZi7j3gFReFRGUTeCBY6I4s=@lists.xenproject.org X-Gm-Message-State: AOJu0YybPzOifZDpAsF+UeiZCYfxvpe47XmcHgR23aH/9KAOLN/F95KF XCMMXLqbBk+emOn0FCTSwSVhmEGI5nwijqA4EMMsscAeky6yKoJAMKgt9wwfMHtKTiB4IzHn1DA CbjddsQ== X-Received: from plble15.prod.google.com ([2002:a17:902:fb0f:b0:2bf:aa7:47b9]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:c94c:b0:2b0:bebb:1081 with SMTP id d9443c01a7336-2bf368698abmr864185ad.28.1780065898563; Fri, 29 May 2026 07:44:58 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:43:53 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-7-seanjc@google.com> Subject: [PATCH v4 06/47] x86/sev: Shove SNP's secure/trusted TSC frequency directly into "calibration" From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-d25034/1780065900-E2368CF5-14FADCA7/0/0 X-purgate-type: clean X-purgate-size: 5650 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780065931155158500 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. While it's rather weird, deliberately prioritize tsc_early_khz over all else to maintain existing behavior. Signed-off-by: Sean Christopherson --- arch/x86/coco/sev/core.c | 14 ++++---------- arch/x86/include/asm/sev.h | 4 ++-- arch/x86/kernel/tsc.c | 19 ++++++++++++------- 3 files changed, 18 insertions(+), 19 deletions(-) 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 833eed5c048a..2b8f94c3fcc7 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -1474,15 +1474,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 { @@ -1537,16 +1538,20 @@ 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 */ if (is_early_uv_system()) return; =20 - if (cc_platform_has(CC_ATTR_GUEST_SNP_SECURE_TSC)) - snp_secure_tsc_init(); + if (tsc_early_khz) + known_tsc_khz =3D tsc_early_khz; + else if (cc_platform_has(CC_ATTR_GUEST_SNP_SECURE_TSC)) + known_tsc_khz =3D snp_secure_tsc_init(); =20 - if (!determine_cpu_tsc_frequencies(true)) + if (!determine_cpu_tsc_frequencies(true, known_tsc_khz)) return; tsc_enable_sched_clock(); } @@ -1567,7 +1572,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780065930; cv=none; d=zohomail.com; s=zohoarc; b=aJF0SgJxrxjN/y+nRzkEa9wDA5tKYNM4RrRHoCuwctXBL8MvJGE0gS+YYTUgkj/d852CbXeOMtdnnUIIUCSEG321MZ/82a1D6V8BgmWvo/j1PMP1eOJ+3Xx1Hl2y9HvVOaoEN3GgXZcvh1Qiz8xNT4XQhr5RDbMMK6wVfR2gH/U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780065930; 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=DaZwo5N6cl7Wcn+YII8G1Z7wxMBnsUseTYI23WvaSW8=; b=M9lqPJHraYgo1XlMoSyt+5RC3ZwMI00Rb8uoaZWIW66IwRVTc/JBFQJJqlK7hI6wdRpGVU+4p3Xno7El5Y6bgC+FMxwtK6WJwO7QxjdIs9fRhiP4Ceb/Yw0qcDwLo1e0DJRB2Zfr0v5VcNC8CyH9nMca5oIcc1JRDHz0ouj09A8= 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 1780065930805625.9262902837885; Fri, 29 May 2026 07:45:30 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322207.1588492 (Exim 4.92) (envelope-from ) id 1wSySO-0003UN-2K; Fri, 29 May 2026 14:45:04 +0000 Received: by outflank-mailman (output) from mailman id 1322207.1588492; Fri, 29 May 2026 14:45: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 1wSySN-0003Tj-T8; Fri, 29 May 2026 14:45:03 +0000 Received: by outflank-mailman (input) for mailman id 1322207; Fri, 29 May 2026 14:45:02 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3a6YZagYKCXYmYUhdWaiiafY.WigrYh-XYpYffcmnm.rYhjlidYWn.ila@flex--seanjc.bounces.google.com>) id 1wSySM-0003D7-Od for xen-devel@lists.xenproject.org; Fri, 29 May 2026 14:45:02 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSySM-004chj-5B for xen-devel@lists.xenproject.org; Fri, 29 May 2026 16:45:02 +0200 Received: from [10.42.69.3] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3a6YZagYKCXYmYUhdWaiiafY.WigrYh-XYpYffcmnm.rYhjlidYWn.ila@flex--seanjc.bounces.google.com>) id 6a19a66d-e002-0a2a0a5209dd-0a2a4503e0ca-2 for ; Fri, 29 May 2026 16:45:02 +0200 Received: from [209.85.216.74] (helo=mail-pj1-f74.google.com) by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3a6YZagYKCXYmYUhdWaiiafY.WigrYh-XYpYffcmnm.rYhjlidYWn.ila@flex--seanjc.bounces.google.com>) id 6a19a66c-672d-0a2a45030019-d155d84ac5ee-3 for ; Fri, 29 May 2026 16:45:01 +0200 Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-3662e7756f0so11442136a91.1 for ; Fri, 29 May 2026 07:45:01 -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=1780065900; x=1780670700; 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=DaZwo5N6cl7Wcn+YII8G1Z7wxMBnsUseTYI23WvaSW8=; b=fLgZEfMPzZ4laOX42kVD+nZ+t8gnk97KjzLmSVdN6OXtXhdwCpDj8gstadeTRpKFwJ QKKkAjFhCBi+ifHE1tl/YwBfHNVAEwgSQOU6bCFzB2KHsu14gYjaiI1wuUpF9ibFWZ2j RLnHeNsRnwXeObS4BdUrvRoGC1MvO1EykRsEZntKRTXZGlv8UTzMdT5uQdT8NhPaG6WZ yND8EixMfokTVz5GS1qCDMezzTjx17OvA+mrE/IfsZAK8gV1VMiPf7fwGtWeNTkmqvH8 ACL4RENpueNXqLAK1otvfnHgB9oYertiynTCZDZbbfebtz6RyS4ubX/+baZmk/nP1BkA fDQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065900; x=1780670700; 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=DaZwo5N6cl7Wcn+YII8G1Z7wxMBnsUseTYI23WvaSW8=; b=MTSga1e3c77eUEOtElpwSReUzCKfvMqQ8AmG9HrPWtfanFXw5c8zqes2KcvYJK/gtj uuAnViupi0LM9aYSbPBBz49xZurgfwXJpRAWvOVCRrVt6lwiWgykHuOy6FAGuMVbY9v3 lqGJAxPCAmeqKbTqqPa8ssryYglX7flCZHnE9hagYJcut4J3kgIdqjrw/v2yayJDmhxo mOdroN97FsKo1L/HWiik8VHCPl/C6WlKfgu7zGFF4NBzgxQ9RT9xTxQJzAo0/lX6Y5h0 pCpbJ4FPkPM1NbRdPrRc/gs/C58CXOVGkd1NfjgUponerJEkTs4WltHfdsbVerDjdOUy Lymw== X-Forwarded-Encrypted: i=1; AFNElJ/zG1imAit+zxaJGSHe+pbe6C/l76hUpyNvHuqnaj4+TtSeAGPpIKfF6zs586QF4DAV0a19V5ch+GI=@lists.xenproject.org X-Gm-Message-State: AOJu0YwE5oYmrXgZswx5pUSQ6iFjHAHHJT4Ma+e8pU7fWdgu9x2Z187x ESbnPL7DDBEoj0PRPac/ESsIIRxo1zpyuzyOBMCQovKpGCGcVRc3m91X3LnztZNFARYXSmkU8gJ Hvmk7BQ== X-Received: from pjte5.prod.google.com ([2002:a17:90a:c205:b0:36b:7748:4e7a]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3606:b0:36b:e109:1e63 with SMTP id 98e67ed59e1d1-36be10928f2mr708703a91.27.1780065899626; Fri, 29 May 2026 07:44:59 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:43:54 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-8-seanjc@google.com> Subject: [PATCH v4 07/47] x86/tdx: Force TSC frequency with CPUID-based info provided by the TDX-Module From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner Content-Transfer-Encoding: quoted-printable X-purgate-ID: tlsNG-33051d/1780065902-3B96D938-A1E6EBF3/0/0 X-purgate-type: clean X-purgate-size: 4302 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780065931144158501 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. Signed-off-by: Sean Christopherson --- arch/x86/coco/tdx/tdx.c | 20 +++++++++++++++++--- arch/x86/include/asm/tdx.h | 2 ++ arch/x86/kernel/tsc.c | 3 +++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/arch/x86/coco/tdx/tdx.c b/arch/x86/coco/tdx/tdx.c index 29b6f1ed59ec..5d7976359220 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_freq(&info))) + return 0; + + lapic_timer_period =3D info.crystal_khz * 1000 / HZ; + + /* 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.tsc_khz; +} diff --git a/arch/x86/include/asm/tdx.h b/arch/x86/include/asm/tdx.h index e5a9cf656c07..1d841d464aa4 100644 --- a/arch/x86/include/asm/tdx.h +++ b/arch/x86/include/asm/tdx.h @@ -67,6 +67,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 @@ -88,6 +89,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/kernel/tsc.c b/arch/x86/kernel/tsc.c index 2b8f94c3fcc7..2603f136e29b 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); @@ -1550,6 +1551,8 @@ void __init tsc_early_init(void) known_tsc_khz =3D tsc_early_khz; else 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 (!determine_cpu_tsc_frequencies(true, known_tsc_khz)) return; --=20 2.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780065932; cv=none; d=zohomail.com; s=zohoarc; b=J5nIT2c37uRzKYcoc3KiEPk+kV5sOx8LUreLRtrWm1kPuc3Ylv8dQqMx8vUR0nAJgQoI7pm1sE3yUFjkrQ1gMEvZRvGeCo58sC5PIGNsNYPqlNBLW74wRIFebUq0NLMJJg5xNlzggesSzdoR1Wji5QX6Be/pBQgff7lzUdndcKI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780065932; 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=i9cAaOxfY6rOh6V3wNZ8kkRpxZiPqefGKbUNNO0Sbyc=; b=RTuI3fquKq2/KzNJ20Tl1sI/vciFbXF5ZdIiZGVUK4QdexPGI830OYS4oSaC6uO5wkPStDOhLkkUJRIafdXKh6YyOYrshmIhIAGXJ+XkiCPy68vWAO0aAnUSCFeU/bo6XWD3fit7kYxkRh2zPLTPstz2dXGGxe6lqmz9STYMYko= 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 1780065932598257.6364731952773; Fri, 29 May 2026 07:45:32 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322209.1588501 (Exim 4.92) (envelope-from ) id 1wSySP-0003kq-FO; Fri, 29 May 2026 14:45:05 +0000 Received: by outflank-mailman (output) from mailman id 1322209.1588501; Fri, 29 May 2026 14:45: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 1wSySP-0003ka-AZ; Fri, 29 May 2026 14:45:05 +0000 Received: by outflank-mailman (input) for mailman id 1322209; Fri, 29 May 2026 14:45:04 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3bKYZagYKCXcnZVieXbjjbgZ.XjhsZi-YZqZggdnon.sZikmjeZXo.jmb@flex--seanjc.bounces.google.com>) id 1wSySO-0003aj-Ih for xen-devel@lists.xenproject.org; Fri, 29 May 2026 14:45:04 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSySN-005qNj-V4 for xen-devel@lists.xenproject.org; Fri, 29 May 2026 16:45:03 +0200 Received: from [10.42.69.10] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3bKYZagYKCXcnZVieXbjjbgZ.XjhsZi-YZqZggdnon.sZikmjeZXo.jmb@flex--seanjc.bounces.google.com>) id 6a19a66e-5cb7-0a2a0a5109dd-0a2a450acfc8-4 for ; Fri, 29 May 2026 16:45:03 +0200 Received: from [209.85.216.74] (helo=mail-pj1-f74.google.com) by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3bKYZagYKCXcnZVieXbjjbgZ.XjhsZi-YZqZggdnon.sZikmjeZXo.jmb@flex--seanjc.bounces.google.com>) id 6a19a66d-56b3-0a2a450a0019-d155d84ae0bb-3 for ; Fri, 29 May 2026 16:45:03 +0200 Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-36b7c55406bso1676717a91.2 for ; Fri, 29 May 2026 07:45: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=1780065901; x=1780670701; 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=i9cAaOxfY6rOh6V3wNZ8kkRpxZiPqefGKbUNNO0Sbyc=; b=FBQOfytJkLM/zm3wQnkSSYpjeryfLTAwu0urH7iFM+aRbh7NIY1Uicectk4RtQFVsY vSaqRcWBy5SQurd4KaK+1BTBJAhZ49oUhVLirzQ7tsNRAVVRyZP77TpdDBkfkeDqzlLn nrGBJnMXMRrbEpqJKiPCJ1ht4EOEOudMfYIAcx5HE/OhUlHPR+1OL0CHH7djoWhfiTqt YV5TpSNwIJ94nnADxoTxNKcuhHd/NzknJQJdALn2FDa6piegMpkycko0YVERQ3rRxz0c +Pol1gpQHSeEJ+lHAmMJ86PuIgB2+Cia+2WBL8ISszJuERXy0NJwVqOdUY7KVxAv7pey KZTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065901; x=1780670701; 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=i9cAaOxfY6rOh6V3wNZ8kkRpxZiPqefGKbUNNO0Sbyc=; b=iYRkwb8eocI70K0ob5akvjJzAhG00hao2+94FjL/OZZ7AFsVQ8G58YVuiJ15Av+0Cj EMonwXP5tgfODyX5T4BW+HK/ElwHRuAVdEO01qVeCXYHl8zfC+5RbdOnxHL63rpbOVgo Ee0n3j4Ok2ljsBmkQosh9x6oNghZqujThbJI/vRm9HuhwyRIzu70wA+h/hrmSZErDj7v XwoO/eSejs47Cnb/rI7ZOGsES/YBAPjXfmoIcFnLE1zjCZc86RjyuT0VwkgYlfKHXvGr tlPUV2yngAuFMJPdYdakw2mWiNkJWa4JIReJVSgGwUDAqqBo0+b0oe3dLly2u+qphn83 AVbw== X-Forwarded-Encrypted: i=1; AFNElJ+VBsaa5EjVol9+9s0Ir8I69fdxLyUI+8fDSuPVSfKhmN8akb739bcEcTtTbNqxhZEBDg+PckTqAUo=@lists.xenproject.org X-Gm-Message-State: AOJu0YzLynSWNnZDdJ+tNaNj2YqwQvd9xE3IQaesgyNLpLWY89pm04lW NtGS55RRoF3Sb33A02jn7lExB7Vo83h7I1SyhndWT6OnJft1MleZHkhpBR74avsx9P4InfgySXo ZhzyfWw== X-Received: from pjbmd5.prod.google.com ([2002:a17:90b:23c5:b0:36a:f1b9:c389]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:5410:b0:36b:bbee:fb28 with SMTP id 98e67ed59e1d1-36bbcc14662mr3769042a91.2.1780065900790; Fri, 29 May 2026 07:45:00 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:43:55 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-9-seanjc@google.com> Subject: [PATCH v4 08/47] x86/tsc: Add dedicated hypervisor hooks for getting known TSC/CPU frequencies From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-4011c0/1780065903-705648B7-27505DA5/0/0 X-purgate-type: clean X-purgate-size: 10836 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780065933260158500 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). Cc: David Woodhouse Signed-off-by: Sean Christopherson --- 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 | 23 +++++++++++++++++++---- arch/x86/xen/time.c | 4 ++-- 9 files changed, 45 insertions(+), 27 deletions(-) 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 6c8a6ead84f6..a4f8a4aa601d 100644 --- a/arch/x86/include/asm/x86_init.h +++ b/arch/x86/include/asm/x86_init.h @@ -120,6 +120,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); @@ -128,6 +130,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 185d4f677ec0..733e12d5a7dd 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 34b73573b108..7c8cf4885e82 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 #ifdef CONFIG_X86_LOCAL_APIC /* Skip lapic calibration since we know the bus frequency. */ diff --git a/arch/x86/kernel/jailhouse.c b/arch/x86/kernel/jailhouse.c index f58ce9220e0f..4034e08c5f11 100644 --- a/arch/x86/kernel/jailhouse.c +++ b/arch/x86/kernel/jailhouse.c @@ -68,7 +68,7 @@ static void __init jailhouse_timer_init(void) lapic_timer_period =3D setup_data.v1.apic_khz * (1000 / HZ); } =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 b5991d53fc0e..ec888eef74aa 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -115,7 +115,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()); @@ -321,8 +321,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 2603f136e29b..362596612442 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -1476,13 +1476,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 @@ -1539,7 +1543,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; @@ -1547,6 +1551,9 @@ 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 (tsc_early_khz) known_tsc_khz =3D tsc_early_khz; else if (cc_platform_has(CC_ATTR_GUEST_SNP_SECURE_TSC)) @@ -1554,7 +1561,15 @@ void __init tsc_early_init(void) else if (boot_cpu_has(X86_FEATURE_TDX_GUEST)) known_tsc_khz =3D tdx_tsc_init(); =20 - if (!determine_cpu_tsc_frequencies(true, known_tsc_khz)) + /* + * If the TSC frequency is still unknown, i.e. not provided by the user + * or by trusted firmware, try to get it from the hypervisor (which is + * untrusted when running as a CoCo guest). + */ + if (!known_tsc_khz && x86_init.hyper.get_tsc_khz) + known_tsc_khz =3D x86_init.hyper.get_tsc_khz(); + + if (!determine_cpu_tsc_frequencies(true, known_cpu_khz, known_tsc_khz)) return; tsc_enable_sched_clock(); } @@ -1575,7 +1590,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780065932; cv=none; d=zohomail.com; s=zohoarc; b=jLAFDqU5KjqmvDMhqZTDYDbtEbxgqhOZAapv6TrW+DsXCrgqBVYxF7Iwb+3bCaDEeuSTvz/oBFQaIkSwylj8ren5uz4NBt8Su3bCY9BzIvdsGxf2IN8HwJdOye8TQXUBwALnmWEQamkBn+nRfItlC+pgAr7YjMcrJ1i1aePkDRs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780065932; 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=Cv3iY8yWhIG9MApRDLOLL6ifa8DISlk6XR/KWuM4GwE=; b=TeBNGNV0v1/zPuJpGZXbxa+yXQoOks3LpLAXh9E9rOv0rfWUTS7SOSNzlNBMBa/QYE5cJAJdExtrJIB7WchCSQPAArOpK4uTkOf/RLIbRYR2LoQvlyqfz1ZUeagF+GS9Kag0qea30+egCRPV+ByWEBULeN517MONSKvanqBWni8= 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 1780065932955120.72714346691191; Fri, 29 May 2026 07:45:32 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322211.1588507 (Exim 4.92) (envelope-from ) id 1wSySP-0003oq-Vx; Fri, 29 May 2026 14:45:05 +0000 Received: by outflank-mailman (output) from mailman id 1322211.1588507; Fri, 29 May 2026 14:45: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 1wSySP-0003nz-LB; Fri, 29 May 2026 14:45:05 +0000 Received: by outflank-mailman (input) for mailman id 1322211; Fri, 29 May 2026 14:45:05 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3bqYZagYKCXkpbXkgZdlldib.Zljubk-absbiifpqp.ubkmolgbZq.lod@flex--seanjc.bounces.google.com>) id 1wSySP-0003g3-1C for xen-devel@lists.xenproject.org; Fri, 29 May 2026 14:45:05 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSySO-000xsX-Dl for xen-devel@lists.xenproject.org; Fri, 29 May 2026 16:45:04 +0200 Received: from [10.42.69.6] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3bqYZagYKCXkpbXkgZdlldib.Zljubk-absbiifpqp.ubkmolgbZq.lod@flex--seanjc.bounces.google.com>) id 6a19a66f-bab6-0a2a0a5309dd-0a2a4506bce2-8 for ; Fri, 29 May 2026 16:45:04 +0200 Received: from [209.85.214.201] (helo=mail-pl1-f201.google.com) by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3bqYZagYKCXkpbXkgZdlldib.Zljubk-absbiifpqp.ubkmolgbZq.lod@flex--seanjc.bounces.google.com>) id 6a19a66e-7371-0a2a45060019-d155d6c9d08f-3 for ; Fri, 29 May 2026 16:45:04 +0200 Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2bd5b20aaa6so149189595ad.2 for ; Fri, 29 May 2026 07:45:03 -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=1780065902; x=1780670702; 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=Cv3iY8yWhIG9MApRDLOLL6ifa8DISlk6XR/KWuM4GwE=; b=lvqoTtvWSJqYdTZfavK+4BVampdogzpOJUIbpqFi/ukGn/VnDAp5nkHxEylZSnl5+A fPCHb3KrxmbZ+TPMvEgNQ+N4V5Iuotlwg/2uYwdBvJH/fxLMESkWwxt797S0oqGL6GkI 5iVDrsI7OMmvfwyis90Ughj70+v7E95fdNMT5HdzABWUB3LdNZqNCVNGJd+xFEBwPYxP yQ9azbvP4WcqY7VGDQL8AZQfzKwO1bfawmRbZDMhRkqvuN+G6j2YYaySngeRQRyeIXRv WS2e4iB9/yCtZ2iV6u05RLkU+Ue4bZxnOiGxxwajGbXG1HVGTEKiYek4uooAxk+CR81B pyuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065902; x=1780670702; 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=Cv3iY8yWhIG9MApRDLOLL6ifa8DISlk6XR/KWuM4GwE=; b=DFjtyhhtbQk4G0aqqhcXdyRvZK2ANItRWTPaw3METAUnTyofTFA4jcT+hHRuhaUo7X MSqjk1eP0y1kp6lXR2h2GznfIyQo0QwdseVbfwKqaj2TP72UlqCS1VOJWJM03cMnHcQV 7qTOoXjx0lbxJgXEyQhCZTdkIeaPpP9qobzbUBEvJEFlMskPDV9O7O6jj3SHdBpvdRua oQO7dHme6SI05/rEwE/jiIn1j5fFwJuk61jhHPFwlnYlMnpvmAYn27jQw7a9HWt4gUMm fjbQmnKhR9Tk+6A9n17J1WT2pN45VNTzWWqaDKYiXENeqezqAhCE+crqORPp4wwe+6Pn sbkw== X-Forwarded-Encrypted: i=1; AFNElJ/t3qu+IRFhjASBcubwjg3+Gj205pr2TjG+EAavZ0Rf2oO+clA7UCBL3Oz9FY/7rt6whVQgfgzqvGQ=@lists.xenproject.org X-Gm-Message-State: AOJu0YwtQe2Pl8eyoNhwyUwmt2RG/5sOWqxmQXFAp/5Eppk4T2w39hr9 kCzLm01kvirQOpe5okcRE+KVB6z0Ar5SghC7YTB+B+sdGzyqdPV+SedPXLykFfdBZMPAHYIa4gz GxvWxpQ== X-Received: from plem4.prod.google.com ([2002:a17:902:e404:b0:2bc:f203:12a1]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1983:b0:2bf:23ad:8595 with SMTP id d9443c01a7336-2bf367b260amr1523355ad.4.1780065902031; Fri, 29 May 2026 07:45:02 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:43:56 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-10-seanjc@google.com> Subject: [PATCH v4 09/47] x86/acrn: Mark TSC frequency as known when using ACRN for calibration From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-16d1c6/1780065904-8EB8BD75-CD0615AA/0/0 X-purgate-type: clean X-purgate-size: 869 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780065933093158500 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 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/x86/kernel/cpu/acrn.c b/arch/x86/kernel/cpu/acrn.c index ad8f2da8003b..0303fe6a2efa 100644 --- a/arch/x86/kernel/cpu/acrn.c +++ b/arch/x86/kernel/cpu/acrn.c @@ -33,6 +33,8 @@ static void __init acrn_init_platform(void) { /* Install system interrupt handler for ACRN hypervisor callback */ sysvec_install(HYPERVISOR_CALLBACK_VECTOR, sysvec_acrn_hv_callback); + + setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ); } =20 static bool acrn_x2apic_available(void) --=20 2.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780065936; cv=none; d=zohomail.com; s=zohoarc; b=LK5ABDBW5Mo1oXO5oGXpLVBlVpZi38Lrcw8g9sLoL5UytEfnmoNJaET20uNpTDdHrRbjR7uW0Wba4Nz1dOmBPrMfMMMMfDve1mIEVLGv8IZYqfQlllQ5Oakw8ZWxRm4pXufuDxvhp9ot3AEWUsJBe9a/bwEMFCnJex7e/Bdptt8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780065936; 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=H0GwXhoguEvRGovrleKtlxRg6q5h/dMOER9+6opKAAY=; b=H/PN0QysYnPM9xcmMRJiBP3WnIjck/iXKdXg9lel/NReqe8khRW40A0UpjauSes/OwYP8QbXtzNxx6IFwny3HtCkyj0ckCxDEPa6or5HeMIyFi+wT5YRXQaRpPs5C2qZtau78BPf/5a1uLtz4gvgmXyFZqqup1C+tQLpGrLHF+c= 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 1780065936937171.25065778161365; Fri, 29 May 2026 07:45:36 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322212.1588519 (Exim 4.92) (envelope-from ) id 1wSySS-0004Kp-6a; Fri, 29 May 2026 14:45:08 +0000 Received: by outflank-mailman (output) from mailman id 1322212.1588519; Fri, 29 May 2026 14:45: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 1wSySS-0004KQ-0a; Fri, 29 May 2026 14:45:08 +0000 Received: by outflank-mailman (input) for mailman id 1322212; Fri, 29 May 2026 14:45:06 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3b6YZagYKCXoqcYlhaemmejc.amkvcl-bctcjjgqrq.vclnpmhcar.mpe@flex--seanjc.bounces.google.com>) id 1wSySQ-0003pl-39 for xen-devel@lists.xenproject.org; Fri, 29 May 2026 14:45:06 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSySP-00FvB4-Fp for xen-devel@lists.xenproject.org; Fri, 29 May 2026 16:45:05 +0200 Received: from [10.42.69.12] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3b6YZagYKCXoqcYlhaemmejc.amkvcl-bctcjjgqrq.vclnpmhcar.mpe@flex--seanjc.bounces.google.com>) id 6a19a66f-2eae-0a2a0a5409dd-0a2a450c88da-18 for ; Fri, 29 May 2026 16:45:05 +0200 Received: from [209.85.214.202] (helo=mail-pl1-f202.google.com) by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3b6YZagYKCXoqcYlhaemmejc.amkvcl-bctcjjgqrq.vclnpmhcar.mpe@flex--seanjc.bounces.google.com>) id 6a19a66f-62f1-0a2a450c0019-d155d6cab40c-3 for ; Fri, 29 May 2026 16:45:05 +0200 Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2ba5f794825so112106045ad.0 for ; Fri, 29 May 2026 07:45: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=1780065903; x=1780670703; 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=H0GwXhoguEvRGovrleKtlxRg6q5h/dMOER9+6opKAAY=; b=hvNffYvQ/D54LpXmOYRyyyO9ByIH0rcRHvQN1CRRR/953LWD/v/k/6lJlgPquI3mP6 sgx08gjaeZXLvONVrgiOxdTpedgXr1an5HaZfJcCxHiSY8vGRXPhqlftJpOUXWFH2HSv hfbTja6KmI/tZe16c1Z+xvDrGTEWitpld67+DG/uuPTKct7b0nETss6OR1VNU1d7ZZpj I1Zoy4UpNEEHqYelt7C88HVYnC6RTdk3ICl2FE3G+05/mxT6MTJ0FJihgLZo1Gb7K5cQ gxC2HSjnbpBa8TK5K9Y/qNSgJz6KWSb53/9ZwsLV1LiKjgxudWDzylu4QeC8rMTXvhEl BGYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065903; x=1780670703; 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=H0GwXhoguEvRGovrleKtlxRg6q5h/dMOER9+6opKAAY=; b=rmJQvJhFaZY/UCUMdSAzXHtHnoMuI5KEC7i1mogezrC+u8zrEKtICrXuLwHy+R/Lgg j+f5CVo4iqU6j6UT2d2Vp1EFydhcumam6PVYH6YijqaK9XA7D9LnAKaLrEDlnPVetIqg duP6NYXqlGTIQg8edKjElVIMjNlnbEUN03OAmApq2FvK3FgUnYZARMtzViqs2AMiVubU Ii8GJ907N3HjyXHGGzoh3q9FFJ0HC6+N8VUbemy4vdIm+dbqu+tokc56c8Mb0yiP6p/p rg6v62w0lyLTMTW98z2+oGSUDm4LFS/wVgOtSslc2U2AiR1boAjdd/0vZqlTiNBNy9A3 F5hw== X-Forwarded-Encrypted: i=1; AFNElJ8VfrlwJDiZUfNQ2CmV/n4BDue84jEh/7mLue29RW8b4RAW1mXVkKRNfk/dMx738UvlzXn7YpT+YMs=@lists.xenproject.org X-Gm-Message-State: AOJu0Yypwf7NW3/uSeW+yWAX8dS5pa7rw1p4Cld4WeVuCoCC7T1k+Lh/ RQX7haAW3XfXmcbjnHiocqh020mCft3TRaxYWE+TMYHzqErgM+UdY8fe+B8xJFuiS0UrGXf5OXB qYj/zSg== X-Received: from pgc24.prod.google.com ([2002:a05:6a02:2f98:b0:c80:192c:51ff]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:c94c:b0:2b2:be01:5532 with SMTP id d9443c01a7336-2bf3686d1dcmr856725ad.35.1780065903103; Fri, 29 May 2026 07:45:03 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:43:57 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-11-seanjc@google.com> Subject: [PATCH v4 10/47] x86/tsc: Consolidate forcing of X86_FEATURE_TSC_KNOWN_FREQ for PV code From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-d25034/1780065905-D996DCF5-F5EF5524/0/0 X-purgate-type: clean X-purgate-size: 6001 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780065939133154100 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". Note, preferring the user-provided TSC frequency over the frequency from the hypervisor or trusted firmware, while simultaneously not treating the user-provided frequency as gospel, is obviously incongruous. Sweep the problem under the rug for now to avoid opening a big can of worms that likely doesn't have a great answer. No functional change intended. Signed-off-by: Sean Christopherson --- arch/x86/coco/sev/core.c | 1 - arch/x86/coco/tdx/tdx.c | 1 - arch/x86/kernel/cpu/acrn.c | 2 -- 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 | 9 +++++++++ arch/x86/xen/time.c | 1 - 9 files changed, 9 insertions(+), 10 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 5d7976359220..ab463c2b2dab 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.tsc_khz; } diff --git a/arch/x86/kernel/cpu/acrn.c b/arch/x86/kernel/cpu/acrn.c index 0303fe6a2efa..ad8f2da8003b 100644 --- a/arch/x86/kernel/cpu/acrn.c +++ b/arch/x86/kernel/cpu/acrn.c @@ -33,8 +33,6 @@ static void __init acrn_init_platform(void) { /* Install system interrupt handler for ACRN hypervisor callback */ sysvec_install(HYPERVISOR_CALLBACK_VECTOR, sysvec_acrn_hv_callback); - - setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ); } =20 static bool acrn_x2apic_available(void) diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c index 733e12d5a7dd..f8653fc05a40 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 7c8cf4885e82..2d0624c66799 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 4034e08c5f11..e4d7d9e2cd69 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 ec888eef74aa..69752b170e0a 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -117,7 +117,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 362596612442..8cef918486db 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -1569,6 +1569,15 @@ 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. Don't mark the frequency as known if the user + * specified the frequency, as the user-provided frequency is intended + * as a "starting point", not a known, guaranteed frequency. + */ + if (known_tsc_khz && !tsc_early_khz) + setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ); + if (!determine_cpu_tsc_frequencies(true, known_cpu_khz, known_tsc_khz)) return; tsc_enable_sched_clock(); 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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780065935; cv=none; d=zohomail.com; s=zohoarc; b=mNPp5QT1tiNf9GVK8VqSpknDS43rz5yxDJgIMj/uIYurpRskMcFxn4kpKL2E/zShTqegfyez2huxx5hjsqt1LAkBeYbTeJzcpMqU5o3momxdmAJ8ArGW0V5upIEnpAfgIs9KNJ6wpQ4cFDiWdo5e4O1N5hpRWSlUL8tOGYaPyzk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780065935; 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=nNJLu7do7nPWUZaqv5wFSjm3is+mcIorKyFYEzca5zQ=; b=IhtQAbkF3Td5rVMcKRGQBNsbFWxlR3S8VnnaykEUocI6wNhb6a3e8V/O27K3ov2ckkSsm0DsWxje1lwseZvHue8CXW41qFERvvyhNIzbx9ok6eiw5J4xoIrZgtOYrDwhscNXBo9JM/VDvEYTr3cZ0t6LZyaUpVBnRCf4597mZZY= 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 1780065935609487.30455627002357; Fri, 29 May 2026 07:45:35 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322214.1588524 (Exim 4.92) (envelope-from ) id 1wSyST-0004Uu-4p; Fri, 29 May 2026 14:45:09 +0000 Received: by outflank-mailman (output) from mailman id 1322214.1588524; Fri, 29 May 2026 14:45: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 1wSySS-0004UL-TT; Fri, 29 May 2026 14:45:08 +0000 Received: by outflank-mailman (input) for mailman id 1322214; Fri, 29 May 2026 14:45:07 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3cKYZagYKCXsrdZmibfnnfkd.bnlwdm-cdudkkhrsr.wdmoqnidbs.nqf@flex--seanjc.bounces.google.com>) id 1wSySR-0004E4-Ed for xen-devel@lists.xenproject.org; Fri, 29 May 2026 14:45:07 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSySQ-00FvEA-Q3 for xen-devel@lists.xenproject.org; Fri, 29 May 2026 16:45:06 +0200 Received: from [10.42.69.12] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3cKYZagYKCXsrdZmibfnnfkd.bnlwdm-cdudkkhrsr.wdmoqnidbs.nqf@flex--seanjc.bounces.google.com>) id 6a19a66f-2eae-0a2a0a5409dd-0a2a450c88da-22 for ; Fri, 29 May 2026 16:45:06 +0200 Received: from [209.85.216.73] (helo=mail-pj1-f73.google.com) by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3cKYZagYKCXsrdZmibfnnfkd.bnlwdm-cdudkkhrsr.wdmoqnidbs.nqf@flex--seanjc.bounces.google.com>) id 6a19a671-62f1-0a2a450c0019-d155d849c41b-3 for ; Fri, 29 May 2026 16:45:06 +0200 Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-365fd467cf6so11601956a91.0 for ; Fri, 29 May 2026 07:45: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=1780065905; x=1780670705; 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=nNJLu7do7nPWUZaqv5wFSjm3is+mcIorKyFYEzca5zQ=; b=Ptaw/KTyEYMJanG10GMhwMScBCvIqskRaZoqtdSms1LCDCSmnDBNZxgRuEmEtsmjxI 9CNPmSBpDQII8Ai5GyhTdpGc4dZTcXXrFwHdFkPQQFNgx2hpdOgFGRFgS3nRoGsPQOxl hfMFZmtxm9zzCeZY3rIIOS3ekXz6+/T7gGvjcXPJ7UwnnchmLdjsGYsrrtGyf6Ukq1mb DF6UmAXZEwvCZ4H3CJTGQ7dstbLvwEGctYn3s78eWYuTY+Rny/sdbsZSFLvBCH74L+ak cmklpnig5ymAXMZ7GJi72m/BQ6zKnJenz44VunyWKtefr2yRAkhJDHX5XnQ1A1QcPDBX Buhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065905; x=1780670705; 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=nNJLu7do7nPWUZaqv5wFSjm3is+mcIorKyFYEzca5zQ=; b=PaEmupQnSI8ZUzUH6nTw/Ze8d7ULYdCGgt/c5bUZG0Rhp0jAku7SHWV8ZpeSrwi8MM ULNtspde6/l4xsf3l9n5TWO+R5i5Q/7XJchyd5op2yFvsl9bcIxTjfKwk2vRhzd2qyv0 agXGfsKcS5gHpv58n5eHUkax2OvkJ17eubyYzhw2K0/BM5e+/LT8BLFuIiyBAMikpnhX HY0ekEcdLbCBpFGMDuPwV3KKC/2Qt0Dnhgl4A6q5Ws4N5ULQqS+B5JaaXxRtJGb7B1FH zVw3o64VE1+YjRlbhwuJQ1NRB2QboZzpWzxB/uhzZl7RuzcXVeWG9OrrPO1IW9dFaFM5 80/A== X-Forwarded-Encrypted: i=1; AFNElJ/rzdsbXykhMNyVepYZRDaWVwNpC/uhtG3Xit/TBZfqbrKnszV2ZaWEVgpy2WBdLTGnhhMGXo1FzCw=@lists.xenproject.org X-Gm-Message-State: AOJu0YwCcqI1Axbu1zckquGlDi3bMLndZKi8eqzhWKILS0lYWtJqqjrd vcE8aSnJrg4UTS2dpRnbx6iLkn/dj99xjFv2el2mVh0xS2Nu0/Tt4pTY+zsD9awoKc79MU6Q3Kn xhdPsgQ== X-Received: from pjqx13.prod.google.com ([2002:a17:90a:b00d:b0:36b:a7c4:95be]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2681:b0:368:6998:b4a9 with SMTP id 98e67ed59e1d1-36bbcc14546mr3878407a91.11.1780065904236; Fri, 29 May 2026 07:45:04 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:43:58 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-12-seanjc@google.com> Subject: [PATCH v4 11/47] x86/tsc: Kill off x86_platform_ops.calibrate_{cpu,tsc}() hooks From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-d25034/1780065906-DA776CF5-CC218FFB/0/0 X-purgate-type: clean X-purgate-size: 5667 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780065937200158500 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 6cf26e62e9a6..4a224f99c3b9 100644 --- a/arch/x86/include/asm/tsc.h +++ b/arch/x86/include/asm/tsc.h @@ -97,8 +97,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 a4f8a4aa601d..ada17827ea51 100644 --- a/arch/x86/include/asm/x86_init.h +++ b/arch/x86/include/asm/x86_init.h @@ -292,8 +292,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 @@ -317,8 +315,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 8cef918486db..5b4b6e43c94c 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -696,7 +696,7 @@ int __init cpuid_get_tsc_freq(struct cpuid_tsc_info *in= fo) * 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 @@ -931,7 +931,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 @@ -945,7 +945,7 @@ unsigned long native_calibrate_cpu_early(void) return fast_calibrate; } =20 - +#ifndef CONFIG_SMP /** * native_calibrate_cpu - calibrate the cpu */ @@ -958,6 +958,7 @@ static unsigned long native_calibrate_cpu(void) =20 return tsc_freq; } +#endif =20 void recalibrate_cpu_khz(void) { @@ -967,9 +968,9 @@ void recalibrate_cpu_khz(void) if (!boot_cpu_has(X86_FEATURE_TSC)) return; =20 - cpu_khz =3D x86_platform.calibrate_cpu(); + cpu_khz =3D native_calibrate_cpu(); if (!boot_cpu_has(X86_FEATURE_TSC_KNOWN_FREQ)) - tsc_khz =3D x86_platform.calibrate_tsc(); + 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) @@ -1483,17 +1484,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 @@ -1590,13 +1593,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 ebefb77c37bb..c674cbbd466d 100644 --- a/arch/x86/kernel/x86_init.c +++ b/arch/x86/kernel/x86_init.c @@ -144,8 +144,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780065938; cv=none; d=zohomail.com; s=zohoarc; b=HF60VGz6hinGIsfYUXRtvdPmQQwFLURg41kmG0Gjy9mzs917y7cd8Ax/42Xg0XS7X+YvDh1y+6UbZFbHKyJg3CBG0Nh6DXx4MiSlaOkyRY125YURFJiXv1VtdU7WcDEJ8Pz8rovRKXZmDn/jaGIqG1GsbtccxyafsxW0z1CtsNE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780065938; 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=Ep5voyn6wy8bCsLD4fpqMEGPbCHcjvgsIyxbB5uxkeU=; b=ip9xUlRDCvYkfIcc3x82LHXQFZZJJFOho87EpfHiDOpUDgor5JooV1bEO9e8f34Yc7aLyYAOD48nSCsX3F+CRJiS087FeklzR74edvr33c6j5s5bxibeyncx2GD0POvWT8oM5rzSziLsG+WJoygUbX3KNDQHcLdhmqv1N1Y8sAo= 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 1780065938815486.7188172105991; Fri, 29 May 2026 07:45:38 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322215.1588536 (Exim 4.92) (envelope-from ) id 1wSySU-0004nz-JF; Fri, 29 May 2026 14:45:10 +0000 Received: by outflank-mailman (output) from mailman id 1322215.1588536; Fri, 29 May 2026 14:45: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 1wSySU-0004nL-AU; Fri, 29 May 2026 14:45:10 +0000 Received: by outflank-mailman (input) for mailman id 1322215; Fri, 29 May 2026 14:45:08 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3caYZagYKCXwxjfsohlttlqj.htr2js-ij0jqqnxyx.2jsuwtojhy.twl@flex--seanjc.bounces.google.com>) id 1wSySS-0004Mz-Gd for xen-devel@lists.xenproject.org; Fri, 29 May 2026 14:45:08 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSySR-000xsX-TU for xen-devel@lists.xenproject.org; Fri, 29 May 2026 16:45:07 +0200 Received: from [10.42.69.6] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3caYZagYKCXwxjfsohlttlqj.htr2js-ij0jqqnxyx.2jsuwtojhy.twl@flex--seanjc.bounces.google.com>) id 6a19a66f-bab6-0a2a0a5309dd-0a2a4506bce2-20 for ; Fri, 29 May 2026 16:45:07 +0200 Received: from [209.85.214.201] (helo=mail-pl1-f201.google.com) by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3caYZagYKCXwxjfsohlttlqj.htr2js-ij0jqqnxyx.2jsuwtojhy.twl@flex--seanjc.bounces.google.com>) id 6a19a672-7371-0a2a45060019-d155d6c9a535-3 for ; Fri, 29 May 2026 16:45:07 +0200 Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2bf11699875so19123545ad.1 for ; Fri, 29 May 2026 07:45: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=1780065906; x=1780670706; 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=Ep5voyn6wy8bCsLD4fpqMEGPbCHcjvgsIyxbB5uxkeU=; b=R9dv5ikHetQ3QKTEFDaBzSvmZkOjV4Q8SlvmlrBEhHTGuRRBGaNPgFSY6oheDAxx4i LpiEDanQYR4sAL+Ub0icU8VYtwsPtpDxnldDr2G2HHc0uKaBJmcOR2y6eS8ONerSC7Sc NWgl8rSW6nayGrmN328OMIDJxXOhTptRPapPOlwTcqYbwsxAVPLElb947zh0ntJDdEam ciGUHLZG1xgXQeRH25nReBIJUHBusMNrMRAPwicBwWC04/zTE0OpXV78N3ppdKI28/v+ xkE1zRroql060EM/WiNbXG+JFYPj9llv6UrBRguanpFp7BPvesYEa/znLufQsASYJlSN chfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065906; x=1780670706; 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=Ep5voyn6wy8bCsLD4fpqMEGPbCHcjvgsIyxbB5uxkeU=; b=ofCNPdpSQExpITcMwghlKAIMS2PvewVYdXsGIp7hIaVe9nz/JgzwbcTlLbmu7bHRe0 c7qz57JleOy5lw8X11fd2rZo0xPLeBpAEwtsGL/+6k8XRSooTNlpK2FY5hpUgEFPeoYV 1iyabKUxBrk2FVXKLSoaf648+PK2cnpJCcmX1CLzUAYOwIgZFEul8INi6J5fi7YN+Di/ wlrwTx0a8Lf7iGw+c+hYA/VKwPWPjhazsfwi8GVSXLX1oJSTYEdqkIi96CNVtALV8och N9jPn7kPruJ50YdHq4DLN2KJyL7UAO4pcFIJSGghRvn4J+9HFSIhkXH8o/ww0OM7aFwf M2qA== X-Forwarded-Encrypted: i=1; AFNElJ8ET14sDqZeBC/64Uu9su+7AK/Q0WNBGuzTZel5Jrv+afV9pQCNq+i7AeXvsJ3lWnFee5fTTIohY6A=@lists.xenproject.org X-Gm-Message-State: AOJu0YyIsmrscWifbNzUCTpood8IV+UrpI1F0WfLG8JO/iA5JkXXuwQy ryPnnzjBrivYIeP0mZc6Dy+axRFMXryqUrRPI8stZ03DxiKV09OkEHCrUf1w5Y7TNbBVtV0DR/d /LsQQuw== X-Received: from plbv2.prod.google.com ([2002:a17:903:44c2:b0:2bf:2808:7225]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:144b:b0:2bc:dca9:f0ed with SMTP id d9443c01a7336-2bf20dbeeb3mr34014545ad.15.1780065905419; Fri, 29 May 2026 07:45:05 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:43:59 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-13-seanjc@google.com> Subject: [PATCH v4 12/47] x86/tsc: Rename pit_hpet_ptimer_calibrate_cpu() => native_calibrate_cpu_late() From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-16d1c6/1780065907-86F73D75-E51F5F0C/0/0 X-purgate-type: clean X-purgate-size: 1430 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780065939136158500 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 5b4b6e43c94c..534462c81c78 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -779,7 +779,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; @@ -954,7 +954,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; } @@ -1497,7 +1497,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780065931; cv=none; d=zohomail.com; s=zohoarc; b=baknnWN3cVINOpYb37soov/4edFpsQQ3BWF28D8LE3YtEcEZ0StMTEvZIH2FAs8Wkrr4lbi9JMGL0zSkTzC182Xw8zOmzTpRyalC1UjFOWN7FQLrKmamhjwAlV4arUEtDL6OEg08m+6sHFz8AHAb1fwTq+KMoODSim6MNUI7siM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780065931; 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=gZ7qyLV4Qg2/G7AZdfT7QLEMZtHiHfovzBdDbSmwy9M=; b=es9CLd56AV/J/egkWuqakfdYugy0qUmyHnXIIpBig6kKB3zmKjDPjpuJ7XNEHhXyaFOBk3IzLItb01vT+Qbwz8KOQO/gYtDpn/1ztBWVZZUnRQRJilM7mVVv/UWmsEbSQmWPTPJHIJJPVhvcP5llESQmJy+8OMUmNE3aLH+Hg8c= 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 1780065931000965.6156973623279; Fri, 29 May 2026 07:45:31 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322218.1588544 (Exim 4.92) (envelope-from ) id 1wSySW-00056Y-01; Fri, 29 May 2026 14:45:12 +0000 Received: by outflank-mailman (output) from mailman id 1322218.1588544; Fri, 29 May 2026 14:45: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 1wSySV-00055S-M1; Fri, 29 May 2026 14:45:11 +0000 Received: by outflank-mailman (input) for mailman id 1322218; Fri, 29 May 2026 14:45:10 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3cqYZagYKCX0tfbokdhpphmf.dpnyfo-efwfmmjtut.yfoqspkfdu.psh@flex--seanjc.bounces.google.com>) id 1wSyST-0004e7-Um for xen-devel@lists.xenproject.org; Fri, 29 May 2026 14:45:09 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSyST-004cke-AC for xen-devel@lists.xenproject.org; Fri, 29 May 2026 16:45:09 +0200 Received: from [10.42.69.3] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3cqYZagYKCX0tfbokdhpphmf.dpnyfo-efwfmmjtut.yfoqspkfdu.psh@flex--seanjc.bounces.google.com>) id 6a19a66d-e002-0a2a0a5209dd-0a2a4503e0ca-36 for ; Fri, 29 May 2026 16:45:09 +0200 Received: from [209.85.214.201] (helo=mail-pl1-f201.google.com) by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3cqYZagYKCX0tfbokdhpphmf.dpnyfo-efwfmmjtut.yfoqspkfdu.psh@flex--seanjc.bounces.google.com>) id 6a19a673-672d-0a2a45030019-d155d6c9e419-3 for ; Fri, 29 May 2026 16:45:08 +0200 Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2ba718173d1so106710825ad.0 for ; Fri, 29 May 2026 07:45: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=1780065907; x=1780670707; 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=gZ7qyLV4Qg2/G7AZdfT7QLEMZtHiHfovzBdDbSmwy9M=; b=pJ36dnr+yV5ViiYVHOialiY0hSB6KS+OdtCdrEacSyXHjzK+/Vz4SkQ77bPqHhVTNq FQRiG4Y23k5uSSZCWQrmLZZ1bNKL92P8FJ3Mh+e6SRWzGquvUhblxSAlhZf/OeZqg4sQ 93vaCQBpkwVSln/RVOoNjrJUV8zhhZB8LyTnYmfOuBnnC3sJbAD6rWZSOmB1tR6Pie5z Juth9AApnqslgcxkQmfUxL1AxBq/MHkD7OTVd7RjyimbvJQJkH9+XTGNXJlA7EgfilxH 8OXT8+xTfnp2+sczDrgfEBoEA/NtjOZg32Qlo7BbE69v5qqLuLk21kl92MlXwkQYC2P4 Ln2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065907; x=1780670707; 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=gZ7qyLV4Qg2/G7AZdfT7QLEMZtHiHfovzBdDbSmwy9M=; b=aZp+cij/sE7Gk2y7ol70c2du823NiklEXPRcwvpEiLZGE3Iebd5ZfFTxwFojJVgnwI auc4JGHfkJP6Z74qh3UNkQtBRd+XYaah2g0azLC+Q9b2OfmhqrNTxnUkc8DAS0vSNn6R UeoURey72q5Whgy6zyMzuesi/AQCKpAgFWrvYvIo25515tKIp0nnNrbbTOSckRhMSuxc gzWQ95V6mux8a86BnUmsb5dv3OY/bURY/xsoepKs0RTvuSxajJYRz5hOAiwj3Jl1b2hg UDth+ECJsjE62HacSFvwMzOoEM/AIK3CDsfDNakLr88I/X746Rep3lcgWQbJt0kxACEv IcNw== X-Forwarded-Encrypted: i=1; AFNElJ9KgYUDOg4UrGybCO3zC/UWa8vcJPw98/+oyMwKl1ru1+vH5gUjLED0OyTCtU94exiOFPSmCAT+NAA=@lists.xenproject.org X-Gm-Message-State: AOJu0YxTofmJvfwFMo6L0iF/Ee01StL0v0KM3c78EXcAE/dSNNr5htj2 4T1j/DvbAXKvDLFTwoQUUUbcK6k+WkVZZYMUJ29kGCDQuEtQrDGPyYQN+s2mxmMve3d9Mih7h1H RyH/ebw== X-Received: from plblk13.prod.google.com ([2002:a17:903:8cd:b0:2bf:1cdf:9e4b]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:f785:b0:2bf:b17:ae3c with SMTP id d9443c01a7336-2bf3684e2c2mr1144355ad.25.1780065906739; Fri, 29 May 2026 07:45:06 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:44:00 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-14-seanjc@google.com> Subject: [PATCH v4 13/47] x86/tsc: Fold native_calibrate_cpu() into recalibrate_cpu_khz() From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-33051d/1780065909-39D7B938-E97B3FC3/0/0 X-purgate-type: clean X-purgate-size: 1495 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780065933103158500 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 | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 534462c81c78..3e911f0f7364 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -945,21 +945,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 @@ -968,7 +953,10 @@ void recalibrate_cpu_khz(void) if (!boot_cpu_has(X86_FEATURE_TSC)) 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(); + if (!boot_cpu_has(X86_FEATURE_TSC_KNOWN_FREQ)) tsc_khz =3D native_calibrate_tsc(); if (tsc_khz =3D=3D 0) --=20 2.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780065934; cv=none; d=zohomail.com; s=zohoarc; b=SqBQpkTT+2IfuvsXnbHmeJAwbd4gJb46UP8DQ+E1elx7qFJV5C3SxleiKmiUMf/hR4csOCggj5tfKz72qd/Q6oA+ObBFl1LpifDQkiZmOsstvE/C6nkCPWL+osrqMbZBZkUSvdaFDLLZVcrbS4Bax2ANEzeqyTtYgBkZgJMn/ZQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780065934; 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=dFi7v06+6W1FLZftWdDZ5nEL1MuL8W1WaU9VoOY7VWI=; b=kMGG+m3tnqK/7zqxRAuOpCWgj1cm993u/XQdY7zmy9ygrLanoSlKhp9FRRwkcujR5ChPbhFigfwEacL0o+4iq4Ho7QKASuV/LiaBTtKz86GiMPFQ6xX4vCwDHzagb3LCq/8uzvP02EGi8eQ3pthv8hF7ofFyge7lkhKx7qiH20o= 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 1780065934364329.37238170899593; Fri, 29 May 2026 07:45:34 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322223.1588560 (Exim 4.92) (envelope-from ) id 1wSySZ-0005eb-2b; Fri, 29 May 2026 14:45:15 +0000 Received: by outflank-mailman (output) from mailman id 1322223.1588560; Fri, 29 May 2026 14:45:14 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wSySY-0005dU-Nw; Fri, 29 May 2026 14:45:14 +0000 Received: by outflank-mailman (input) for mailman id 1322223; Fri, 29 May 2026 14:45:13 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3dKYZagYKCX8vhdqmfjrrjoh.frp0hq-ghyhoolvwv.0hqsurmhfw.ruj@flex--seanjc.bounces.google.com>) id 1wSySW-0005M9-Vv for xen-devel@lists.xenproject.org; Fri, 29 May 2026 14:45:12 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSySW-00BR7N-CV for xen-devel@lists.xenproject.org; Fri, 29 May 2026 16:45:12 +0200 Received: from [10.42.69.3] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3dKYZagYKCX8vhdqmfjrrjoh.frp0hq-ghyhoolvwv.0hqsurmhfw.ruj@flex--seanjc.bounces.google.com>) id 6a19a677-5cb7-0a2a0a5109dd-0a2a4503ba56-2 for ; Fri, 29 May 2026 16:45:12 +0200 Received: from [209.85.216.73] (helo=mail-pj1-f73.google.com) by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3dKYZagYKCX8vhdqmfjrrjoh.frp0hq-ghyhoolvwv.0hqsurmhfw.ruj@flex--seanjc.bounces.google.com>) id 6a19a676-672d-0a2a45030019-d155d849bdac-3 for ; Fri, 29 May 2026 16:45:11 +0200 Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-368b68a33adso19435850a91.1 for ; Fri, 29 May 2026 07:45: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=1780065910; x=1780670710; 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=dFi7v06+6W1FLZftWdDZ5nEL1MuL8W1WaU9VoOY7VWI=; b=KPMOzrmDnTfinTfoUnw+erj/bhDgg0+m5+TOXJHHsccsTnp75NZORkdvQ8DwjKajOQ CMogFWKefBpOlxtXOpDg3val6UjNe4EWcWTBRXqAcnDTzMwBN/3C3uIQYWsqpZbgUfMn R/UGwkbcG4eqsoFGz3URwDFebXqB6OcPWIcetFe9wENhKmEkyWdW8bVBGJPMdzHc5oIn 8tBt0q08wzmc3X35+J20P9VMVOnK0p7Qnsf475jYT61AxkFqQ6Nife53GruRIPPLGYfI nsJmkc/h5rHFiSpzSg7GqXQKooYCcclA91b7bG4grhyQJqNAX3/L2Zyguh7STzVFXHsO UQzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065910; x=1780670710; 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=dFi7v06+6W1FLZftWdDZ5nEL1MuL8W1WaU9VoOY7VWI=; b=bM2Ux0P+Z6S4Kwy3WpxS1aQOgVhsdtT8uoG/ajupSizC8Jnmb6pntrqLrkSsHM5UeC BnKbrxLYkJDEueYrVOKR/5UrTGjdn+DMER5NlT+Ojbs5JWAUKwL043m9Z3npafhPWt/5 8B4sCRBg3QCj5zGI5hsA3BG/xn7L2GWDEKZ0DrTv8k0K+0WbHMXoQ4glaoj9e9FE0q7k CHA+okZB0juDAUltZ465Njk5O6+1heOcz5aGIIvwj+MjxbaEswDWaUt0/QSYx2eG+3cj hcY9/n1ninVdlbcmshecP7MUfFJRhkzsmFDnF4aGjlO9IY1yfrvR4mcNwpCm/jueWgHF TjqQ== X-Forwarded-Encrypted: i=1; AFNElJ8DGp1ReoQUzfyp2mKmkf0U7hvKiKniZinWcyDKDFk/ku1yHpVp+tELHmvxd386ybGerPChct6rQO0=@lists.xenproject.org X-Gm-Message-State: AOJu0YxTAvX2h8XRwp4lfbqaQibHcCuKXa4emWDv36Fqm9oyZyerHpph I19fPLDsa6K0YwAbU2xmxjpcM+AlFmInHtxXIm+1wnR1/AZWaQMMuL9OpUFswmf6nltjUUliAF2 51EqADQ== X-Received: from pjwy3.prod.google.com ([2002:a17:90a:d0c3:b0:369:1a1a:82d5]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:518e:b0:35f:b6a1:8d27 with SMTP id 98e67ed59e1d1-36bbcd92760mr4080563a91.18.1780065908349; Fri, 29 May 2026 07:45:08 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:44:01 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-15-seanjc@google.com> Subject: [PATCH v4 14/47] x86/kvmclock: Rename kvm_get_tsc_khz() to kvmclock_get_tsc_khz() From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-33051d/1780065912-39171938-6E0A3D6E/0/0 X-purgate-type: clean X-purgate-size: 1630 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780065935149154100 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 69752b170e0a..c4a782a0c903 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -115,7 +115,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()); } @@ -125,7 +125,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); @@ -320,8 +320,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780065938; cv=none; d=zohomail.com; s=zohoarc; b=dEaP2agKsYMSUOFOdKqiBWWMCAgHftrn+UFjqTcH+G+aQspMz5eAs8k3QWCS0C5UBAZlAraqidEl9233txQTVO/8HSyYlQqkvuFRyaS12y84Nb+mKY9louyyFd7lHaVTEl8csfAUwdJcM5oyiXCKOepDryRQKrIRewKDLxqjUZI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780065938; 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=Tb2qB/MKxqPq5hP5Gb3eErmk5uhqs24IfPhH0/tbELk=; b=eiVpB4t2FTTV++koPOJNCsu4ibtJMeDgT5fPBKZTp5vxGpBPuioUcg4rgTMI2hF2YLnL79+DqYIC95exDhrGtDmqhgQZf+uX43v3u1sm6vvfCqrjrtXag/LeWlyjKfS8eTC4/AMy8gW+nDqxMN6dSWJxJbXxBBVUQI85sRnG8dg= 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 178006593851921.909968171402397; Fri, 29 May 2026 07:45:38 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322222.1588555 (Exim 4.92) (envelope-from ) id 1wSySY-0005aM-Au; Fri, 29 May 2026 14:45:14 +0000 Received: by outflank-mailman (output) from mailman id 1322222.1588555; Fri, 29 May 2026 14:45:14 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wSySY-0005Zi-4P; Fri, 29 May 2026 14:45:14 +0000 Received: by outflank-mailman (input) for mailman id 1322222; Fri, 29 May 2026 14:45:13 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3daYZagYKCYAwierngksskpi.gsq1ir-hizippmwxw.1irtvsnigx.svk@flex--seanjc.bounces.google.com>) id 1wSySW-0005Jw-Rf for xen-devel@lists.xenproject.org; Fri, 29 May 2026 14:45:12 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSySW-000xsX-8E for xen-devel@lists.xenproject.org; Fri, 29 May 2026 16:45:12 +0200 Received: from [10.42.69.5] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3daYZagYKCYAwierngksskpi.gsq1ir-hizippmwxw.1irtvsnigx.svk@flex--seanjc.bounces.google.com>) id 6a19a677-bab6-0a2a0a5309dd-0a2a4505b9fc-2 for ; Fri, 29 May 2026 16:45:12 +0200 Received: from [209.85.214.201] (helo=mail-pl1-f201.google.com) by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3daYZagYKCYAwierngksskpi.gsq1ir-hizippmwxw.1irtvsnigx.svk@flex--seanjc.bounces.google.com>) id 6a19a676-aaa8-0a2a45050019-d155d6c9ec9f-3 for ; Fri, 29 May 2026 16:45:12 +0200 Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2baf7378ad0so152509735ad.0 for ; Fri, 29 May 2026 07:45: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=1780065910; x=1780670710; 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=Tb2qB/MKxqPq5hP5Gb3eErmk5uhqs24IfPhH0/tbELk=; b=NEdQBtRr2eAgXWa3QkJGaQbrSf/8eHjImGQRjukCY8lpziko9BFo+3YoxQogITNQg7 t5xbvCkU9x7h3wQnRtMjUY2PU4YyOf8TFAO+Krk75uc4yi7JFSiLn5xFdysEFffryuHT 5yJAbfAk+gDekSuY5a6gEmVYWvrI4S5MhseYViIgnNvk700zGt1d2UY7P+5EO08JeaJw CBAy0uDy4FHXcr2GOtjL8PjDhyJBAA1XPC0os6NUfT6I06aGJkH47v5lE+UGyYMfWBpI AimpslPemKFxz7z8Nh31u8AL70wznDHEq9Pir+f7O3HhMiALZi9kUUMRaXvjGceqEXew dXHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065910; x=1780670710; 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=Tb2qB/MKxqPq5hP5Gb3eErmk5uhqs24IfPhH0/tbELk=; b=Ty4kX1sexQXj/nGtPYRtyyBwBmIutNIVan7wkUOcCw79azwZWYQwXj+OE/DLu2PbSg PBhCfarWx7jExB9PrClTJrT6JIWzpuuB0/uheNMUSHQMY8isUUdwGwXLvFDcLDyY34bY haPuSpKdtfg06wqXQpaHNA0ftpsOl/e8KQURIWHz60ARLAzPcWWhoLBw3FEXiWlmvCA/ OUVnzyEk0MHm1wAbUgu+yA2tIYIQQ+xbcjH1KkrF+nOrqcXUo+WxvTkyvxafuQtp9CnF 8RvpvI/9bKkAAd2J/sZyjozcffvUefYC8+0XDgQwcShvN1tV5rHaIrXeRU7qFrZUzEGH isoA== X-Forwarded-Encrypted: i=1; AFNElJ+war8hGWVHEVPa8Y7X2eDS89yVWpWO2Og12XOi1zpZ6QYOoO7gTpVAS1wj2p8Ar2cOs6g/UdGN2dE=@lists.xenproject.org X-Gm-Message-State: AOJu0YwFv+wxbRfyIkGA7goelY4mzXnWinb3E/hQa+ItE4bCFo7dpHJD d7o0p5p3yVOETHTbPEwhJIGv4vNP+fWyJ2OKAh+d+D+ZqoafMtwowrZpvGD/WXaRn/lF3hLqFU9 0oM3Pyg== X-Received: from plpw17.prod.google.com ([2002:a17:902:9a91:b0:2b2:4f3d:3df4]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:3888:b0:2b2:ec31:25b0 with SMTP id d9443c01a7336-2bf3685ac3dmr1280905ad.29.1780065909849; Fri, 29 May 2026 07:45:09 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:44:02 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-16-seanjc@google.com> Subject: [PATCH v4 15/47] KVM: x86: Officially define CPUID 0x40000010 as PV Timing Info (TSC and Bus) From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-c201ff/1780065912-DB563443-69BEFA17/0/0 X-purgate-type: clean X-purgate-size: 3798 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780065939220154100 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..f02e395cfa9b 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. \ No newline at end of file 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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780065941; cv=none; d=zohomail.com; s=zohoarc; b=e3cTL4+vMACE1Q82F150JYRuUJtv59UioE9vNTlvrjxEFPo2DxFLBj41I3FiZCUMSRODSHQyWYEBKCZk0pz+1z4MGBc9u7QCtsKQrtD4rfIefOcICIXKcVreZFO/XbLZ6fW1hIBob2KyRiZ0Le7hccRAWNcVbutdxId75JlOhMY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780065941; 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=FoqgLgRaMBwMlzlRb5ZdKmNASLSl22kGdknpkiNEuDA=; b=Vhuwa0HxZDd7C5jVDjZjf31YxPo04OGkjJ2DDHtaGK2qjXVMDIM+wcvajHJ64uw1FfaEZYllL39vko7G5Tk1T8ZupgMcNsGwd29bNlR9C00iv9YlEgV5KrcPZZRM5DxPVo2y+4AfAFnAyKDs8M/WcKDNkicDS8mUgERGnVNjV+c= 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 1780065941663217.38933448342573; Fri, 29 May 2026 07:45:41 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322224.1588569 (Exim 4.92) (envelope-from ) id 1wSySb-00066j-8R; Fri, 29 May 2026 14:45:17 +0000 Received: by outflank-mailman (output) from mailman id 1322224.1588569; Fri, 29 May 2026 14:45:17 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wSySa-00065I-QK; Fri, 29 May 2026 14:45:16 +0000 Received: by outflank-mailman (input) for mailman id 1322224; Fri, 29 May 2026 14:45:14 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3dqYZagYKCYExjfsohlttlqj.htr2js-ij0jqqnxyx.2jsuwtojhy.twl@flex--seanjc.bounces.google.com>) id 1wSySY-0005Z2-3k for xen-devel@lists.xenproject.org; Fri, 29 May 2026 14:45:14 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSySX-000xsX-GA for xen-devel@lists.xenproject.org; Fri, 29 May 2026 16:45:13 +0200 Received: from [10.42.69.5] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3dqYZagYKCYExjfsohlttlqj.htr2js-ij0jqqnxyx.2jsuwtojhy.twl@flex--seanjc.bounces.google.com>) id 6a19a677-bab6-0a2a0a5309dd-0a2a4505b9fc-4 for ; Fri, 29 May 2026 16:45:13 +0200 Received: from [209.85.216.73] (helo=mail-pj1-f73.google.com) by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3dqYZagYKCYExjfsohlttlqj.htr2js-ij0jqqnxyx.2jsuwtojhy.twl@flex--seanjc.bounces.google.com>) id 6a19a677-aaa8-0a2a45050019-d155d849ac39-3 for ; Fri, 29 May 2026 16:45:13 +0200 Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-367f715cbd0so13424836a91.0 for ; Fri, 29 May 2026 07:45: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="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=1780065911; x=1780670711; 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=FoqgLgRaMBwMlzlRb5ZdKmNASLSl22kGdknpkiNEuDA=; b=bfgS0DUt/SbtEwKQJVBheJUrxY5bMLKeYEYyY6Jg1KpQNdS3mq/GRiinFyEzR2itXY HRMNOqu4CrVYiZs0dFpxtknfM0uycmnb775MtUaHaIkp8yu8xCdSHKStUiGNI9BFvLrI aLjGgvajZ1VCPobOC1emgOTU9qA4qIkK0JOQPi1K+9U7GhERP0W4pOHFk0Rh5tKzaQto 4iPoAv0J3FMDoVq9vbZkH+BLCjbBy9zevcpol0L5cu7dGoJXdgBVeYTeE3kkW7uv6c5b SUnRng4nUrTlBUQQfeDz0hnK+sBHLcZyJ+KU55w1ucZd8aLIyzP0BphfPpNaHS/zM75t sKQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065911; x=1780670711; 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=FoqgLgRaMBwMlzlRb5ZdKmNASLSl22kGdknpkiNEuDA=; b=O+lJih2s7sDq/qBVAM8U73Nz9D8iD/JE69vilqOdXcJVE2UcvupARWNIg0osqD9j9k 28xz/2Or46IIXFuROCJQXq180tsRVU28kEKnQwU4+5hr8Ml+SXWqo8dY1YdUv9qHktOm uXF6UoHToQANIrnDVpOKFHA5w8Pf2jL0sLCXzM5CxTgKFuYxc18Twjzf4811PSyqkfKL CeLYBTstHgMavnnowqld9IkGba2o23S3ZTZKmlQSJUXC16JK7C4OgnKxi9aPtTL6imIk gBuFRmoDJwYxNeS4v74rTpsFBo48UVsWmUtrwxWLJ2nPU932rJuVPHTPDnWFCUc/v98O TPNw== X-Forwarded-Encrypted: i=1; AFNElJ/+J4jOKlEdqOxguT1vb8EwZR/w9vxEfVX7kkF1QfbQ4uzqk0fTJe7fZAYxFWX3JNPIEVC+OEydpiQ=@lists.xenproject.org X-Gm-Message-State: AOJu0YzJb/iITz30DDfTrD0+YUEpz87rVPNacfdX6EAD+xab46UhhT8H g6qjExmSe7le4GZkuS9OreowNKJLNaxOlK6UxNXK7kmZTG7CaG6PcOMmwwZPduoPiMNsbuacEbM M9h4DlQ== X-Received: from plbjh24.prod.google.com ([2002:a17:903:3298:b0:2bf:14c9:866d]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:d4c2:b0:2bf:2589:7bc2 with SMTP id d9443c01a7336-2bf367d3ab7mr1162735ad.15.1780065910985; Fri, 29 May 2026 07:45:10 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:44:03 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-17-seanjc@google.com> Subject: [PATCH v4 16/47] x86/kvm: Obtain TSC frequency from PV CPUID if present From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner Content-Transfer-Encoding: quoted-printable X-purgate-ID: tlsNG-c201ff/1780065913-E119B443-5351C6B5/0/0 X-purgate-type: clean X-purgate-size: 5045 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780065943266158500 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 c4a782a0c903..404f60741aa8 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -320,8 +320,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780065933; cv=none; d=zohomail.com; s=zohoarc; b=jRODpvm9atwqz+Slzuzb4h+BJffyhXYw/tVCYDjL15cccUVMedU6XC7c1Pajren8zPTR6//2Qm6xPRlyc/2gLszBPAluicBieKnpRAg44R0hvqqqXPKGTHPyERK0AGGd8gQXqFGdl4GITmkG4bHjcpoFAcgF79KztOF4MZN/rh8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780065933; 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=3J4tSt2+/CTMv4tcKt5oCpoZW7w+XDXf08twJvjnqkg=; b=iBAJuuXVXQ5DhmuhIqoBp7N0S4gqq2IvWMZGxA9F3UOb7npYwjS6X8XKk2JbQlzsAgODkoQH5jmJHWF6vSgyYx67zD55ojONHPIk7KPcWLZvpBrIR6c710GRZ4bGJg3sirDRta4/1HP+lBGV2bPKk1Q9sq+z5fxbvnz937fcuBY= 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 1780065933695412.53777379596295; Fri, 29 May 2026 07:45:33 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322226.1588576 (Exim 4.92) (envelope-from ) id 1wSySc-0006EA-CT; Fri, 29 May 2026 14:45:18 +0000 Received: by outflank-mailman (output) from mailman id 1322226.1588576; Fri, 29 May 2026 14:45: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 1wSySb-0006B1-Ec; Fri, 29 May 2026 14:45:17 +0000 Received: by outflank-mailman (input) for mailman id 1322226; Fri, 29 May 2026 14:45:15 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3eKYZagYKCYMzlhuqjnvvnsl.jvt4lu-kl2lsspz0z.4luwyvqlj0.vyn@flex--seanjc.bounces.google.com>) id 1wSySZ-0005h2-8z for xen-devel@lists.xenproject.org; Fri, 29 May 2026 14:45:15 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSySY-00BR8Q-LK for xen-devel@lists.xenproject.org; Fri, 29 May 2026 16:45:14 +0200 Received: from [10.42.69.11] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3eKYZagYKCYMzlhuqjnvvnsl.jvt4lu-kl2lsspz0z.4luwyvqlj0.vyn@flex--seanjc.bounces.google.com>) id 6a19a675-bab6-0a2a0a5309dd-0a2a450bdfe8-14 for ; Fri, 29 May 2026 16:45:14 +0200 Received: from [209.85.214.202] (helo=mail-pl1-f202.google.com) by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3eKYZagYKCYMzlhuqjnvvnsl.jvt4lu-kl2lsspz0z.4luwyvqlj0.vyn@flex--seanjc.bounces.google.com>) id 6a19a679-212f-0a2a450b0019-d155d6cab1d7-3 for ; Fri, 29 May 2026 16:45:14 +0200 Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2bf30576aa3so2122645ad.3 for ; Fri, 29 May 2026 07:45: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=1780065912; x=1780670712; 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=3J4tSt2+/CTMv4tcKt5oCpoZW7w+XDXf08twJvjnqkg=; b=k/7vSZjGfhgLmvVz31GtsBc1e3yJM6epR4XtoNBxKt8DNq/4secfgzEVYm/l9XOpcL SPgDVC79JNWKWQGc+HAiJAAQfYt7alDJJIAgZk4nlPPolY2TP2VG4DKbBxFqNXX8sBta /SapJ/9KyDwy1dYg+3aORaZtDddwNADULkd6bh89z8NLuC2shUp7mFrjXWYvjXYeLIFZ y6Xif9JVYjZi1MV5ifuuTpSO3r8lmBOIOmSxTeoYk7UK9zym4YUX9/a+/VQNaFtc8GRE ksxN4f6zADYOkgy9X6/pgEVoRbu3zWtsrRQjNdzZzTRAhxxZPZ9NmAfILuSsqBI4uEOy W/fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065912; x=1780670712; 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=3J4tSt2+/CTMv4tcKt5oCpoZW7w+XDXf08twJvjnqkg=; b=s2lY3Hl6WvxvfqF4Vglc94zdAWfSTDaPMCl+6OaodoEoJ7fNVvrmBGtgZ7Xo6eVZCv gDVfwkf1HFTLPK83kNfCoWOxY2OHbYCL2hRE1lo5bQr5rHiadoTYIcAODsbCkNS6KGSw RPq0AlA0Cs4AW+wwHK160ShlIQSmzj6gGiV2SHi98Kbq2aPNtzZvny/H3Lxd93rNHuC9 NyR6hXi6cnyf5LxjKG4BOj3DvQWC503fFFztxIMXgRruKqpcVuGq/iVpy/6jXF0N6aJu E4QlHJtiOK3nPqaC1Mnk3cgK9s4kaB0MU8YH0qe7qaUHTtrzmDyhubmnxE4gU9PxQFxD sGxA== X-Forwarded-Encrypted: i=1; AFNElJ9HYI63mWAhRMt2FFm5NKccmrCyk4MjnxerJlX7Q2PSGo9Cy6PgVwN8lgFAZ/XTdlLAUCZMO1stdSU=@lists.xenproject.org X-Gm-Message-State: AOJu0YyIU1UjjpwSYLUbxrYt+sa/QDVhateiihWYIokQK2FNBoWmT1Z4 kZ3Cy1B45Oaa88tQkX8apMKcHySZBUjRtFlzgd1tHN5MtLh8J9Ch2WXQZjFmiitiGvn1BnaD+Em 8/bDE3w== X-Received: from plbkk16.prod.google.com ([2002:a17:903:710:b0:2bf:222e:c947]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:15cf:b0:2b0:ac1e:9737 with SMTP id d9443c01a7336-2bf367c2eb0mr1549335ad.12.1780065912148; Fri, 29 May 2026 07:45:12 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:44:04 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-18-seanjc@google.com> Subject: [PATCH v4 17/47] x86/kvm: Mark TSC as reliable when it's constant and nonstop From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-42698a/1780065914-13F7EF3B-2BDF8279/0/0 X-purgate-type: clean X-purgate-size: 4118 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780065935087154100 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, and the admin hasn't explicitly marked the TSC as unstable. 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. Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_para.h | 2 +- arch/x86/kernel/kvm.c | 16 +++++++++++++++- arch/x86/kernel/kvmclock.c | 15 +++++---------- 3 files changed, 21 insertions(+), 12 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..4fe9c69bf40b 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,20 @@ static void __init kvm_init_platform(void) } } =20 - kvmclock_init(); + /* + * If the TSC counts at a constant frequency across P/T states, co= unts + * in deep C-states, and the TSC hasn't been marked unstable, trea= t the + * TSC reliable, as guaranteed by KVM. Note, the TSC unstable che= ck + * exists purely to honor the TSC being marked unstable via command + * line, any runtime detection of an unstable will happen after th= is. + */ + tsc_is_reliable =3D boot_cpu_has(X86_FEATURE_CONSTANT_TSC) && + boot_cpu_has(X86_FEATURE_NONSTOP_TSC) && + !check_tsc_unstable(); + 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 404f60741aa8..69a15fbfb779 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -285,7 +285,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 @@ -334,16 +334,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) && - !check_tsc_unstable()) + if (prefer_tsc) kvm_clock.rating =3D 299; =20 clocksource_register_hz(&kvm_clock, NSEC_PER_SEC); --=20 2.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780065947; cv=none; d=zohomail.com; s=zohoarc; b=TRXUhbWc1YzK+g0C4il7qPRndoUsip/tPZkGlOyv3VdkqWSCw6yUWWxGZAyEXo5bcYNUs9XXESmYJtEWgKHYkjDTct4Exl/ZB6mxLN0drkwaSvoeKvCZ6EBqJytjL7z/kazK1wzw5w1pt8P6EYMMs7hJSsoZhnS6JQbyVnHm4Vw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780065947; 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=Xkng2ObvqyeOAHFFD1k5jEREhKyPX3M1bjFdIhQCaZo=; b=SjxRwLMz8xLVA/O7VJSB2rhLXW51THjk1VXfBH7Ubr8jkm2MOpsMi8riz085eIqV5UwBLFjhhwNrWkxOfCA+YDxP608PNowKmxLg2al8MDtZ8d/4d1VEhStlRjwg+V88Qo9kBvRYl1D936B3scFmySkTNvmooJWo78KTti0mECo= 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 1780065947401981.4217074109912; Fri, 29 May 2026 07:45:47 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322229.1588580 (Exim 4.92) (envelope-from ) id 1wSySd-0006Mf-FI; Fri, 29 May 2026 14:45:19 +0000 Received: by outflank-mailman (output) from mailman id 1322229.1588580; Fri, 29 May 2026 14:45:19 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wSySc-0006KH-Bz; Fri, 29 May 2026 14:45:18 +0000 Received: by outflank-mailman (input) for mailman id 1322229; Fri, 29 May 2026 14:45:16 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3eaYZagYKCYQ0mivrkowwotm.kwu5mv-lm3mttq010.5mvxzwrmk1.wzo@flex--seanjc.bounces.google.com>) id 1wSySa-0005w6-Cl for xen-devel@lists.xenproject.org; Fri, 29 May 2026 14:45:16 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSySZ-00BR8Q-Pd for xen-devel@lists.xenproject.org; Fri, 29 May 2026 16:45:15 +0200 Received: from [10.42.69.11] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3eaYZagYKCYQ0mivrkowwotm.kwu5mv-lm3mttq010.5mvxzwrmk1.wzo@flex--seanjc.bounces.google.com>) id 6a19a675-bab6-0a2a0a5309dd-0a2a450bdfe8-24 for ; Fri, 29 May 2026 16:45:15 +0200 Received: from [209.85.214.202] (helo=mail-pl1-f202.google.com) by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3eaYZagYKCYQ0mivrkowwotm.kwu5mv-lm3mttq010.5mvxzwrmk1.wzo@flex--seanjc.bounces.google.com>) id 6a19a67a-212f-0a2a450b0019-d155d6cabd91-3 for ; Fri, 29 May 2026 16:45:15 +0200 Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2bf1845bddfso12753455ad.1 for ; Fri, 29 May 2026 07:45:15 -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=1780065914; x=1780670714; 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=Xkng2ObvqyeOAHFFD1k5jEREhKyPX3M1bjFdIhQCaZo=; b=qic0ds+ABjOhxQ8AmQ1a1xsAkCGXYWAJbRinH9cA1C3NYqSyPpm9bMctjoMYHYjvnr JTUHa+x5YybqlX4zfDYFOkyAr9pD90FJRhN6Sjx8x6Yvtye5b7mk1vAHHZ+Z2dm7TpRI FvM4qDyu6vR1kzvbWAdD7EMU5lrHW5adNpTbQj7oX51Ku3rS3W2UOpuvuQNuBqNQVb1Z +ENYIawDUNk9Ti4AsKVaMD/XyY6Tl9zqfNfKKco/1ZVYpeII4FigMwjgH1212K/W//IN CUUbzpYiiuWfqavVtfKE51/nJDfZdizgie3q6EAf+XSiIPqb+8ovMnFqcrmD7TcQW0a3 qmyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065914; x=1780670714; 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=Xkng2ObvqyeOAHFFD1k5jEREhKyPX3M1bjFdIhQCaZo=; b=ILKs7B/BtEpcbztzckWBVURf7pksyoX0D7CzZB8T0oZBkXe6LyRo/RJezB8Tjanpp8 QplS4LpdGY0jhc6Tn6wFoGVvJpwLcmkvLQFwczIm30uFLxPo0O/y9qHYO4H7F81SkdrK Y3wLJiNmMck98oymXCkg6okdp038A0Dy1dHkKAntb3xwvSQwD4f0qCI9AZ06yuq7JPgl bf+M6wyA0hIPNyq79PFn2ULGyKTul4dDdig6mZQavkLSuOxtu8JdD3uROVpTz/bFiEgr uUXjRjaZsl7P2xmyTvCuuFq2csWrQy/pALr/1iQxrE9M4t9OdpNKHUO0yChYHsmrr6VJ KeYw== X-Forwarded-Encrypted: i=1; AFNElJ/YClqMQW9ZZkr3wisv4A6e1VBCfWwttWdOstF85XY7YmGcJf6/cfq4JqnOF9FujBxR3F73ro80NbQ=@lists.xenproject.org X-Gm-Message-State: AOJu0YwL6p6d0Hkk62XqamgBh6koGo+XCMOkgYAPDqnNBm6iHi/83b+4 wuZJ9Fiu4BoCZIKAZvWZ+TCMzJ/LyA5vEYnEDRNEx8HYtKIJczzVy4MHQjmdQiM62Yg968lNNjn QHNSfOg== X-Received: from plhl2.prod.google.com ([2002:a17:903:1202:b0:2b0:5b0d:f4db]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1508:b0:2bc:b141:8551 with SMTP id d9443c01a7336-2bf36833ef4mr1185145ad.19.1780065913278; Fri, 29 May 2026 07:45:13 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:44:05 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-19-seanjc@google.com> Subject: [PATCH v4 18/47] x86/kvm: Get local APIC bus frequency from PV CPUID Timing Info From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-42698a/1780065915-18F66F3B-F6E943BF/0/0 X-purgate-type: clean X-purgate-size: 1416 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780065949242158500 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. Note, the unit of measurement for lapic_timer_period is "ticks per HZ", not Khz. See Documentation/virt/kvm/x86/cpuid.rst for details. Signed-off-by: Sean Christopherson --- arch/x86/kernel/kvm.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index 4fe9c69bf40b..c1139182121d 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -977,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 apic_khz __maybe_unused; u32 timing_info_leaf; bool tsc_is_reliable; =20 @@ -1039,6 +1040,13 @@ 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; } + +#ifdef CONFIG_X86_LOCAL_APIC + /* The leaf also includes the local APIC bus/timer frequency.*/ + apic_khz =3D cpuid_ebx(timing_info_leaf); + if (apic_khz) + lapic_timer_period =3D apic_khz * 1000 / HZ; +#endif } =20 /* --=20 2.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780065944; cv=none; d=zohomail.com; s=zohoarc; b=X5SR1WOhMdPqFZ384GZg/mb9RNK+le1qQdtUNKL2JAr5BJtW617cKIq+L5BWhvaqtnVnW9xUo6nCyrnv+8JDKVKjBskjU38H1lvHMaWm6NTj0ykw1CDEkR/i/gYdZbPEtmA8tKcaSwTakNRNJcw3lDZL2wblDbYBmNeF4FAGgSc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780065944; 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=33AEblmPZenCG7ncxIbBQYlPZl7MWXLQcjQTaHUg1Zw=; b=WWjbP21Eqamj4Hz29lyAkgxU7Ur26hM+iCAHpupmxCQG8HL8KAq8gTRmrNOxcUDwRvZCB++BVi/9gG4juZQ2kdSbVgS3KqJPkAaGKJpnBeg6MPE0xqNEE+0yfk6U1DGyFc+DXIRmVQ3UZVSprd217dgA5OwgZJm6Q/3YZkIQrEs= 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 1780065944315593.0715896729232; Fri, 29 May 2026 07:45:44 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322231.1588589 (Exim 4.92) (envelope-from ) id 1wSySg-000729-LL; Fri, 29 May 2026 14:45:22 +0000 Received: by outflank-mailman (output) from mailman id 1322231.1588589; Fri, 29 May 2026 14:45:22 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wSySf-0006x4-4e; Fri, 29 May 2026 14:45:21 +0000 Received: by outflank-mailman (input) for mailman id 1322231; Fri, 29 May 2026 14:45:18 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3eqYZagYKCYU1njwslpxxpun.lxv6nw-mn4nuur121.6nwy0xsnl2.x0p@flex--seanjc.bounces.google.com>) id 1wSySb-0006AC-Hh for xen-devel@lists.xenproject.org; Fri, 29 May 2026 14:45:17 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSySa-00BR7N-TT for xen-devel@lists.xenproject.org; Fri, 29 May 2026 16:45:16 +0200 Received: from [10.42.69.7] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3eqYZagYKCYU1njwslpxxpun.lxv6nw-mn4nuur121.6nwy0xsnl2.x0p@flex--seanjc.bounces.google.com>) id 6a19a670-5cb7-0a2a0a5109dd-0a2a45079b98-38 for ; Fri, 29 May 2026 16:45:16 +0200 Received: from [209.85.214.201] (helo=mail-pl1-f201.google.com) by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3eqYZagYKCYU1njwslpxxpun.lxv6nw-mn4nuur121.6nwy0xsnl2.x0p@flex--seanjc.bounces.google.com>) id 6a19a67b-229c-0a2a45070019-d155d6c9a517-3 for ; Fri, 29 May 2026 16:45:16 +0200 Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2bf11699875so19125195ad.1 for ; Fri, 29 May 2026 07:45: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=1780065915; x=1780670715; 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=33AEblmPZenCG7ncxIbBQYlPZl7MWXLQcjQTaHUg1Zw=; b=d1LTvsuQnIoy+PIGbkjWvU0lmVsHG7Tk9PePtk8hEEa1lCxDoCuUZArBBrT/uT56Xd KI54wWEPs/eTRFILwrvaMRMCLnbVHCtotAjPaay9N/XNPWVkK6BBMla1rZsXmSDFO7t2 izl72tYT7Sw8TwOsv/7l6VjqUul4CHs8bvYWqHU4frgMU4wd9A7+Qspt1+Kn6LqiShQE hX9WPxj63+a8mJzQ6tHauVknMfJksIAh7x0EHu5AoLsirGqR6v1zhXw5RLVLNo9rp8UA uOM1YWCODKMBXN8QTGI4eSWJF1yKxiAfsnsEB9PPpUtgoSCwlQBHEXiiFlRdklpSV1Ly W5mQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065915; x=1780670715; 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=33AEblmPZenCG7ncxIbBQYlPZl7MWXLQcjQTaHUg1Zw=; b=lLef64oPTRx2d74sTjEv27Pou2o1qqmg+VPmudtpXnfUYdlEOQC909dseATceAwDYp 5HjAZhcCQvteJKLzpnhgAaohp1vSYfohq1dUUUYg9HKxaxvsK5euJbB7h9oO6KJjFcNa n32JfO23oY4Xt3IX60nnc9ylzja3kyN+9Vqu+18tji92/3nmU71hkX2lbikkn1WFgAx0 lDsm8UcUBzb/8EB9iXXIiPepXRyN5RWxOa/oEbbOvTpQLGF21uTce9NMsGtJfAPhIQe8 7yI8tvE+Z/snXrM+Y1OILV8l31Axr6GPIHMyhVV8LBOwtHtGHyr5d5zTm/gSuemyr1We zmYQ== X-Forwarded-Encrypted: i=1; AFNElJ/5tCwO+2kRmHhK4GmoJCrlICfr3ma8+weMkr0wqfsnIk+z9VtBFb8NSoKtk93hXnAGR5d6O3Pf+yo=@lists.xenproject.org X-Gm-Message-State: AOJu0YwLetWGkcRXS8W8rzpo8jswl4h+dn0pY98j3v2R9kUVBSo6tpUr qw4FapTbX6kqZjWZzzCD239Yn59Pkcm//LTdDfk8ynMIRfOxLV+E/RcgOVcoor8A+c2ZaOQMhf6 6obtLqw== X-Received: from plaq13.prod.google.com ([2002:a17:903:204d:b0:2bf:68:53db]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:ffcb:b0:2b9:cabe:ce37 with SMTP id d9443c01a7336-2bf204679c2mr35097225ad.1.1780065914467; Fri, 29 May 2026 07:45:14 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:44:06 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-20-seanjc@google.com> Subject: [PATCH v4 19/47] x86/tsc: Add standalone helper for getting CPU frequency from CPUID From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-ef75cf/1780065916-0A16DC48-AF566691/0/0 X-purgate-type: clean X-purgate-size: 2830 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780065947197154100 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 | 32 +++++++++++++++----------------- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/arch/x86/include/asm/tsc.h b/arch/x86/include/asm/tsc.h index 4a224f99c3b9..7ff2bfdcdf38 100644 --- a/arch/x86/include/asm/tsc.h +++ b/arch/x86/include/asm/tsc.h @@ -90,6 +90,7 @@ struct cpuid_tsc_info { unsigned int tsc_khz; }; extern int __init cpuid_get_tsc_freq(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 3e911f0f7364..bdff8c988866 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -692,6 +692,18 @@ int __init cpuid_get_tsc_freq(struct cpuid_tsc_info *i= nfo) 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. @@ -727,13 +739,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.numerator; - } + if (!info.crystal_khz) + info.crystal_khz =3D __cpu_khz_from_cpuid() * info.denominator / info.nu= merator; =20 if (!info.crystal_khz) return 0; @@ -760,19 +767,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780065952; cv=none; d=zohomail.com; s=zohoarc; b=L3mkFTkCpNLH6tnxJLP9DCv5pPm1fOwnxmKg2wu2KXMFe4X/IELikGv2x6cOuqftFiqG5lpW/NPO4TNoT9wC48yp/XVa+nkOlZ+muqBeJS88WfTK0wJzCNFysOVYUu6wv5LRNmcVfcfCWuZgvH38mvhpDmrBw48X901wqtnBG6w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780065952; 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=uWYqy9oq3guwZeX1CT7rpLN1sV47Joj/CY0UrflMOfk=; b=b53NbxajHN2wDsVM6sOn6l1uBM1qhKueQageAYC9wFh9q50hWx0d1eGyKBFRTa96aCz/07DReJQGZfk7dU6hJ9UPn1Q88sImrcDMF7Z0tokOZ637DfDyUbHbS1zUTSlGR0iOVNfdiEVxrupdwBdxT83DZz3T3QHVb2dfrQFZUd4= 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 1780065952599692.1258731512013; Fri, 29 May 2026 07:45:52 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322234.1588596 (Exim 4.92) (envelope-from ) id 1wSySj-0007c5-4y; Fri, 29 May 2026 14:45:25 +0000 Received: by outflank-mailman (output) from mailman id 1322234.1588596; Fri, 29 May 2026 14:45:24 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wSySh-0007WI-S6; Fri, 29 May 2026 14:45:23 +0000 Received: by outflank-mailman (input) for mailman id 1322234; Fri, 29 May 2026 14:45:20 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3e6YZagYKCYY2okxtmqyyqvo.myw7ox-no5ovvs232.7oxz1ytom3.y1q@flex--seanjc.bounces.google.com>) id 1wSySd-0006W7-D9 for xen-devel@lists.xenproject.org; Fri, 29 May 2026 14:45:19 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSySc-00BR7N-PD for xen-devel@lists.xenproject.org; Fri, 29 May 2026 16:45:18 +0200 Received: from [10.42.69.10] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3e6YZagYKCYY2okxtmqyyqvo.myw7ox-no5ovvs232.7oxz1ytom3.y1q@flex--seanjc.bounces.google.com>) id 6a19a66e-5cb7-0a2a0a5109dd-0a2a450acfc8-48 for ; Fri, 29 May 2026 16:45:18 +0200 Received: from [209.85.216.74] (helo=mail-pj1-f74.google.com) by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3e6YZagYKCYY2okxtmqyyqvo.myw7ox-no5ovvs232.7oxz1ytom3.y1q@flex--seanjc.bounces.google.com>) id 6a19a67c-56b3-0a2a450a0019-d155d84ad121-3 for ; Fri, 29 May 2026 16:45:18 +0200 Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-365d4d2fa04so13286064a91.3 for ; Fri, 29 May 2026 07:45:17 -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=1780065916; x=1780670716; 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=uWYqy9oq3guwZeX1CT7rpLN1sV47Joj/CY0UrflMOfk=; b=A1gf8d4CG/WfznANbJMoCUINHF/WJURwhms7QgjXKsJK+w+ksmVOzvnIOrEuG7d0RV LjgCImBssqgDxWjMILVkBoLb/pkuZZ9tQ+TaG/CPapFiSRV48I5M9lqh0ky1y5RUd6/U R4PRdlAtbKQbm/C/Zo+0KGpu9HmTcvXFCf+RtoxC7owhkxeu3nTlQBcdDYt7hCU+hzIo nvQcVu1SmdlB294L8l+EjeJcviIwqy/1ALTACWv9HgpYWNZlQjT6ynP38tiqqGJ9oFug +MAVokxHdgyh2i9phWe+qO152yrQLeQZGy/3g8o8XBOgaaIljXSZI61eyuoVCfIfXLj0 jmIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065916; x=1780670716; 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=uWYqy9oq3guwZeX1CT7rpLN1sV47Joj/CY0UrflMOfk=; b=J46HT6NYnob7b4h7i2QFczGmzm05YDd/II4PzqBVpBsxHJwnu1pDo+IwLFCLf7ad9W VzS31mBsjd83C3N+Wwgd9NN/IAhehJIqGnrHQtORIsOTatyvLuZGwZlvyuNmqna1skEm VnNsoRQ0sv0XfKj7X8Z8q7FnuUS17CiyOZ/MmOXLDrvu+7faODx8P/pqfIwNVHAu8q6k WxuJWMkrFUnhqgoWaAS+1BV6PV+6wVjXB6I/5ZQ6W37s8hwGQkdf1k7EzlSYZ0UllvYZ iKi+I0aNjwVba+CICZttS19EcsYJv2b5CO5npvf2SRT0+USv3lMdQ6bErU7EyoLKP4c1 wDUA== X-Forwarded-Encrypted: i=1; AFNElJ8YFrxI2acg5IklBELlwhgU7mimql8/27LYZWKFQeIHBn3tRfdHtmiTUdCg41pCszdgULtktyrGjeg=@lists.xenproject.org X-Gm-Message-State: AOJu0YxpwuyGKRzhpHCNwj37FcvMxQ9bqMeBmFF9DcnWlXEk5cIfFPTV rNQi+Nr9wnIrKO4NTMQrKpI43K5f8UoKjew0+P/7H+6tHrujoSkrm6LtnWyOtOuBtC4o3nkbS5i +iurATQ== X-Received: from pgce4.prod.google.com ([2002:a05:6a02:1c4:b0:c82:7a7f:9bf6]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:4d02:b0:39f:aa3:5e56 with SMTP id adf61e73a8af0-3b412058e7dmr3539717637.14.1780065915613; Fri, 29 May 2026 07:45:15 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:44:07 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-21-seanjc@google.com> Subject: [PATCH v4 20/47] x86/kvm: Get CPU base frequency from CPUID when it's available From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-4011c0/1780065918-7DF838B7-0B67A9FC/0/0 X-purgate-type: clean X-purgate-size: 1789 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780065953303154100 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 c1139182121d..c81a24d0efdf 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); @@ -1049,6 +1055,14 @@ static void __init kvm_init_platform(void) #endif } =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, co= unts * in deep C-states, and the TSC hasn't been marked unstable, trea= t the --=20 2.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780065948; cv=none; d=zohomail.com; s=zohoarc; b=KWwJc+rmDKKqXPt6TATdl/NmTwICgXRan7SpPTEWxQvz6GK4Qkfv7U1y4gvQrbHqVULewAOm/wkSgDOcUlMxVfJyMFctmz8b6RLMZ6Dhsbf7RabdMqAQcrebD4F62HxHTLOjHjHtTGJ5FAVHeBdRDOdLN/F1N3QW0ymaC/i/kBU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780065948; 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=YpIj1ucaijezC9S67db1/B7YVcsq/H2nz/z97RNrYsc=; b=ZuLEizSNmTvbTJsmT/VBi7X/cZ7VbFqSlrEsorezshnRSIR6eT0t1fYvzOCC6WcBHsunIKXmPcWPp+HUFhxxvA6fei9zMIGI1Ql8TAG8S2KgAXPJqd8nND6ulWqlATZs8AdxylEHE3FK5oJOpkZaXM912/nDDDi9s7eGLS/+Iz8= 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 1780065948061606.5448305005242; Fri, 29 May 2026 07:45:48 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322236.1588603 (Exim 4.92) (envelope-from ) id 1wSySl-00083d-6g; Fri, 29 May 2026 14:45:27 +0000 Received: by outflank-mailman (output) from mailman id 1322236.1588603; Fri, 29 May 2026 14:45: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 1wSySj-0007zH-MX; Fri, 29 May 2026 14:45:25 +0000 Received: by outflank-mailman (input) for mailman id 1322236; Fri, 29 May 2026 14:45:21 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3fKYZagYKCYc3plyunrzzrwp.nzx8py-op6pwwt343.8py02zupn4.z2r@flex--seanjc.bounces.google.com>) id 1wSySe-0006hx-9T for xen-devel@lists.xenproject.org; Fri, 29 May 2026 14:45:20 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSySd-004cke-LT for xen-devel@lists.xenproject.org; Fri, 29 May 2026 16:45:19 +0200 Received: from [10.42.69.2] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3fKYZagYKCYc3plyunrzzrwp.nzx8py-op6pwwt343.8py02zupn4.z2r@flex--seanjc.bounces.google.com>) id 6a19a66f-e002-0a2a0a5209dd-0a2a4502d7a8-44 for ; Fri, 29 May 2026 16:45:19 +0200 Received: from [209.85.215.202] (helo=mail-pg1-f202.google.com) by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3fKYZagYKCYc3plyunrzzrwp.nzx8py-op6pwwt343.8py02zupn4.z2r@flex--seanjc.bounces.google.com>) id 6a19a67d-af86-0a2a45020019-d155d7cac48b-3 for ; Fri, 29 May 2026 16:45:19 +0200 Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-c8294d8c48eso9079962a12.0 for ; Fri, 29 May 2026 07:45:18 -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=1780065917; x=1780670717; 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=YpIj1ucaijezC9S67db1/B7YVcsq/H2nz/z97RNrYsc=; b=fDzpz1UOVuiTwjLKxeqhoEH0DbqJ8D18B/HnO6g0z9MWZBuP3pfeKrSVQi+1zmjSva k8qs9oDmNJBe2go03pNg5nnfryKgnwdyiUF5a/BxN6Gk5MJIpovShgaJqQj1mBJE7I6m /QBlK+RatgPI+rTC3Zgbn5B6P2OblYwoQfAsz5hP9L0mlcua/szLfosgQcSWdP+68V/G ILthrePrxT7wzso1G6M+vY44/kZIwJBLGJUugnBxEhKuxGYyq62ZIjT7EYharzvtiqnE L2A9hpq/bkYIP8ALWD83bmwiwv1o6WId2RJF9qkTT+yKidAuQpoU3KOZQEdVuj1zhpVV WW5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065917; x=1780670717; 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=YpIj1ucaijezC9S67db1/B7YVcsq/H2nz/z97RNrYsc=; b=HV8+/HB/6azQH6tKMtuX5ml3bE6lzmgE2VbhUCWypkBHaSO3/x9xxY4CW8Vpd2GuI0 IkjJD6774HdUTPzwImwcydi7NPqItYq3pXKGJxYr5WY4eobB51elwj+T/wLFbo0/S3QN jB98T7T3fL1LLD+iSq3+873zo4/ZFvbbQj2+dhKHL+0hpC+J4zdymaSTK3T6Cn6tmKMI 8zzsSgy98W+Fw9+U9MzNluU7ZGuosy1aUKfKB3oStDxdoX5Q+PtZtwAC2fFHjFGD1wvU J81hiHD3H9F96AO6+h/1/yPgLcA4hOghnuAMiZfP1oI3nd1raPwa59bJS8QYI5oqul45 OJlg== X-Forwarded-Encrypted: i=1; AFNElJ/1uJ0HzEmvkhKBf8W/oZOxlHUHNw4nEGANlTOSlIsZPPT5d9zsXJ3Osr9SP9G0ePH7VvM+dRQguIk=@lists.xenproject.org X-Gm-Message-State: AOJu0YyvkmIUEib7Yir91zBLn/fBYMzl7uLnJ2HPhz51dCYIh95WcSGS HTlmALJeUYCyxWourz2hZW6EPWKOMfNxYPu9BWhdRTNvm9Gdv6lNIqVLI9x9t2YZGx6e/5/2IZx tl72DpQ== X-Received: from pgnm19.prod.google.com ([2002:a63:7d53:0:b0:c79:1600:6a09]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:244f:b0:3a0:67d:bba9 with SMTP id adf61e73a8af0-3b4120a47c0mr3641480637.45.1780065916828; Fri, 29 May 2026 07:45:16 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:44:08 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-22-seanjc@google.com> Subject: [PATCH v4 21/47] x86/xen: Obtain TSC frequency from CPUID if present From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-720697/1780065919-83563161-8B56DD70/0/0 X-purgate-type: clean X-purgate-size: 1314 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780065949255154100 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: David Woodhouse The Xen CPUID leaf 3, sub-leaf 0, ECX provides the guest TSC frequency in kHz directly. Use it when available instead of reverse-calculating the frequency from the pvclock tsc_to_system_mul and tsc_shift values, which loses precision. This mirrors the equivalent change for KVM guests using the generic 0x40000010 timing leaf. Signed-off-by: David Woodhouse [sean: drop non-Xen changes] Signed-off-by: Sean Christopherson --- arch/x86/xen/time.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c index 487ad838c441..36d66abf5379 100644 --- a/arch/x86/xen/time.c +++ b/arch/x86/xen/time.c @@ -42,6 +42,17 @@ static unsigned int __init xen_tsc_khz(void) { struct pvclock_vcpu_time_info *info =3D &HYPERVISOR_shared_info->vcpu_info[0].time; + u32 base =3D xen_cpuid_base(); + u32 eax, ebx, ecx, edx; + + /* + * If Xen provides the guest TSC frequency directly in CPUID + * (leaf 3, sub-leaf 0, ECX), use that instead of reverse- + * calculating from the pvclock mul/shift. + */ + cpuid_count(base + 3, 0, &eax, &ebx, &ecx, &edx); + if (ecx) + return ecx; =20 return pvclock_tsc_khz(info); } --=20 2.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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 0965C4028F4 for ; Fri, 29 May 2026 14:45:18 +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=1780065921; cv=none; b=aRY3s3T3vkQwtkgLCW8ZjCHVZ0kgd8CKqRaFRUVa46R9OF4ceNcOCioLCaTLE4OOdJ8YY1zmsG0EuKu6pPjfA5AXmku7V3F+za90GPvHj24lVOJfURqFqcrlUYQ8PnHcni3fxCdk2j+jrXQOamKzGcTNifA5r9YC2bFLv11zaOY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780065921; c=relaxed/simple; bh=iG71vVceguXTLIhuEypwN50IDc3m1rOU1h5u0e/+Vxc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=aKZaFE8WPgcMfItdNnuSyrrgR5iUAn1ARU4pMEILQcFQaU+ITFSLgJfD7Mgw4c3NJ2Dm5+xYhgm/NVpSstXML/F4LqHoj4lvgyY30j+YUKcuM3Kp+Nl9T+xusaK+g8mcoKH1Z5lq/H6SgunojBh6Cy20Ox0phsyY27gXHFL9aqc= 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=FoM4v5R3; 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="FoM4v5R3" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2bd5b20aaa6so149193125ad.2 for ; Fri, 29 May 2026 07:45:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780065918; x=1780670718; 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=CjqUsxyZ/EUi7tEkmfz6ySaHUFaiYUv5qsrOzmWsVSE=; b=FoM4v5R3JZXTyLVCKgBa93vP38pxMx3lHP6DzffW3Z1+nKpgGLBojWqknktvXjBYUu trcIUePnU+bN+DfZSEOlmgfxfTgYunq29jHj873027hkcVxnOnHxDqFOapkfg5Hl2ur/ DqK6bmeFM9jA7p2fyjLpYFqjTVyFE0p9rubze1s76XlCDV5hmswLlmY3W2Q3A6VCsRuw SCAcX7pm6Fp2hIFJOCPC9+LwGoRieD0ceJ5c8AAbcvAHfxj+x8TKJW7GponNV5uacI5O WA0/OLYE1eCg2y/+psi0zB8Slb5rKuUltnUt6BwIdvLueIzl2ATeRJ4ODaQvENneQQvO ec1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065918; x=1780670718; 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=CjqUsxyZ/EUi7tEkmfz6ySaHUFaiYUv5qsrOzmWsVSE=; b=LjV6sfvMjp1UM2Y70lWLNudZZHHXi2j6ORYB0HRie2/RvdSrqygwzsVWyuIvooizFJ u3K4hmUWdwluNtbBrN8yImVRbKjcx5DzGcZ2liJcGIuiQp7FjBR2iqarn07IKDaJnNBK NnuvFrbRhRhx26sX9dHpa/MOp4jY5TlOd4QDolYU5bT09l212Yy/SAovsUx6dGtRhUvT rC9scdyed+Yf4hV77IQ1OEFgjBDW9iLN32g5ErlPYjMwVhToQepB1R8GGujfcrZ0r6ku 3BDHbdbobj/PEGJGtFrfu18DLBgVzcWW2UeVx2jsKYXrwtygIX8Uh04NhFYDRqdDbElJ yOvQ== X-Forwarded-Encrypted: i=1; AFNElJ+Xv81xSu8j5qXBwp0Sx068dCHK+jTJH+6dopZ5GmyxZDBBZHHIp+eFRIIiKl7Y3rlmFDJNreiV8gp7CWI=@vger.kernel.org X-Gm-Message-State: AOJu0Yyz3RkdlhERC3bGzw8aJWGvh1eBjVwZjumbBWUlJmeHTkN0CK7e iNXMBFRE/P9Eo3nDiaVIRo/yNEIIX5aZ7cp33ZHXr2bjcskbk8G+3Mkn/5DY4WIyCI3L9KuSkJG omr1Z9g== X-Received: from plgy12.prod.google.com ([2002:a17:903:22cc:b0:2bf:21c9:7d27]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1c6:b0:2bf:3309:ecce with SMTP id d9443c01a7336-2bf3686593amr1360175ad.28.1780065918022; Fri, 29 May 2026 07:45:18 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:44:09 -0700 In-Reply-To: <20260529144435.704127-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: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-23-seanjc@google.com> Subject: [PATCH v4 22/47] clocksource: hyper-v: Register sched_clock save/restore iff it's necessary From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , 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 f8653fc05a40..2403231fd4b0 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); @@ -739,7 +682,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 e9f5034a1bc8..72b966340a46 100644 --- a/drivers/clocksource/hyperv_timer.c +++ b/drivers/clocksource/hyperv_timer.c @@ -537,10 +537,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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 4D82C356760 for ; Fri, 29 May 2026 14:45:20 +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=1780065922; cv=none; b=YnBKAO5Gjo/gNw8Z8iokSJ8IoHEBOgw/dA8kvsge0tMJ0VkFAQWBAWauYglwTG1lUpMaJAM7dJ7mYmvhK8fpmWSthOOgvBEfDJ5LErDyhruFshEBfKJ+8pvaWCqayg1h6UWYPjfpBnrELbmwPG2JHKhtg5BN3Nuz598AGfKL18A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780065922; c=relaxed/simple; bh=izB9cLMxHRX9u+xy2OSKLpoF4+D8fUVi7wdBGuKKNuM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=rTkfu5VjTCLQVOKEwvbhcP7Ci/aiTPiHhVOBFRICPT06obOtl94EUOTpEJuq0rWSB+TTCnc6ZTBghz/WoHiRdSTlao5kiIUxg4Q7Cbr83VERLJOmHizqQFFccrDfJwkMWiive2aMGvgMWSLxsYTYAXNop2xYvWgG/kbmGQ+Zw+E= 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=jMPHwYK4; 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="jMPHwYK4" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-c827adbf00cso6485331a12.2 for ; Fri, 29 May 2026 07:45:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780065920; x=1780670720; 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=xvpEF1xGV6Ftnv9ed9XR60tkQggfkzBgS3+mRoziVCo=; b=jMPHwYK4FlTH1rfxeLurCWYVY4oJhO0KCiJd74LaelbAzkC5zSf8R9IL6xPwpxdz/C ok+tEHE3dBg0LGP25UgYpeX1tYgyVIKpeTa1MpcbIiV9eUJTpKtyeyqngJHspqLHWdfK mVIb9tkBediSeLcTnl6aT2vUfUvircXDbWttkg/d+OKunOJpVx+xJ2ndO9ZHcgdKLcc7 wnCH4H3R98NtYIo7PE/HJAy00dkFhCOpyemAtAzmVVXkqFJ3en+4qcy8Px5k3AUB8Ca/ 3W1v30siih2xNS4QasSekNSVZoLfAOr5dDEcIxPAlsgs/0jP2t0vROPjXg/QoWBdcwam KA1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065920; x=1780670720; 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=xvpEF1xGV6Ftnv9ed9XR60tkQggfkzBgS3+mRoziVCo=; b=dDDDfO17QmBZt7b3oPeXZF4oboFA4p31cmsD+GoV785CyxnH4T5K5LPeGUK/G2q4lY 2Vs2oIjAU1t+4TsuqyN4hc5ueWv14bG1gHHlw/SEZu5o9Nk4+fQrCVsB6MlOrPYU5qgH g8LBIgobOHUmHEgAqcw7LgaJUO9PjCvTD0cCOCQfcoQXtQ9M6t8wXwh+gOBUlyE4QOsq xbWli46L236hcBtpPGGX9ZQmuQxVoXr472n6TRZoGUIOpuBOT438mcb9YfQj8PgAOrWq LC7Cs2QHyDx1sush01cXogieS6BjykOse8yPHPiFj+rJEK5BTt+JbNWpX3zsRJjUByM8 BhEw== X-Forwarded-Encrypted: i=1; AFNElJ/Fe/MzgxYl3l+d8pWKy+vvKLJG3KelKoq5WdCFysctZuYM+l6eST8K63gbMIWJJBVwH9EDj/2WfAtyxVo=@vger.kernel.org X-Gm-Message-State: AOJu0YyoHh365p6WwYiivkXXFks/VVB2y4a5NsT44bf6ghHrQ41dMpfe Hq4VbHGm5Q9R+FwHLuEgX68lOqB/b3E7xTDW80jj5/PuSVpkweD1wg0XCEChKzJhmgKqvwOPWa6 NXxnP0Q== X-Received: from pgc4.prod.google.com ([2002:a05:6a02:2f84:b0:c82:7761:9936]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:6b87:b0:3b3:d4a:793b with SMTP id adf61e73a8af0-3b411e5b284mr4253221637.43.1780065919253; Fri, 29 May 2026 07:45:19 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:44:10 -0700 In-Reply-To: <20260529144435.704127-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: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-24-seanjc@google.com> Subject: [PATCH v4 23/47] clocksource: hyper-v: Drop wrappers to sched_clock save/restore helpers From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , 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 72b966340a46..69c1c7264e5d 100644 --- a/drivers/clocksource/hyperv_timer.c +++ b/drivers/clocksource/hyperv_timer.c @@ -472,17 +472,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) { @@ -548,12 +537,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 @@ -561,23 +552,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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 C47FF3EB7F1 for ; Fri, 29 May 2026 14:45:21 +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=1780065923; cv=none; b=ijNdwDTZ4e8P6dsVhclj7BQVpAAtBmn0P7iNFGXopqADH+4yFyNy2hEnrIQv2uXKe+5rXSgl0o8UKgpd3voB8rwJNWHN4bVUN9pwWuanovrFkU35iN7DdtIUnbN1xn7vvRAt4kKUiLd9vGbeAX3hEVPfK3ivuAnmD2EnK0RoAIs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780065923; c=relaxed/simple; bh=lDwpL4pN2Hd7khkwmK25Y7B4/KyUm/MaSweyAhy8p7c=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=qkcqXsCpHFBq8nTpv4Osc2QDF56Mxt0LW8w6A3jPLf0ZYMlil0qjVQEXoXFwJWPL0OdyPJCgxRxRQwFgEebNfZ01FmC+zBCnQlk8m2W2xLwuoJYHvRpBoxQRkxZFMCywYtiBPZLtfLkAqddXQyqY8PfjTRHl605yipJFsvS+7zA= 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=tXRLBJuU; 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="tXRLBJuU" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2babbeff9e4so156460005ad.0 for ; Fri, 29 May 2026 07:45:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780065921; x=1780670721; 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=xo1ZeU9J2iCPf0q+fMxBulUq0vgLWRTwNewVlxT3hiI=; b=tXRLBJuUyzL+ruKOY2gYHtzMHh3KaAIfcLI2fiRhR6Yw1jnJEyMmKLwSHDGnlS6O82 6GIeSVn0bXOmTvpae6Wt47+96rrgwSulMi/oz4tuIEya58XYAIzbHQJl8apIZf+wjRm+ h/p6fcacDu1jsjjals+7drdYQjHlGjn82/JguWPVkOFb9E9UL9yF0Jk5YAsy1L1m3niM N6gqpcEL6Prj+dPppaBsfzRcb5AGYdTEjlOvxMJspO9SyMqxKR8p/sYEKXH8PvKUy889 paFb4KFfUe/uQCzBLCjCSkW1vEYukhWUH4/dPh9deUxxlW5YMZFkGeyJqoN57VfqLwQs CS1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065921; x=1780670721; 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=xo1ZeU9J2iCPf0q+fMxBulUq0vgLWRTwNewVlxT3hiI=; b=nKsQSlQ2z4VCgcJ5nYBRakRE4VZpzAtKK0GZW2dEuE/SRXbWLLGb/8yJUHcL1ImKjf qJOW7MD7Nd7mdxo6nyEkCXvZT8gIkriY0Q1pIKQlIMHQN0ssu47QEimtUt0V/2wFK8/U mMVSqXF9t4kAZELjivFO1uQeYNZgM1QNbubtPQnmg5OKJgVZn1lZsv/J/yOj+1Gc/FRq Jq71PFIFZLul1ylyQQtC+2ag/vcGQ9DvZQewIcsLXH5ziuPF9DTFp8qLxNP9bedQ9KPR nez62w69HdUwgBz4q2ZbLatWxkx79ucevTjBIYr+1KEGisjsU/MqCzXlDaC9dUpQ7MhC r9bg== X-Forwarded-Encrypted: i=1; AFNElJ8MA87G3QxocsGpQNsMt9p/j/We1RmGb+MGx9MGgnGVy0PZmXTHZQLalkaPcZ8/VjAr0RrYG2tTHea8Vas=@vger.kernel.org X-Gm-Message-State: AOJu0YyYZmzQI9DGifjzmpuhmzZ1/v9wXqOQGQd7yNVhmIrjJKgpfJDQ aIN+mht44iSvKP+SWg8OVK+WaJQvq4X/llXNfeuIRUdu1cYvc9H7Iso+KGTd2FgqqeECiuHU7yg l8Y4zSw== X-Received: from plblc15.prod.google.com ([2002:a17:902:fa8f:b0:2bf:238f:8196]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:2448:b0:2b2:4fc1:f653 with SMTP id d9443c01a7336-2bf20d4466cmr29629345ad.3.1780065920784; Fri, 29 May 2026 07:45:20 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:44:11 -0700 In-Reply-To: <20260529144435.704127-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: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-25-seanjc@google.com> Subject: [PATCH v4 24/47] clocksource: hyper-v: Don't save/restore TSC offset when using HV sched_clock From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that Hyper-V overrides the sched_clock save/restore hooks if and only sched_clock itself is set to the Hyper-V reference counter, drop the invocation of the "old" save/restore callbacks. When the registration of the PV sched_clock was done separately from overriding the save/restore hooks, it was possible for Hyper-V to clobber the TSC save/restore callbacks without actually switching to the Hyper-V refcounter. Enabling a PV sched_clock is a one-way street, i.e. the kernel will never revert to using TSC for sched_clock, and so there is no need to invoke the TSC save/restore hooks (and if there was, it belongs in common PV code). Reviewed-by: Michael Kelley Tested-by: Michael Kelley Reviewed-by: David Woodhouse Acked-by: Wei Liu Signed-off-by: Sean Christopherson --- drivers/clocksource/hyperv_timer.c | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/drivers/clocksource/hyperv_timer.c b/drivers/clocksource/hyper= v_timer.c index 69c1c7264e5d..ac1d9f9c381c 100644 --- a/drivers/clocksource/hyperv_timer.c +++ b/drivers/clocksource/hyperv_timer.c @@ -527,9 +527,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 @@ -539,8 +536,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 @@ -553,8 +548,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) @@ -562,10 +555,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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 43F2D3EF64A for ; Fri, 29 May 2026 14:45:23 +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=1780065925; cv=none; b=K8iQ+3EM1HmKg/ch2DS0T64O11lv+ROse3wK8hVCgr+jbMLSDUs53aqNP62uBmR4sGrz1m56UwFOXnMuv25OKy7b0mV5/dpH3vh74e4svwLbICTbH9wwL+trmCRKr1cTrJDxMeYdtVtNDllcH0xIsIo/Taft87e4XO515cWzGWs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780065925; c=relaxed/simple; bh=fK2LI2CUeD0BDEX+PJXGpTUqY8RX3Vr+B1cVn7pLK3g=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=KDverKdCK3ipTRtpjFG7fbYxFxgZM3lD3E8m9aa0THu6Yc7tYAwuqN9NKBFEoqmzSrCFTn78lmM3yEyoThXm/nRoSqM9zsOh0LaZBP2C8OhtslCE41Oy1NsePr536SFNw/QUZxGq7w5xmvG0NG1NzkoYYYiXoOUfPZmLRf4Zdi4= 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=M6z/FzQZ; 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="M6z/FzQZ" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2bc763c7256so290879265ad.3 for ; Fri, 29 May 2026 07:45:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780065923; x=1780670723; 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=n/IQNTw72HzXqO6AWPqeABL90E8LQ8oyD69HI8J1qOQ=; b=M6z/FzQZ+rSilfKmg6GXtJpXAU4boYXVmLlQZsPU065dRLo6NTky91tTmeI4K1tSaw JqBBj7UST5re1iZ+4j59XibO46XuAkZe2fcBIQL9tkHZ8+jx6URSzC+7QJ316CkCTbq+ S4cK1gyBMshNQU4GTn+VF9EroGt5eteLzflIcF48lM1tpWxRgeInp/kuV0i4eJ2uJsT3 kpPKXYFnB2NbgQtKjpe/0Nvf5g2UA1PJanamHazZiUlj8JZJKM/zCJB0aKMffwrE7Ak5 4WMEYQVbqN/vyMjJ9NT+9oXvhh3mRAA8N0KSFHMOCeSvskT5HODwJShUjNTMygGmiD6k EvrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065923; x=1780670723; 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=n/IQNTw72HzXqO6AWPqeABL90E8LQ8oyD69HI8J1qOQ=; b=dbOmFyGegJAJgaJHLFR5YQgF821R489KqMqvP5733VIztpO+7hXWPHCaiyN9Sre4Pi NB68MSLIDXhRpq6XNOXYDSNCVphqddDeKaYKO/vb8IX3LA7OW2ZeJMWmYLf+4tFcRkV5 dJe638XsOcvs+jLmtO40EBOkoumjZNTZ0q22DPOqjTF/hoLC8axvnbSA8Ew95hPyT3ll 3zDuDmlYI5qdumNzbBEmkLCs1BAggG80eSn4FjLMkpiESlK8q6uFmYRijKvTjAAeTSF2 5M7pyhwmvBYcNktkuFs46/G263bDdEoSovSymhAKDmtouttnElYIK1hY+gfA+iHxeCtR yNsA== X-Forwarded-Encrypted: i=1; AFNElJ8oikUsrgkTYlw30Uyfq971+iIUWsUq459iZCeSmpEqRPmUXvmL/cgaA0p2sFyp9tNvFZ4O4SHhFp2Jz8E=@vger.kernel.org X-Gm-Message-State: AOJu0Yxnb/KGUbGlbJTy4vTrtE1rgBtrRylkwoJDkBjkx8BiUoy+J92N 1jyJ+1u5m1UeYbF+uqWSfyaT5JYXYxbQpHmydCHs8IzQMH9esArtqa3I/zvtcxIxq8NLdXFG4Fc 4cPjf5A== X-Received: from plbbj2.prod.google.com ([2002:a17:902:8502:b0:2bf:1b54:1fc4]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:906:b0:2bf:13b6:dafd with SMTP id d9443c01a7336-2bf367ddeecmr1314895ad.18.1780065921988; Fri, 29 May 2026 07:45:21 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:44:12 -0700 In-Reply-To: <20260529144435.704127-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: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-26-seanjc@google.com> Subject: [PATCH v4 25/47] x86/kvmclock: Setup kvmclock for secondary CPUs iff CONFIG_SMP=y From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Gate kvmclock's secondary CPU code on CONFIG_SMP, not CONFIG_X86_LOCAL_APIC. Originally, kvmclock piggybacked PV APIC ops to setup secondary CPUs. When that wart was fixed by commit df156f90a0f9 ("x86: Introduce x86_cpuinit.early_percpu_clock_init hook"), the dependency on a local APIC got carried forward unnecessarily. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/kernel/kvmclock.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index 69a15fbfb779..13c728444e12 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -186,7 +186,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"); @@ -326,7 +326,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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 77220404889 for ; Fri, 29 May 2026 14:45:24 +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=1780065926; cv=none; b=U1Fv/NdSH3rGo025SXPwTkWNFEFQNCooH4cGXr1n0B+0EiEm5IKUWedhLHo2jt91jeaUpz8LUPUPpLJd+Id+iWMxPPbtR91dFg1BbreDSTIWhms28Te3ugh6aCUNITXsDT3hG294ttiC5cqQGnLv/pKoYjcjyKeOwwrzsQA5C6A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780065926; c=relaxed/simple; bh=6g3KQ8h/qQVPLFbBkT2p7EQ6b7c5w2K5sI16h649Xjg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=grsFS/EJ26v1uNmwSCWr7A+dWlQGYmuZgwDSEQMZac9QKGgtAdDEvGYanWa6YhlIdoyCndiEt/v1+O9RjXwA6wU1E/7OBUK3Graf7nxEQL4Du3oB0+If7pKwpaiLnVJRHFE9alSgaauuWIkrloxJvdXwSe77lU8Lb37/Q3rMvL4= 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=DayhEt9Z; 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="DayhEt9Z" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2bf3636d6c0so496755ad.2 for ; Fri, 29 May 2026 07:45:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780065924; x=1780670724; 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=hOb9yslO01uXOZXUolja+Wepq3bohepu/IzG0IJr7BI=; b=DayhEt9ZcPsppyAoX1O76yYfc62qab7NJn2Rh7iJ7HjOKd6rYtzNBZtG0hweSdGlof vUY+XnL3Zr5R7r5iC9TTldRunXANl2TOH1/7qDicb1O38d7R6yLoj+/8jApqfWly8otc 6MXmJf6Vek6nc3DV4ct7MK7UdLljO9Ifuz/bNjJeMCLtjhGkfGpsHzqWGIpqTHV+MuLm GFxay41tEnEm8br+F3juL/VQWZcty76xn1nmnu00u9eovuCwjPt6oLPALg6O3OLJurEf N/xY5nibzwi/wa33oBjfvUa1w4toek5S4t0GFZcdWcT9zzcfTnMoaF2Ykk7NjSvd1FFf 8qhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065924; x=1780670724; 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=hOb9yslO01uXOZXUolja+Wepq3bohepu/IzG0IJr7BI=; b=XUdaKillq6RrQPTIeWxK7mNh6wf9l93MHEkYDT6KTX/1Ze7KF9GihKnzv1h8L4xwBc B0G4c71gNwdETzpULSSy90cOxvqOgdKVbJVhj4F5Fhe0Kr5ahIAx1F6hMtMl/3zfM7Vu k6KK3oK45Rk6CSUyMOWLngPBj9ma/Jbmf1DJzZ5cpW+Ith6hFrutfZrCJXQEoccbmZfL UNBhdbpMYWFITVcO68aTEuZCKQIBhHho+HwgUs4wZlSB5OgYQDPDqCWJuTKHVNN1VHvA qVkSAIMHpBDNcY/h6/qdWnzFizS9kBFBEAbnNyw96+VvKZQknv3tYUzuCwDhi7qkHyAx lHbg== X-Forwarded-Encrypted: i=1; AFNElJ8Q8eXIG4CVe9lT2r9e0jDoZ/+YPooBWID+5P5vAKkt0cT3uhA8jJhvW6IyPnXW8Nh+ZtEofYaJ5hN7peA=@vger.kernel.org X-Gm-Message-State: AOJu0YytDh/EU1ZliN+Sd+PYY/4/lWbLehIUmdztaktsvcTgWR+gFRMA WVs0pyg9zSPi2kpRFwoPtfvzayHPeBYjyvXp2c286X4phSBslcM+MgAOuhccvhci4jI6WqE49nZ WMscsoQ== X-Received: from plbkv13.prod.google.com ([2002:a17:903:28cd:b0:2b7:d398:c384]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:ea0c:b0:2bd:6327:b4f5 with SMTP id d9443c01a7336-2bf368be464mr776115ad.40.1780065923557; Fri, 29 May 2026 07:45:23 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 07:44:13 -0700 In-Reply-To: <20260529144435.704127-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: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529144435.704127-27-seanjc@google.com> Subject: [PATCH v4 26/47] x86/kvm: Don't disable kvmclock on BSP in syscore_suspend() From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H. Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Don't disable kvmclock on the BSP during syscore_suspend(), as the BSP's clock is NOT restored during syscore_resume(), but is instead restored earlier via the sched_clock restore callback. If suspend is aborted, e.g. due to a late wakeup, the BSP will run without its clock enabled, which "works" only because KVM-the-hypervisor is kind enough to not clobber the shared memory when the clock is disabled. But over time, the BSP's view of time will drift from APs. Plumb in an "action" to KVM-as-a-guest and kvmclock code in preparation for additional cleanups to kvmclock's suspend/resume logic. Fixes: c02027b5742b ("x86/kvm: Disable kvmclock on all CPUs on shutdown") Cc: stable@vger.kernel.org Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_para.h | 8 +++++++- arch/x86/kernel/kvm.c | 15 ++++++++------- arch/x86/kernel/kvmclock.c | 31 +++++++++++++++++++++++++------ 3 files changed, 40 insertions(+), 14 deletions(-) diff --git a/arch/x86/include/asm/kvm_para.h b/arch/x86/include/asm/kvm_par= a.h index 4a49fc286b4c..08686ff19caa 100644 --- a/arch/x86/include/asm/kvm_para.h +++ b/arch/x86/include/asm/kvm_para.h @@ -118,8 +118,14 @@ static inline long kvm_sev_hypercall3(unsigned int nr,= unsigned long p1, } =20 #ifdef CONFIG_KVM_GUEST +enum kvm_guest_cpu_action { + KVM_GUEST_BSP_SUSPEND, + KVM_GUEST_AP_OFFLINE, + KVM_GUEST_SHUTDOWN, +}; + void kvmclock_init(bool prefer_tsc); -void kvmclock_disable(void); +void kvmclock_cpu_action(enum kvm_guest_cpu_action action); bool kvm_para_available(void); unsigned int kvm_arch_para_features(void); unsigned int kvm_arch_para_hints(void); diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index c81a24d0efdf..fd1c417b4f9b 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 13c728444e12..13c4be3a7f0a 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -177,8 +177,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) @@ -186,6 +200,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) { @@ -193,12 +218,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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 090873D34A0 for ; Fri, 29 May 2026 15:07:00 +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=1780067222; cv=none; b=PjJq2Oc4FK1EzGXTgtmIqrDh5Ndewld35a/SkklnAXZrqObS2BeW9FxyUBc7fVk//o9ZvKiBvRXMyWnL0dkZ0Q2GUqR2SBOfpYN+mzWPfNVk9Srz1BlWQSXlEbfm3tnzguQGq8VWWrCT3TXafFDvv56k4d7hokbK2wBBZQoSBE8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780067222; c=relaxed/simple; bh=HD6T6IXKxXHYYTEzA8sYaRKBtXpTOgGbEYUT2q1t41U=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=UahTwvHEidf/OCvZ0g73dM8veC9FnleVOA33+O9WWg63LJyFIlAT/HNT+fhXnfDr4qEBb6szR0DVBmVQx3ZrKO4dazAQstTxj7wdl6tFbb1qWqGBl6hVD0FvBPrzuEScclnXuL+1Jc6Nkzo/cVMDxCLiinsgeJDihO477Dzc7p4= 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=GePsKUPF; 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="GePsKUPF" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-82fa5ecd760so7036088b3a.0 for ; Fri, 29 May 2026 08:07:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780067220; x=1780672020; 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=xaVkfsA2sOgFELwC+9kgheEWN7jnZ1tVtkSLe6gYY/I=; b=GePsKUPFHhVzYsmPLPHATURDMfbSytocbEzlem9fv5RLH548OfqM9+SjfiMTo5FXWF Bwgm9QtikZ5YMYZxeXSmF3i1xSjr+tsN7Zoh/viE/SEpmj1NkMLDkmkFm136Fu8nsJqQ NhqyqteCfdPXKDgj+bMWRwfJ82nr22GI2pX+A9d0WcREoh+nRqnUI9DifDPAvimxxKlF 6MKOX1u+IyUTUMskE0bOks35rXOQN94fvj12DJgOGySQ56nRM11sxvCqj/wiwLoyhS/W oEDwp2AQO2DQTKuHL0NgaEBQrm/eg/XxtLL3K2Pj4KZpcS9xWjnuI5BkOVlJePu/eO+u Vi4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780067220; x=1780672020; 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=xaVkfsA2sOgFELwC+9kgheEWN7jnZ1tVtkSLe6gYY/I=; b=Wz1VbHwQ4QHfsRA4q+yP2dROaP1AN6xkDX8Slu8mvl6DZwlTg+G8UD1YaIjJtCNBbq DbSXzeElCYSHnTm5uj3WHXxNCyAC+G1GrEhAv7qFO7Cr8MKAP1aw00jc3r3tLeHPMmmc zBVbZSCwpQW9WxD+vNCvXzKy9idxYzLue127FnKWBidXrYobJ4JJr1DOtjVc4HSspFHj SVIv/8YLfFOauJqH09qqoQNP1j8MegmIQwJ7trHz5hx0RlmmyrMX6RV0ceWKD3Z++Eis k5FDC6V7qFfP+M7amDeEW8xHyS6Rlgpo4MZezD0wCmAK7JVgnb0YOhYxHIB2aZpndhEa yb8Q== X-Forwarded-Encrypted: i=1; AFNElJ/woaTnqxuVqOf8s7+L3P+7wabx14UMMS1WTGyN5XPYN5MQrTqkfTCpTD+Z130M9L9KaHUBnY0z6AFaF/M=@vger.kernel.org X-Gm-Message-State: AOJu0YyDl2yN2C/sqq5Rx19mtQGLg+hlwIlDpYw1dHqkFeJItRxeQBHo 1MUb1Jd2qDxOHcfCy/UeK/CeL2Wj2ritpXEBX35eNWgca1sh77DtCBGgSRSo1cK2MQyKO7RBaf3 9tfgsDQ== X-Received: from pfkk14.prod.google.com ([2002:aa7:90ce:0:b0:82f:6245:a6ec]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:8088:b0:838:c01a:7a50 with SMTP id d2e1a72fcca58-84212ce8ccamr3369227b3a.30.1780067219938; Fri, 29 May 2026 08:06:59 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 08:06:31 -0700 In-Reply-To: <20260529144435.704127-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: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529150631.713818-1-seanjc@google.com> Subject: [PATCH v4 27/47] x86/paravirt: Remove unnecessary PARAVIRT=n stub for paravirt_set_sched_clock() From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H . Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Remove the unnecessary paravirt_set_sched_clock() stub for PARAVIRT=3Dn, as all callers are gated by PARAVIRT=3Dy. Eliminating the stub will avoid a pile of pointless churn as the "real" implementation evolves. No functional change intended. Fixes: 39965afb1151 ("x86/paravirt: Move paravirt_sched_clock() related cod= e into tsc.c") Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/include/asm/timer.h | 3 +++ arch/x86/kernel/tsc.c | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/timer.h b/arch/x86/include/asm/timer.h index fda18bcb19b4..c71b466d6ace 100644 --- a/arch/x86/include/asm/timer.h +++ b/arch/x86/include/asm/timer.h @@ -12,7 +12,10 @@ extern void recalibrate_cpu_khz(void); extern int no_timer_check; =20 extern bool using_native_sched_clock(void); + +#ifdef CONFIG_PARAVIRT void paravirt_set_sched_clock(u64 (*func)(void)); +#endif =20 /* * We use the full linear equation: f(x) =3D a + b*x, in order to allow diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index bdff8c988866..888bd1cbd9bc 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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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 462543B8BA1 for ; Fri, 29 May 2026 15:07:21 +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=1780067242; cv=none; b=HGyOWXk5sdV0Cfx6iSPOshs6OJffMSopcjAnC8/OyRkpjrhmsAsRCam5qZp133gRdkFyHu1tPfSKieKjRhjLiQHmhOLAsgoadBKHz8fZ4AarMfvhvqCneaIr18vMD0NnxmHKu0v/dEH/9ci07PnytGmhsb4WjtzcVD3ARSdYYhQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780067242; c=relaxed/simple; bh=/5UTvuwmDWBQP+NjGkI8KUcbqqoDwqf+ns+dipFMGrk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=QYPbqRyqunRbstkxXnFG7SrVbG8ACUivF/zQKrDoHLve9eK251BsqFollXwskPeZfTOW9J04nJW0di9uzZMUc0X05oXFp+4WdIQ8gq+ycaqId4CUMXwI+mj3DpjmVMZcBFCN0kJMZBiBoHMxAaETYcDsrAkLrS7Mp8duKNDV8kM= 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=Aw6JhzxS; 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="Aw6JhzxS" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2bf1845bddfso12989595ad.1 for ; Fri, 29 May 2026 08:07:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780067241; x=1780672041; 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=N49NWH4ro3GNRH29aAKxdd1VwjKE+o/ejmYXSEWUPuw=; b=Aw6JhzxSwS0pgkwYC1UCdyE0xrpx2do/mqstwdd5znQHIswDSISiQ02v6eFzr9xYuT m/eCqqiz6IvEa0zRz8RgDsHX3oU4YSHH589rgw/M2Q7j94KKO8czYhMHL9SmkEnnW+rC rZLXQ0jSeBy1Z9faHq+Rzg8DS6uoUk/Vkq3WtAIFMNWrIFg68MKnM9zT367WSnQec0Ph T7MCddf0bN15I4WdyvEm5LLSeKB7Xzi+uvdSBJ+Psz2sfAw0L0QgNVFd6JUVMAGFOTcX 9/o8jXpKd7QpaSdl4xeqDx/anvz9ZX1+9quxnzkSLUZWA8CTq9OLDuQwJzmLJiTx26Ag urOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780067241; x=1780672041; 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=N49NWH4ro3GNRH29aAKxdd1VwjKE+o/ejmYXSEWUPuw=; b=M0ez+wmFf8bFlL37abzgQwKubNNdqOcgCVRMm3QW9YIS0kgwOyvafw4MQcZB+gCAB1 ztLlKBrguHxhsk/xa9jv8aujpKFYDdZBCl8CTbN6Xs8riklY9yvSRvW5uO33GO7/5TjP GznNf/x7nDtPkP9td5g9+2R/CpgG7I5zjfWEbW+vgF7D+bRNj+uQSeaWmM+hWmezGNcq JU2T0DvvUlIpS3jpEMdFjGzJkrFQCRQv9X7XpzE+XW0ivSKH7uhIcZiE3KnCLPgika6Z mk9chJvH8NjSiceYXfz/MCVZLzPcQDYTP4vkF+p2jcPdYlIU6vxF+Y0hey58GaLpA9Q8 TfUQ== X-Forwarded-Encrypted: i=1; AFNElJ/CfyKkOkSK2Jrgp8aKhP5u3HuMZZN9yy6jBiMqpDNDO6/yJivOJWtujXvl9TSHRprpls+Ta+RWbZQD7Rw=@vger.kernel.org X-Gm-Message-State: AOJu0YwHoTMQtQQ42K8JKGTUIsXh4Q3xmrZZ36k10WC/zJTpA14zWD9J v8wWshl4j76Kmjtg0k1Rzh32KaKlwUXLBc2mTRV/GaEMjXxdTtgbtD1nvl1iFpap3aWo3ET0/OK XhzN6gQ== X-Received: from plge8.prod.google.com ([2002:a17:902:cf48:b0:2be:fc90:7642]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e74d:b0:2bf:28e3:a5e7 with SMTP id d9443c01a7336-2bf36793522mr2531755ad.6.1780067240251; Fri, 29 May 2026 08:07:20 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 08:07:00 -0700 In-Reply-To: <20260529144435.704127-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: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529150700.713953-1-seanjc@google.com> Subject: [PATCH v4 28/47] x86/paravirt: Move handling of unstable PV clocks into paravirt_set_sched_clock() From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H . Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move the handling of unstable PV clocks, of which kvmclock is the only example, into paravirt_set_sched_clock(). This will allow modifying paravirt_set_sched_clock() to keep using the TSC for sched_clock in certain scenarios without unintentionally marking the TSC-based clock as unstable. No functional change intended. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/include/asm/timer.h | 7 ++++++- arch/x86/kernel/kvmclock.c | 5 +---- arch/x86/kernel/tsc.c | 5 ++++- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/arch/x86/include/asm/timer.h b/arch/x86/include/asm/timer.h index c71b466d6ace..fe41d40a9ae6 100644 --- a/arch/x86/include/asm/timer.h +++ b/arch/x86/include/asm/timer.h @@ -14,7 +14,12 @@ extern int no_timer_check; extern bool using_native_sched_clock(void); =20 #ifdef CONFIG_PARAVIRT -void paravirt_set_sched_clock(u64 (*func)(void)); +void __paravirt_set_sched_clock(u64 (*func)(void), bool stable); + +static inline void paravirt_set_sched_clock(u64 (*func)(void)) +{ + __paravirt_set_sched_clock(func, true); +} #endif =20 /* diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index 13c4be3a7f0a..4e50e75ff43d 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -12,7 +12,6 @@ #include #include #include -#include #include #include #include @@ -94,10 +93,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 888bd1cbd9bc..a9b6d3399c23 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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780067281; cv=none; d=zohomail.com; s=zohoarc; b=I2l+LVaeCr6e/vPRaKlESrHeoym2srfq/COlaeF/NCGzNgbrMNuQEp88Yf/RCYug7SJquEK6loJYv7FE8Y6r/qgpDUicjvNn5x8+kc9jcI/460zuGs0U93FuTQlyshQdyD1NM0jhYW2stoMOZRdoMwMlPh+RgyQmQDD9KlEwV9U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780067281; 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=QESOUvdfZXleHQZ88nzDXbmZWnZIugt5BTjJEx5ZF5Q=; b=Sbn0Z41bqAaTLNnEduBZdkWf+e3U/JHImFLBHR9pYm/S4l2jO7KNMAPRFgz6v0uk21XqCOkYGmmm5tdCgO831AFDsBuiKmzmrp7+t5+XDurs5LigJ8MY3bkWRHPvB0/GvRPf6Nj+QdX07wbc3BWCb+XThnh26XBE34hkdhKAKOg= 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 1780067281520490.65876428447325; Fri, 29 May 2026 08:08:01 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322435.1588690 (Exim 4.92) (envelope-from ) id 1wSyoL-0005Gr-A5; Fri, 29 May 2026 15:07:45 +0000 Received: by outflank-mailman (output) from mailman id 1322435.1588690; Fri, 29 May 2026 15:07:45 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wSyoL-0005Gk-6v; Fri, 29 May 2026 15:07:45 +0000 Received: by outflank-mailman (input) for mailman id 1322435; Fri, 29 May 2026 15:07:43 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <3vKsZagYKCdEF1xA6z3BB381.zB9K1A-01I1885FGF.K1ACEB61zG.BE3@flex--seanjc.bounces.google.com>) id 1wSyoJ-0005GY-Py for xen-devel@lists.xenproject.org; Fri, 29 May 2026 15:07:43 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSyoJ-009KAu-6V for xen-devel@lists.xenproject.org; Fri, 29 May 2026 17:07:43 +0200 Received: from [10.42.69.5] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <3vKsZagYKCdEF1xA6z3BB381.zB9K1A-01I1885FGF.K1ACEB61zG.BE3@flex--seanjc.bounces.google.com>) id 6a19abbc-5cb7-0a2a0a5109dd-0a2a4505e3a0-2 for ; Fri, 29 May 2026 17:07:43 +0200 Received: from [209.85.214.201] (helo=mail-pl1-f201.google.com) by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <3vKsZagYKCdEF1xA6z3BB381.zB9K1A-01I1885FGF.K1ACEB61zG.BE3@flex--seanjc.bounces.google.com>) id 6a19abbd-aaa8-0a2a45050019-d155d6c9b8e3-3 for ; Fri, 29 May 2026 17:07:42 +0200 Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2bf3636d6c0so733185ad.2 for ; Fri, 29 May 2026 08:07:42 -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=1780067261; x=1780672061; 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=QESOUvdfZXleHQZ88nzDXbmZWnZIugt5BTjJEx5ZF5Q=; b=fJ4iGkuHsgwOx+Oex0Nz0zwyQti6WOPYX1juuqQQdpWbLutmBVVWsOGSIKr7DpehGQ brFg+CPfIUwEQ5q+JuStPPB20AGOABQkZT1ag963B3yoA0aGctBeooAqh/bGWnWH5Duj f8MVcGOyBxQcfF0i46xutK9UDKatnJHfDjkDr3RyuslYph1DHi+fHsNtQzBobkP/eUh5 i6bz4gaLFN3cfOpgymYjnEmzEbaQpE5MlmNrUnWDpS6a5KuXrW7ZgWlgFMtfOi20E483 H7mHU/7/ucyokqr2smO3mc0zYfws9vt+wUpWqGg7A/XGJ9l1qt7YcI0shL7vS/4JWSl8 KS7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780067261; x=1780672061; 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=QESOUvdfZXleHQZ88nzDXbmZWnZIugt5BTjJEx5ZF5Q=; b=GScFbq/G8sZpEKwHjM0QLDZ2/+zPh2obQ6MonUAyd7JtC7tGO5nUvri9B2DPJnn97E U8JthOMsFQhLjY7Sai7g21Ie/hvb9+UwBNrJLbTUbFpurA0KcUnckH2m60NdAi+3QKY2 t9WcpCAI0Xntw46hZ2HKve/J5rKTyOLOOSGMotkofiGNlMC+wzcorzzQF5qMeVCCynD8 i1jlabyMXJNHwApRodmSzH9zPSgmt9Fv6RlBoMNledSU5EREG5vnl8qY7C4wZEm6uXxf /oCzEd4x45ebxp0qsiQym0ol5YZHrVM+Ff9yzo6pkO7+t7JdCKhSpCcd3/Szktquy7GH d5cg== X-Forwarded-Encrypted: i=1; AFNElJ8z48p/5/s70VQGnT/1VADsZpE8s9JCkHvKVJf1H5yhX7vFTIuDgq4IZm+z+ruOQ/KEQ+ZdHyaCSV0=@lists.xenproject.org X-Gm-Message-State: AOJu0YyAxNizkYD/3yolGpHXwTq2t5fy4bkEKl8NcV+Q81+Dq4FHZoJz zGCGTVwpdERHMqAwHAA8UeARX0NZrQAJLIscQyAZDb9SdxJ6wMeRLC604l+anWJw8PbOTye+9cb VsV5zJg== X-Received: from pgau6.prod.google.com ([2002:a05:6a02:2d86:b0:c85:828a:ba9a]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:692:b0:3aa:55eb:a5fb with SMTP id adf61e73a8af0-3b411dd1faamr4128146637.23.1780067260421; Fri, 29 May 2026 08:07:40 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 08:07:20 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529150720.714067-1-seanjc@google.com> Subject: [PATCH v4 29/47] x86/kvmclock: Move sched_clock save/restore helpers up in kvmclock.c From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H . Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-c201ff/1780067263-E119B443-1A031807/0/0 X-purgate-type: clean X-purgate-size: 4418 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780067282366154100 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 4e50e75ff43d..0d4f2cf97246 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; @@ -91,6 +110,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(); @@ -103,6 +146,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 - @@ -161,60 +215,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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 6E2C53F39C1 for ; Fri, 29 May 2026 15:07:53 +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=1780067274; cv=none; b=og1g5XfIchFK3wmGaYOeIKow1kfU1Kk+3B3V3nclhSckydASsQ98oy+hOTrlFFg+4/Ygn6+1iMGmdn/0qahzViTtzfkhWFBUnt/d9hGo2zAxPZRy+dTvuq3mjyE55PPokigta9VbH1+gdz8lmwzIpBH1/oLrOMCytmZFaYv4FDg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780067274; c=relaxed/simple; bh=jVoGol12bIRznjNhieU5A4Tdk7z3jKrmByZepFDORvs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=QU00GtlffRFvIVGKTKjZv5g8z3ALF1P4/V0UWaBY/X/eMpqE9KJd+XYGdjtVp4RbhAggSzhlFSrxjLk2EPvrrtpVMajNH2XwcNOeB9T91w8UYPVLL7nJdt1jYVXgAxIqQhfRoA5i8pc/ySywEjslO8uIUHyCm+VxEFrlWOF9MtM= 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=WKT3vjwP; 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="WKT3vjwP" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2bf335549b8so2361085ad.1 for ; Fri, 29 May 2026 08:07:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780067273; x=1780672073; 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=kJfvO9zjLIcNgxwydf05ic8q1+t5yL6F8Cppp5YBjVQ=; b=WKT3vjwPfMnixG7ZQirCo+lluDVkV2CZZo0rcELgtwMV9SQo1UDSdpst96Vc0qXM72 BY4qAZGZ92i93Bm2TDwnQxh3qMmPYNYuNSEG2QXc2FmGZLJIblzCGB92eutxiWgos1Md 4gFYK0xj2QbKG264ZF4zXZKSqbGrlOJ/FTbwFokVvOmKaUa0Wc9uj5AONgu31aUxRkLW s0QVwZ3AaILl04eSzQGyMJB0s/1E1Meldn4ra5j8QBgmSncXLq9xezvwGH8A3ZCELs5N rkgZDGl/RxlUt90FbHiNAmMhtcEovoRh21lRW3Xmv4V/Pc4rRhoToVVqdzdQDXis6w65 b/Ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780067273; x=1780672073; 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=kJfvO9zjLIcNgxwydf05ic8q1+t5yL6F8Cppp5YBjVQ=; b=I7hPEn5+xw/9J29TlpU9BD+v+RLiGgVgsSn2iup8yhV+Ymm4E4r0wHhIfDYQnrP265 n6vbkGlMh0UJoXQ4THE4DFkNWXZk9Ia2mj+wD0XsqnTgYWpJDDf4ksoV+2J++QUVNemP 0yNm5EU15u09ffEt9YtrP/wCv11Yt1n8dyyis0xHuE5NoSvsyUSFt+KQNz2LmuMqgnta uzF/qlLTLqeRTUBsxngBa78bSmwYu+Sx/R1PkcgSNVw7zuzQ83FILYTP7E/UbNuxjLJc bWzKSXZMFTe0X0xbmuBEUc7i6kk3C6VMkHm0uaKag8BDdvD1ro3pJFJt4dMeU25sX4EH bZYQ== X-Forwarded-Encrypted: i=1; AFNElJ/QA9wp1ClzPq8U/98+UTcz+tE4qIQwRQco02FfEujuNm585NgN2bLvm0ygTI5usgruT3dgUFJWSsoyUJ4=@vger.kernel.org X-Gm-Message-State: AOJu0YzsFEVqPMIxLhRfxgshzsSfv04gAcgLN+AOJPcbJx1oX7+tDGiQ 8TVnsGu9HqKYC7nymSjkiiqkJosZZF3i7YGKAoXijPgaCU8x3ct5aZFBGHGJHK2gbMR0Uob9i9r sxXNaiA== X-Received: from pldy13.prod.google.com ([2002:a17:902:cacd:b0:2b2:a70b:98ea]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1b64:b0:2bf:305a:312a with SMTP id d9443c01a7336-2bf3680a163mr2618575ad.22.1780067272464; Fri, 29 May 2026 08:07:52 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 08:07:41 -0700 In-Reply-To: <20260529144435.704127-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: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529150741.714145-1-seanjc@google.com> Subject: [PATCH v4 30/47] x86/xen/time: NOP-ify x86_platform's sched_clock save/restore hooks From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H . Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" NOP-ify the x86_platform sched_clock save/restore hooks when setting up Xen's PV clock to make it somewhat obvious the hooks aren't used when running as a Xen guest (Xen uses a paravirtualized suspend/resume flow). 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 36d66abf5379..640b71d22d97 100644 --- a/arch/x86/xen/time.c +++ b/arch/x86/xen/time.c @@ -578,6 +578,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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 764B63F39F1 for ; Fri, 29 May 2026 15:07:55 +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=1780067276; cv=none; b=lBCmy/mUlJ7SGPpDwetornLB3hKshpMTrxWYEbuR3MrhoTHhbuZboqu3PQci3f6E24Sggjm/LFaQh2+hcLpEcwZNQOWE+uiHo06Gp1Z7E8LrMwgOtAgymSaTwlHkfgQxpDIFKZVpeFr3S3Jd+qZ41jrUyIB80gOZjvlb0BTN1zU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780067276; c=relaxed/simple; bh=kqQGoMW+oi+5ZrWtSd7Fuu/ZnSkBt2VrapqrWKwhgpU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=BQWv2pFBJSQFC3LrApDrWxWbdXeTfnR/Tq+z5vR3UPD01nvXUWxyF6trN5B1PuahBfmwnkU5U5l+5kHJEUHZ6zDUehR1Gq/hSmERzS8+QA5X4KbNv3ohp/nfgvfJ0ULLKNMr8Vgt3LXwt92TsAH0WsLImsaXMWrt7XlxJpEgM5c= 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=MTT5H/Bt; 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="MTT5H/Bt" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2bc7f9b2213so104564035ad.0 for ; Fri, 29 May 2026 08:07:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780067275; x=1780672075; 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=yp4siaZu6zeBY6Dr4EV8ib3+ttfMwXywWsfu9IVNNX0=; b=MTT5H/BtD+VFkskx8pg2WGgy9tBTjt0xmG/mVmPDB5HDINY7uY0sh2YZNENGAKQaR6 elA/yMLkf2gW7nm74tCnIZl/En4kVC2BQOGAYlLncL2OPfugNssLQUwOa95Y0cNqti18 WMRa456+c7TmN85m7rGc5xmh4JFhRhJ426yVCFdTch7M9da28PCWHiuH9UzxRKDrkwQr dL502CMO93fxnVQJcEgZxTeTAS1wz4baF8XdQv5+DDp6x1TW9neghY8z66Tsdfqwd3W0 VaWBdPLbcWuThwCZOJg5/t6JrLXn1WoM/2I1k5x8ckYKO38eIPFlcMx4f+w9YG+CS6Od zRcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780067275; x=1780672075; 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=yp4siaZu6zeBY6Dr4EV8ib3+ttfMwXywWsfu9IVNNX0=; b=kQLziD+H8LCizJCVjfkKBgUX3XjN3VysdmIJ45In6NPUXDFq1D02ifBQxtOTC/9Jb6 NWl+5zLo2zX6SFtjGsxIFi1/paQKyN9ebQALyuCn92uz8DFM4K8Ph6XeTRkgI7ZzYHPC WThQ0gaeYtELSUenzgUkQLukYdAMdbKhYTAtPrPbgb/+URrzwe2a35K53dh5jGm2FksV AvthznEEh0tltICxunJybDTMSVFvT5lWjet1NlhnTw/nVhflyE79K23Vk0YdG5Fzf0K4 TJNlOH2dT8AY5cJksssLO6Z2zza+Po2VYVd5LZzIasKFcrH/iIDzPd59vCF/kmsxFNkM pZtg== X-Forwarded-Encrypted: i=1; AFNElJ8hAlRt5iysNV5m0he4GJRF7/U+rVMZEdrF7XC9f1ENQ/P8Q8Ldqd44/HGt1+KYjqp7HASq6RCPlKsFztQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxnnOPpnEAGK8+M+dDOZq9uaLNE0wSwDY5YYwbI7DBChApm8JzQ IP4XqtcVrN+nzbe3V4QHhRCne2ZNJ0FwjZ0zBw5ifEbf2Fm+ivA2XnHUf2FEGYgYAw+F84zxLJt nSmwSGw== X-Received: from plgv8.prod.google.com ([2002:a17:902:e8c8:b0:2bf:2f05:e721]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:2450:b0:2ba:6ca2:be0 with SMTP id d9443c01a7336-2bf36798a4emr3028165ad.4.1780067274515; Fri, 29 May 2026 08:07:54 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 08:07:52 -0700 In-Reply-To: <20260529144435.704127-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: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529150753.714296-1-seanjc@google.com> Subject: [PATCH v4 31/47] x86/vmware: NOP-ify save/restore hooks when using VMware's sched_clock From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H . Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" NOP-ify the sched_clock save/restore hooks when using VMware's version of sched_clock. This will allow extending paravirt_set_sched_clock() to set the save/restore hooks, without having to simultaneously change the behavior of VMware guests. Note, it's not at all obvious that it's safe/correct for VMware guests to do nothing on suspend/resume, but that's a pre-existing problem. Leave it for a VMware expert to sort out. 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 2d0624c66799..051ef89029a7 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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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 18B153F4DF8 for ; Fri, 29 May 2026 15:07:59 +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=1780067280; cv=none; b=eDkGc9trb2XzQkavbqF0VwH9tSAigHpy+WULzmBj5eUmG/GE30o5qKCSX0eUQ9p/ejLDo5xKO8TWzH+P4+A1MVsCwqHCtjrSgfPy7l6SgahDb3dfSvHGc1S9DhTBusBy9V4zIU55vfCrg0GHXJxNsTEqem8AtzVif9dNiOuL0ys= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780067280; c=relaxed/simple; bh=FpeYXKUVm9PMkFdOsJA/iB3JokpDn1J3KKT5u4Rg4HU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=PDHm3u6Vx5T+xG6DGND0e5DtsCH79HuaPjyLf5g/7HEQj786wBbZGFwluKkZcqJZA3Y2o9WhPBvY7GFGGrMxfseb0JG4zFx3KM9QK8Nwky7/igwyBQNfH+6iBR/tHvrYaPqTIhxNSTkjPNDbKYfR0qm2ZOnMutuBfvXzOHVaNq8= 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=O1u4pSJS; 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="O1u4pSJS" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-c828f0f5c23so7214438a12.1 for ; Fri, 29 May 2026 08:07:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780067278; x=1780672078; 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=xxACJL8GJmmB0S+liLqaHbVRa5fkFAryvwd+hR3Tj1U=; b=O1u4pSJSSOeUYcFsUgDydMeZlb6uDdrJpEiu8kNRPKnGbijG9UjRIUl3XAQI4CQltB 5+aumXId6OaSACXvWPZz4y1SjNQyczrhMxvq9oLniRQYy3sD1yBvS4IwD2JtKVLThMNU tHpeLRrqJvO1nhZulkacCX8kDZzDtwuuu62+7i/ib2gKJIRCjBlHGfLjXVb0mVcij5Xf wUMOa5H7Lk+D+kn+lByie9oA+GJ3A/ZrWIWSQbwg8HS0xJbDsc5w8qrrTkraJbqWdlZ2 6MyKPR4c/U+VuS872khWrdZ+s0I00Xne1sBb8QWcJCz7FyxEjJ5HFA17ivN+uqctAoFu F6Gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780067278; x=1780672078; 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=xxACJL8GJmmB0S+liLqaHbVRa5fkFAryvwd+hR3Tj1U=; b=U9YmKAsUqXi0FpmrwCDks9GWIY8585EWiu31mEWgJstZxIpesRW4FgUZYkrDETQj12 jxkCo9DDUO3vVhg2F2leWgP9yzJrg9lE8XGiVavozKseCZ0w0F+0M0e8fVOlATsqc666 NZ5dUef38iliIWO4EUarVp1FUZUiTR1LF1h04hnqjOqbm//AH2FNg42TCJo6voQo9fyg oEaGrHV89txrmXty0DcgXjkjZDJbiEDrEEkvUCJGGd018ijLdMYlJkrcFDW3k1UdZ4WT xMvp8Hn/uF6bEQYCjw6TvuYiZ43ZV0dvuz4qP/hjy32LKflBVY1GwcTlmkRKyEJxLoBb 9/+Q== X-Forwarded-Encrypted: i=1; AFNElJ/e0hJAsRNehEGaoqPrr1vX94YDLzLjJlkPhZHcEhNleRtqlD67Syrt+toiTzmusDrWN1CfHX8PWPdS9Qc=@vger.kernel.org X-Gm-Message-State: AOJu0YykxwtakDB6FQfM95JrDutEKE7J4VhUfo0Bq75o9aArhFCZhKoW Y428+pzvCCGgor3AoKn/1QvWWo1ZbM0tETkZUoD+PMtw6gX9+r2xFk11dOEv9msLWFdItVvpmxN CTeHDpQ== X-Received: from pgbda10.prod.google.com ([2002:a05:6a02:238a:b0:c80:2987:4220]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:9f88:b0:3b3:1951:489b with SMTP id adf61e73a8af0-3b411e714f7mr3887670637.45.1780067278068; Fri, 29 May 2026 08:07:58 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 08:07:55 -0700 In-Reply-To: <20260529144435.704127-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: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529150755.714364-1-seanjc@google.com> Subject: [PATCH v4 32/47] x86/tsc: WARN if TSC sched_clock save/restore used with PV sched_clock From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H . Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that all PV clocksources override the sched_clock save/restore hooks when overriding sched_clock, WARN if the "default" TSC hooks are invoked when using a PV sched_clock, e.g. to guard against regressions. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/kernel/tsc.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index a9b6d3399c23..19da1a3d2126 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -972,9 +972,17 @@ EXPORT_SYMBOL_GPL(recalibrate_cpu_khz); =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(); @@ -994,7 +1002,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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 C6D5E3F58C7 for ; Fri, 29 May 2026 15:08:00 +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=1780067282; cv=none; b=peubCQSF1K/0hjKS/7XBnAK/7OEAKsTeaNaLi0KjThb4Uzr3+/jOEqVgpakPV3AfnVKwsZuUBt7FFBO7G//3AmHk0B4ATnWv+J1oKGagpEMrHyxWcWQ1EXdu/2GNU8/9OkwSazTXmBuympbZuX+4HVRiFlqf6FJS0r8aVCF5vg0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780067282; c=relaxed/simple; bh=vgkgKjbJSAxudvNSvuXfvrLz/+GKydFGbDPMXU1N0T0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=nBPkjYaPT8kai6xMKl96HTIRarpnwXX87qSRQXz8LJmw1u7zqKAtpjolHoCPTrEZ7QrW3HQq4fyO9xecNU7rd5WFYFbSuhjj2DMpgrD7g6UVL6xw8HsJoot6Qpu/H0RZ0PD+gpg8U1TwboO2gjdLv0vBYifpJfIREsTgRtCAo9U= 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=DtN5wg6x; 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="DtN5wg6x" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2ba3245a43dso160003435ad.0 for ; Fri, 29 May 2026 08:08:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780067280; x=1780672080; 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=x48EAn3xKSGkzUgWryz9swjOD88igI5uWtnxtPJbQF4=; b=DtN5wg6xBzoeAW5LnAf5EFWxfHFYIsB6fUngLdceOaTfr8ST6uIxFthvkBfDoC66KG G3yEAbKWeqcL+fAonsHf0/gct5X/dZsXG3uqS1CSMDz0x0ila/WMPvNH2skeX4jN1otG Ert4igCDJ66dobF9Sa2PtPymxqSweUfMfj9V+U52Ne7yHlA7iDz++1Yor1qncdGe7pTj F75QGKiGotnPpZHkvqqaOP0PmkKnG3P2G1cDJCCPv2sCk66uv+Upv7+4pgBy4aZx1o4p ZEdoDa9au+0WNhZ5UwmtOdmyYGsrs/brVMipYIAGCLVW2yNeEd3N6znKoZZdWR8eOrou T5kA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780067280; x=1780672080; 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=x48EAn3xKSGkzUgWryz9swjOD88igI5uWtnxtPJbQF4=; b=GuJGNrQ774zHWjQYoYvSQkvXPPPsHuQkJrzDDhMzowZh+XhIcjr9pg7B1elKEMc6L2 rRbPJOyRJOJXh7Bx/HP9Qka/ttAtkKB+nT94HuAx9T/+AkVaOdD+1LhIwxosuSwFt0/f /kjihTy9URSP0UhbRkQgWMe++0R62rfk5mdgQBZ++QAUbp2DOJqJA4wK08JpUksDCejy 3JPPJBuL7ra0EevMt0DXIpjmD8BCmFMDCMTT0NCvbfxW0F4nylolD9y7epve2V0sdpXK 4NdT6MqKzLWxAIpGi96ockGV+bNgzTTTNVweR3plocpETaR6HspZwyINy/4HYVuObXdn o0/A== X-Forwarded-Encrypted: i=1; AFNElJ843rc7j+VoXkPmFHbPk33xQYbaQTMkPa9smSkC2MqbLMmPGjzK9lW5FIaTXBGWD46nixAY/7rx42pNjhk=@vger.kernel.org X-Gm-Message-State: AOJu0YyPyBjYulozwBnwQMiA7FuyymPwNLNV3sFlFzk3tUOTOstNbIaW PNYwkP+JsXPhgIo+AjDJKiW8PZP1447OrJzSpnkko2hLTR1ib2E7YME5FcQ2DNoawsextKWijEg AcOihpQ== X-Received: from plbkk16.prod.google.com ([2002:a17:903:710:b0:2b4:62bc:c2a9]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:903:b0:2bf:2e9:bd6d with SMTP id d9443c01a7336-2bf367be098mr3118615ad.12.1780067280044; Fri, 29 May 2026 08:08:00 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 08:07:58 -0700 In-Reply-To: <20260529144435.704127-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: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529150758.714420-1-seanjc@google.com> Subject: [PATCH v4 33/47] x86/paravirt: Pass sched_clock save/restore helpers during registration From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H . Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Pass in a PV clock's save/restore helpers when configuring sched_clock instead of relying on each PV clock to manually set the save/restore hooks. In addition to bringing sanity to the code, this will allow gracefully "rejecting" a PV sched_clock, e.g. when running as a CoCo guest that has access to a "secure" TSC. No functional change intended. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/include/asm/timer.h | 9 ++++++--- arch/x86/kernel/cpu/vmware.c | 8 +++----- arch/x86/kernel/kvmclock.c | 6 +++--- arch/x86/kernel/tsc.c | 5 ++++- arch/x86/xen/time.c | 5 ++--- drivers/clocksource/hyperv_timer.c | 6 ++---- 6 files changed, 20 insertions(+), 19 deletions(-) diff --git a/arch/x86/include/asm/timer.h b/arch/x86/include/asm/timer.h index fe41d40a9ae6..e97cd1ae03d1 100644 --- a/arch/x86/include/asm/timer.h +++ b/arch/x86/include/asm/timer.h @@ -14,11 +14,14 @@ extern int no_timer_check; extern bool using_native_sched_clock(void); =20 #ifdef CONFIG_PARAVIRT -void __paravirt_set_sched_clock(u64 (*func)(void), bool stable); +void __paravirt_set_sched_clock(u64 (*func)(void), bool stable, + void (*save)(void), void (*restore)(void)); =20 -static inline void paravirt_set_sched_clock(u64 (*func)(void)) +static inline void paravirt_set_sched_clock(u64 (*func)(void), + void (*save)(void), + void (*restore)(void)) { - __paravirt_set_sched_clock(func, true); + __paravirt_set_sched_clock(func, true, save, restore); } #endif =20 diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c index 051ef89029a7..f3ffc05c7c53 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 0d4f2cf97246..05bca2be0df3 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -137,7 +137,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); @@ -345,8 +347,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 19da1a3d2126..7fbcfc2efd1d 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 640b71d22d97..91ef83b1e540 100644 --- a/arch/x86/xen/time.c +++ b/arch/x86/xen/time.c @@ -577,13 +577,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 ac1d9f9c381c..dee59ce61c29 100644 --- a/drivers/clocksource/hyperv_timer.c +++ b/drivers/clocksource/hyperv_timer.c @@ -553,10 +553,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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 044BF3F6C26 for ; Fri, 29 May 2026 15:08:03 +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=1780067285; cv=none; b=OJ2jsHRxLhpi7Q1MCxWbcHcPKXwU0gezYA0PG5DDndENM0OM5KmpVYCK7URxG3Gexf1lM/o8CFUdaKDYV1T/jfm07JClZeR7+KcWmap0hav+qgk6nh0FDAq1aXJD6THmeWmwXnszpko+/pRDfFTvH+x0R5d861CgxIG5dg/QGPo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780067285; c=relaxed/simple; bh=oQBeCKjjhNFtUPINo6soUvc55PJ7W+tEXERwbtHRNX4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=pmG2kVm7Jn09c1kjtkb6ljEW/mmjseoGehvE2RDXSao0PLihwiUpbNZnK6BGppa0nQKU/LdFlJB0zmzdX4HD9FSDC6jiq3OEfRQX2D0ZdglCsltkrnmluL+1EdIdlnVGYN5V7uUxj99gnI8f6Un6+dNpIdWAuqLYTz70jlVjA2I= 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=lqp2CYJm; 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="lqp2CYJm" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2bf32259e0eso2665045ad.0 for ; Fri, 29 May 2026 08:08:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780067283; x=1780672083; 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=A0LUKgY7WdUW5/UN6qkumXlSSdA1avjLrzVcdpZcOlg=; b=lqp2CYJmssk1RuLJX/mLS36NjPkh8dSyMyaYyiLxF8gyoolSyUw1RDGNq4Va+tmNRG gTbF9b3a09tzBLpNXjQoz6ITzti8Fq/d4NSLsSAG/kWQxTU28xlFxZ+ady/tgiUEv9s8 eKs9xU844Mmdv7ziPeVgzs2q0b/0I1AjfAd0hkuXNrbfU7PCxyV+0TYyCqdj2TVNBdhl 1pz1jFFW45uBiVUTNNCGqpqBalru/fp4qGdkMKbgJ/XSgpP8lkt6iRdpRy7lOMF0Mn3w 6DE5at9FsWzfH0aDNDtfETLAzLv/98YC5qjJ+1KsxrOBGCESEpC58Rb8z1trJe3zmXOq P2IQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780067283; x=1780672083; 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=A0LUKgY7WdUW5/UN6qkumXlSSdA1avjLrzVcdpZcOlg=; b=ntBJxEVJCmel7MTjWgPPoy6GTdlgtQLm/jRD3CKm5TF7c3/rUqyuBeJVJcx4OMM7AL 0UogRR1hGks2u3evRUePR6hD7FclYNLWIrY9o20iA3WcVXMECQiiaTIzaHQZHo9jLBxc RR04m+9RPA6LwQlET7VZn+fsARH0rZ1Td8ixp2oBn+RQeKgJcPTHiYjpK9RG0sO/VmYA AaXFiiSjtm40FRMIr1m3HEWXnan70S1kW4OQGZj6s3RYr6bYrEfsDFpNhFJn2hE/xvfN g9ZAAYyPkC+84ebGeAlB3YeFz1MTBOakXtbJ6kEGBW4K8URZkzmsM06shWOUtlQo7YlU ku/Q== X-Forwarded-Encrypted: i=1; AFNElJ+ty8Wp8GD8Xst1gSwSXGt0Nq1lTHdHmAFXETHfsWuVCFYqTG6wPKQLr1IgaEYjP0YJdDjBU3dlpf7UYD8=@vger.kernel.org X-Gm-Message-State: AOJu0YxlLdQJi6yBe/vLLahdnu0Hu3+6DVeA2Nhj6Lzzc6DiekAnAR1s 6CnIc8wfi6upeN1z/XWTU61hwoTZ+BsrYTlWgq0G6f3uRhbfpsgQ08TPguLFks3cH3WnU+Lbxtg xCVGzsg== X-Received: from pldt15.prod.google.com ([2002:a17:903:40cf:b0:2bd:a5da:7a51]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:da84:b0:2bc:8f62:990b with SMTP id d9443c01a7336-2bf368d7531mr1933905ad.41.1780067283075; Fri, 29 May 2026 08:08:03 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 08:08:00 -0700 In-Reply-To: <20260529144435.704127-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: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529150800.714453-1-seanjc@google.com> Subject: [PATCH v4 34/47] x86/kvmclock: Move kvm_sched_clock_init() down in kvmclock.c From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H . Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move kvm_sched_clock_init() "down" so that it can reference the global kvm_clock structure without needing a forward declaration. Opportunistically mark the helper as "__init" instead of "inline" to make its usage more obvious; modern compilers don't need a hint to inline a single-use function, and an extra CALL+RET pair during boot is a complete non-issue. And, if the compiler ignores the hint and does NOT inline the function, the resulting code may not get discarded after boot due lack of an __init annotation. No functional change intended. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/kernel/kvmclock.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index 05bca2be0df3..6372b4dc7b0c 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -134,20 +134,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) { /* @@ -303,6 +289,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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 C47473F8EB7 for ; Fri, 29 May 2026 15:08:07 +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=1780067288; cv=none; b=AhJaQTpB81ppwqFYOYvhddTK4sql/+WkJU57/dIVSaK2G5vqyIkNvbejCczjga3OCrfV8lsqwbor8FNbor3NQP4cnXQcNbIReCyWpC0iIbL7/bwxXl2gguXEpOvL19cS3GwY+LNF90Ves1O1Po462KOt7A6fjC62HGZMHsNxZ3k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780067288; c=relaxed/simple; bh=he0WfZWWdERYD7ChG87MeYfoSX2HSFZ+ZmjDHyI6dIA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=OVNC+CopLO8gB/j3BLu6QOyuRKa91LjqlUTg3D/44TSbYCI05NHNlI8tSWZzUZeMSTKjmKAk36KZgHYnTsYlHesWVCSvwELwEdPoMbPwU381bX3iMYok5udTsuKoohXf6uxGozcwKSz7dFde31hiypNzIeT0QHlFODr8oRQNT24= 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=u3wQ4poY; 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="u3wQ4poY" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2bd04e4fe3dso112889055ad.3 for ; Fri, 29 May 2026 08:08:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780067287; x=1780672087; 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=juhHvibOKBbL5R/8TYL0oDxVwG80NiQFMLoZ+aO+Nyo=; b=u3wQ4poYP2eSyy1zEVjY0WHILnDf1cSwHDndkUc7IvC/yCRmr2YBGSs8oNtQBEs1cP Vf21HPDas7ZFNepSdMVYgkFhXqS6lPxlxJqUK36CwJvgz+nskIpSIxOkbx6g6izn/A6X Yjrszv/vE7z/P3kzocBh1R0QG16IwLr9Iz6X9EGr+Wd+4vzZulRSWG8EuJeTM5EPwbHv lE37h0CnR0DES0ojJtVtMXCKNV8+QV2ctneAXeIqK9Fpn/PMvCRgVd2sNAPH1c1t0SLN j4tbZefDK3OnstUvTwVHuqNBUxCbHFJJVL3t2xJBEK6gKO+pMGb2M6jOK0i15Cqsz5Bi 8Ckg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780067287; x=1780672087; 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=juhHvibOKBbL5R/8TYL0oDxVwG80NiQFMLoZ+aO+Nyo=; b=KlU5Hw3B6wkOk82+guAN6VeYm7rVb2HDOrSAJM+VpnWEBpw5wdXGXrzpUFiGSELH8y Hx02qTVbkHczT5myi4SWaKlYRunqWU7V85adtlL9mr6J8Eip6TNHpuCpMTWerdBu+vtM qcpo+UCSpu//qTWBEfMG8vJ5HD+2yLbPS6R6Oa8pPasQsj/xf3CQuvv9zlEv5k1ilDbW cMSbLIrqxudeP5lkgzKhck6vH45q4vIdmdEBQdJDQ9kXRGdk44Dd9abfhC8fj+VluEdg 9DxAivztiuyNpG+U9w9JG+flxzmMeZsdicfxJrn3Ut0kiaWo18PfsX8e0bxQBEr+zsR/ EuLw== X-Forwarded-Encrypted: i=1; AFNElJ+uOv+faFP89qqluFxrKsda6EiVhAmUnjaWipaHdy4IArYDjv91/gPEp+6E7PSH6v/7qECznWg0Q5NKLz8=@vger.kernel.org X-Gm-Message-State: AOJu0YzF8i3tNxgOC/gLirvi1Dk1ltosUVMJGXb04DUvCOMHzt7zvbcC ye6xBm6V5X7rv+iQj18DOnzitSHtbNBcD/GeVOkunvL8CAViCGODIqbqyWRFSbyt2Dq3bLEaHOI bvvIZOw== X-Received: from plrf5.prod.google.com ([2002:a17:902:ab85:b0:2b0:5538:b55b]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e88c:b0:2bf:2188:a90f with SMTP id d9443c01a7336-2bf3687a3f3mr2296425ad.32.1780067286623; Fri, 29 May 2026 08:08:06 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 08:08:03 -0700 In-Reply-To: <20260529144435.704127-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: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529150803.714504-1-seanjc@google.com> Subject: [PATCH v4 35/47] x86/xen/time: Mark xen_setup_vsyscall_time_info() as __init From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H . Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , 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 91ef83b1e540..8f4511f91d16 100644 --- a/arch/x86/xen/time.c +++ b/arch/x86/xen/time.c @@ -454,7 +454,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780067307; cv=none; d=zohomail.com; s=zohoarc; b=GHSilkuqvIIUg/YFOHfmVsmOQ/h8M+ycypajW+1JNReqbXjznDuDCRe2G9YYdjA+/xutX8TMZhc3tzMkK6X971s0bxSHfYPChRj7Mgh4C6BIIteqBcOW4A0rhrWf4IBIEBf2DUKftUXA5RfnTQ9AZt4d4fU7mLZrK0m5sH7NJVA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780067307; 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=4xsn0b4/TuAYVw8d7nIvqzj+ui/IxR9VfuC7re3vJ7o=; b=dDMKnqq+Ev3JK5Uojwf7BxSj7+Pue0RmcoeGcOb574BM0utHPmOzYMRta3KhRUaR2NxS3/aaufmIorbdWq5QEVrUWxHEcSWcY1JkLqaXDVbUCKX4PwOfzQdYFluuCkmM028KyPqJ1tcdqhmUY+hIPPFbbUm3/l4zlHdTuo79qro= 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 1780067307041478.22387166759177; Fri, 29 May 2026 08:08:27 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322441.1588708 (Exim 4.92) (envelope-from ) id 1wSyon-0006Bz-SX; Fri, 29 May 2026 15:08:13 +0000 Received: by outflank-mailman (output) from mailman id 1322441.1588708; Fri, 29 May 2026 15:08: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 1wSyon-0006Br-Pt; Fri, 29 May 2026 15:08:13 +0000 Received: by outflank-mailman (input) for mailman id 1322441; Fri, 29 May 2026 15:08:13 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <32qsZagYKCe8jVReaTXffXcV.TfdoVe-UVmVccZjkj.oVegifaVTk.fiX@flex--seanjc.bounces.google.com>) id 1wSyon-00069x-55 for xen-devel@lists.xenproject.org; Fri, 29 May 2026 15:08:13 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSyom-009KEh-HM for xen-devel@lists.xenproject.org; Fri, 29 May 2026 17:08:12 +0200 Received: from [10.42.69.9] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <32qsZagYKCe8jVReaTXffXcV.TfdoVe-UVmVccZjkj.oVegifaVTk.fiX@flex--seanjc.bounces.google.com>) id 6a19abc2-5cb7-0a2a0a5109dd-0a2a4509b480-48 for ; Fri, 29 May 2026 17:08:12 +0200 Received: from [209.85.215.201] (helo=mail-pg1-f201.google.com) by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <32qsZagYKCe8jVReaTXffXcV.TfdoVe-UVmVccZjkj.oVegifaVTk.fiX@flex--seanjc.bounces.google.com>) id 6a19abdb-2497-0a2a45090019-d155d7c9e8fb-3 for ; Fri, 29 May 2026 17:08:12 +0200 Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-c82ba4715b6so14995163a12.2 for ; Fri, 29 May 2026 08:08: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=1780067290; x=1780672090; 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=4xsn0b4/TuAYVw8d7nIvqzj+ui/IxR9VfuC7re3vJ7o=; b=FbxfYU86KBeF6DrXroMRvR539vCVARty3gl1Xo9IrIlf3w+os/s7XKeRLC0SIoesJh vTvwDpphdybGEVRLKiJdYietr3lppS7TThOSoWrMBQkXqmWkSve4cZpRQlr381ob+7f0 BUyfau3CEraiEqhOt/IVz4S13kKaqldkHrk+qAy6OE3oiF4DaiZnCCEeAdweXuu4LRBV I1kVZNEPuWn+ZP1daq6TOYEzlv0M4Bnwxz66ylLGUTzCAcZ/idMIi+Yyc74IP3mnEivb 07RwRZtzAuv+C0ZkTl1kXiwlfcBsA3Y7rSYJX3sr7NBTagukdLJFENW6zfMfp9KI3LPP 7nrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780067290; x=1780672090; 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=4xsn0b4/TuAYVw8d7nIvqzj+ui/IxR9VfuC7re3vJ7o=; b=tCRCYDKuO2F2qJ9G/m4ApeX5VIRZFYbqHKq4nsQXHNh5MyelZTSkTWucwj4flI9392 P+yTQjd6BAz9pqcZ4gDByrrH3MDDlY3fuIxYD55Wns42d6k0A/2FnLpxekH8j2FkkaFQ zWwEZHtMSOgm5JbBbhqk1UhB1mLCkdXoZsGQZpyRS/KQ2LpdaxttRDv5is/ASEOO6wqG A5DO+sEpH6CXq/IvwkXObelXS4Km6KfFQk1SSUR/++/H2Wep9f8L398mZeWw+0lZS0IL Rzky0RcYH3Mxtzpi31N0bHZVV0fs/sHariXDqn76bTXD4UWQLDWYa9zL1K3iQU6OoNmT 0wYg== X-Forwarded-Encrypted: i=1; AFNElJ/I/Gi6yCHqkkJ3IWO0PqjzQhhnHaJQPSyYJMBZhMGn3MxfsN96PaSJB56Gt9XMEhFquGezSnIKblo=@lists.xenproject.org X-Gm-Message-State: AOJu0YwYmb9MemeKEafXKqqfb4Nh4NkIN94KlnwA3wKYRaBy8C/ZGhX4 j6UGZWUepncyWdbs0hJpWSE58OIsDZ05Hki8ovtnv1MEitGcle3m+xBoyOW6S7eKZwo8CLr9plt iyleOuA== X-Received: from pgfu20.prod.google.com ([2002:a65:6714:0:b0:c85:82f6:34d1]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:2452:b0:3b3:24d5:d656 with SMTP id adf61e73a8af0-3b411deb049mr3990553637.23.1780067290086; Fri, 29 May 2026 08:08:10 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 08:08:07 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529150807.714538-1-seanjc@google.com> Subject: [PATCH v4 36/47] x86/pvclock: Mark setup helpers and related various as __init/__ro_after_init From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H . Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-bad1c0/1780067292-37979A53-5F630D5C/0/0 X-purgate-type: clean X-purgate-size: 1384 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780067307927158500 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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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 EAC9B3FB04E for ; Fri, 29 May 2026 15:08:12 +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=1780067294; cv=none; b=ZrlIpoDhrx6hcmq/floXTZVd3ejlLg8xr+vnpoO0aFcIpdIhY+7g5z0T0wmdPDOrsN/WBtMVQcWY0WjgeiMztyHJddG7K0yN+ncuwDVV03IryROrQvVp4k6chMHR5Y+2n1oyWxmxvO3TyMgpKT/wL+HRiTBrF8i5Chyb+3+yheQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780067294; c=relaxed/simple; bh=exJIaYP606/6I81t2u+ZeN9QwrdKHiAhDu05aj2jV5A=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=NSxsMUnoxVG3Ljt0sDusHpW3lcGuXnnZ5uKD8z3Yuk7F9KpwiXmSY1BHZTlEV4mdQKz04DeLOu6ZZwqnlG6Ekcz/C50jg/4szl5SNrTRA8qTMm6LH0AAzlDlmbLD5LIg/FghdtQlwibFpFW3gQ4gPyv1BeqLlEKNs15ngdy2Z0k= 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=Wjh3olIL; 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="Wjh3olIL" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-367fd7b8825so14066204a91.0 for ; Fri, 29 May 2026 08:08:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780067292; x=1780672092; 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=0jsX4kmzCmqMaCGwN5oKHLOUS2DjjzJWXK44/xdBtv0=; b=Wjh3olILxBugqfvoOFwFG+iNdahIJViFHp8S3c2YjV6zCK91YWRtTVvfUNVirjBcky hg7By0k/06qv+0FDkThy3f2YA3TwhEaQ1haPIKELN8pCwXfmNed5MdcLzC5VUD3YnD9F xBrrQo5iUhu1WlGlSV7EyIx3xBuRUfyhKa/npGyzsNLPmYlgkCrlXuiG6BYqbKeROFxO 2YD7huKY7UmeKEHUkTvSqeryRbzcA/F8WOtHieIZO091SZxsXNQYkMTZXHR0mqviR0sQ gCWOhrCbrLRUGezc79zzKWWfC9ba4VbZhr0KJqgov6DzGWEvYHQYr0WbFK5PWDnt+xi4 47SA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780067292; x=1780672092; 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=0jsX4kmzCmqMaCGwN5oKHLOUS2DjjzJWXK44/xdBtv0=; b=QrzvcyX1F6EMNJ7hKu2/vHLHG6LCi54T9XHKu4Rg/ghN7Leb8xbvqja1tkZJfj3hLD g2bzHWOR+ZrqCig34eOqlPpMPb4h5s+tt7W8sImXesMXH9nnFMoqjRV7qHU1X5ofe7vT ng/ZK+z3mArx4zdTUXap7iGiqNSflUrm6F5KMnNhHqgK8/sbUb6Wb72n7hsACSq6Oenf qN+wSXiiEbm0YqURzOxXsgnC5Y9sBAgYnJ6bHQa944OsvTKUKzQ/Qn+rm7HdR9pIp7YL NfPaIYd3CFoPuPcqcClgFbhEHeCyipahBTeCPkURm3WIIORp8lem8XShCuVKFzY910tN +Akg== X-Forwarded-Encrypted: i=1; AFNElJ/IfbPgrNF7Q0XkPGmJVFTtoI4f4flpEP6x9G8qh46YwEhr/upjvjUvfihg9rWpo5xTATZ617GjGb0x6lA=@vger.kernel.org X-Gm-Message-State: AOJu0Yy91E9DB2Dg0G8aQTb1HXUrTs48SiCljCOllvljPiNBxlmUuDov Mp3fEnWmikNXMiwPqPUo6RpZQru7y3EBuxJPJsqkBCg7CbuWxlPE/RRAmlevUB84dNXtJUpO9hk X9ZxFEw== X-Received: from pgvi5.prod.google.com ([2002:a65:61a5:0:b0:c82:2dd8:9d49]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:6b87:b0:3b3:d4a:793b with SMTP id adf61e73a8af0-3b411e5b284mr4378476637.43.1780067291927; Fri, 29 May 2026 08:08:11 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 08:08:10 -0700 In-Reply-To: <20260529144435.704127-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: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529150810.714572-1-seanjc@google.com> Subject: [PATCH v4 37/47] x86/pvclock: WARN if pvclock's valid_flags are overwritten From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H . Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , 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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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 EB0523FDC04 for ; Fri, 29 May 2026 15:08: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=1780067296; cv=none; b=OlkvYZqwQNX2YMqTwrabV84VqTo8Nl6pRtCC9YZtuQg7gf87yLL2L+e1hfKBUjKIPTt1lGgvflTpaGhYAGJ46xFp33Uyy7rYW2x4+LkfnB+khy69dhfORgPVuXGS5omUCSkv5gZ2eHnE6hBAydNvQlwHQlxLNJv6Asic1PE9tW8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780067296; c=relaxed/simple; bh=BSjCZV2prw1SrJXvAtpxbttBG+ZHRGmcDc0NH0Lv54Q=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=a4v7Q37sRplVhbgyPtMKUyMiE7ONWgOurZbgozUau6xXyvPzlPuV3SwGNKlTgQjMfhNx02kGLBU2+1wld8hbvZjLayubDXaE6izJFLK4LNpA9M6MoRLtwaYu+PSclbPiPiP4pN64m5Syvnc0gr3bdAz81DxLb7rKiYTaFijJ/WE= 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=HWsQQpIX; 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="HWsQQpIX" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2bd5b20aaa6so149415115ad.2 for ; Fri, 29 May 2026 08:08:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780067294; x=1780672094; 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=IXSUk0zrc0SOIpzpc8N9Re3bKO3sQJVctQ52bfDdTtc=; b=HWsQQpIXibrW7pLkwpweCcE9YYwxWaJbQd7GD5mPSkiQ/oDb00JtMpR3wS9abueVuy wh4qOZ2KTLWHfCcDNVUI6q527xOU+ntPUnMou+QUjayJd4CoMqbyNNKzQ1GE45pJwx1b UCwmVpZorH3UOdKBABFU18CVPFmQRfVh07dQc4PUrWxgRjCuspvo079JAlSuu4P49fpD 2czKXAUvHRmJlb7w1bKQwbkY4JJvD8VvhxxPjaIH0x16ptx7wG+Gj+BuLhD+DSEidbah nggOLVC4lT825dwrRD91QvXs7cF6c1zEzemmdaFxhbdTnX2GkLKsq7mlvQJJ3Q92sTU9 +Ezg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780067294; x=1780672094; 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=IXSUk0zrc0SOIpzpc8N9Re3bKO3sQJVctQ52bfDdTtc=; b=SeDGEg9C+Cp8gXWi50Loll8im6mJ8+borzMuOuXFIE92u0E4p3b9/HsPr3E3OULOAQ MYOek7ZE7lqy5EAj6MOot8s1RbgPwQubNSpICAfoC95AI8mHXk5KRcmg0t3oQt6DmLDg yRTYVdx6RVoAmBcqQqQi2ql3wJVjnH3J1w4ODSoKufpzAN/eD8uX3I6B6CKZ/8znOOeW sjdSwrKILx2WnEfv+erCN9wKyWTv/cMmTLSoyhZtfmgNgty137fy5Ad4UOC7kiB/rdWq V841RbZfZilo48z+KE3vHbayf0234W94v/4TjBPMJwXOF2PW+CR4G0+Z7VnXWt4YPcFF K7uQ== X-Forwarded-Encrypted: i=1; AFNElJ+sQx+q2XZlbRFMWX98z4V74CH3Qr/EYe9ciHbakql2OdjRwTUW5Lc7FTPMckrxza64/92QpyneU2mj7SM=@vger.kernel.org X-Gm-Message-State: AOJu0Yy1siGcEYsoaSqg1V/vhlCWGjiPAglGOVdNP1V+wv+dYfYf0LLd /n22xoveL8ukPFk8Dw3SX0ytE9YeSDeHsV4hFq2axHrFgX8wBHIliANmeNRfjrkTs2IM03hquPJ R5VvjVA== X-Received: from plblh4.prod.google.com ([2002:a17:903:2904:b0:2ae:ceb3:f968]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e842:b0:2ba:6ebe:4897 with SMTP id d9443c01a7336-2bf367b37demr2834085ad.3.1780067294027; Fri, 29 May 2026 08:08:14 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 08:08:12 -0700 In-Reply-To: <20260529144435.704127-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: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529150812.714604-1-seanjc@google.com> Subject: [PATCH v4 38/47] x86/kvmclock: Refactor handling of PVCLOCK_TSC_STABLE_BIT during kvmclock_init() From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H . Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , 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 6372b4dc7b0c..4e304f1c887d 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -305,7 +305,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; @@ -332,11 +332,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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 CF7653FE668 for ; Fri, 29 May 2026 15:08:18 +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=1780067300; cv=none; b=pdm40lld+ZiIiMZNH3OjnzzhfJwdz7xsVpOiAVhw4KiQ/bs3eyLsP1ixA/A7xLe/RoKJ+yjbax3UoADXhneQ9w31SFR9aA9sub7zVF00ew0CgonCKNq4ebGZpllVihNvrnU+OjGCRhjzA6Q6Q1m7NQgEYhXQZsYVSOn1RtSwlq0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780067300; c=relaxed/simple; bh=cK9bQGlpdv9LZcFmZsWC/IHJdDiSPttcr7RlDSILQVM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=ZtAzjwbHrmpW9v6WlM9GCdarnTnU/HenUqTXRBB1SgxMPYGiUsNPc+yGUa7VsbFrYStRfU3eAokLujVoA9vpsCPsmWzMqAWM0858abAQrQYsNT7GSDeh3vWqX6c/IRXadlCwqa9OrCoIE24K9oEQbcDOwGN6JCmTCDLE4Ub8aRU= 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=GTj86DPw; 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="GTj86DPw" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-3663cbff31cso9202401a91.2 for ; Fri, 29 May 2026 08:08:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780067298; x=1780672098; 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=tzOZYRAyrYNaAuUvG5/Y5SZS8EF8Fxjy2/uxgYTIQuI=; b=GTj86DPwVtIzh07TZ2E9ZzCewjDPtXPKYcAYlo23mfKTQn7KRrK/IdGQU7bYrBsfiF zPmoBrnO/fxLJLbOjkwppkFk5a5xlgr7d/aQayrEYvHEPfLQgk04rwJgGRaDmAevzvDe rT3wlF4CR1o1gUj/BnnyeongLnetidaLuGrUik4p0D2yrjFhDqF8+tlsKj0jL4fsoSGG s4KS7wf5LDFQunxbnE6lXy/JLIaedxI0VsYadTnBie/U2Q7ZeHiXCWkethTVioycLSxj ELJT8xyMdA0WbYZ29VRuNb6/Mht7O5UMoQVJi3Hxdb1Dn0NBt9aNBN7kTGWLEYZp9pOW f0Hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780067298; x=1780672098; 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=tzOZYRAyrYNaAuUvG5/Y5SZS8EF8Fxjy2/uxgYTIQuI=; b=gL0YA6WheTFcChm3c9ENt0IkANeUVrfu3/aeaZ6OX9JL4m23rhlVyJHESJSImvhaou h6ranj+3tYaG3wwc421KrZfh1NqDDN3coevF+AjkvOMdZSo8qTOta2WDqffQq57I1Wju Mwf6up+gDt9WAtIIIG1MgOZXygtNrZ+dOOAYztJROWtXDciJ1yWsuCdV/tqQ3oLRusvh B1vASaFwQFoh3wi0/ONq7VT5uYUyfwSnzH3utChe2Ylgv824dGsS9CwAZA2SoXXS+Fcm xofg7ZP5AzoGQi1EIt15mEAspfJhxOvVlyelztzfZAiDiYOVsQ4o2BkEC9VO+3YO1BK/ mBOQ== X-Forwarded-Encrypted: i=1; AFNElJ+XPIc4KJF6VRxgQJ82L/mwXVGysmq9TBBZG8rDZ8pMlqWAqdIE9yqoc6G3HWjcYrzWYnUd7UwrEULsm+Q=@vger.kernel.org X-Gm-Message-State: AOJu0Yw49qKClg0UQROTFB3ErDd1YrZwdVkzexdGGOf/E9MpYlxfDvFY wY+q74/wFez5chtqtXDw8geq7U+GSHDYFIl/NafShRtLqiybWXZXxsphKasqG4GGhtLYAxAwH75 MWW0OuA== X-Received: from pgbbz16.prod.google.com ([2002:a05:6a02:610:b0:c82:253f:d5e6]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:5281:b0:36b:293:68d1 with SMTP id 98e67ed59e1d1-36bbcfd8de4mr3965602a91.16.1780067297895; Fri, 29 May 2026 08:08:17 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 08:08:14 -0700 In-Reply-To: <20260529144435.704127-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: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529150814.714658-1-seanjc@google.com> Subject: [PATCH v4 39/47] timekeeping: Resume clocksources before reading persistent clock From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H . Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , 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 c493a4010305..26f3291a814d 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -2098,11 +2098,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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 16CBD3FF8A5 for ; Fri, 29 May 2026 15:08:20 +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=1780067302; cv=none; b=upabWNR4STuQZBXkYgLSxSI9BeQz06oeEEo5p2CU/kcriR1fnUBAjXjPl4fmY+nuSAR2bSynPab29hW4h4B7czkG9gTNfgHQduLfoylpAyVEAUe6irLGl5AgcCmIY6vvSSAaysqP7vxiIn+RmRF2qDsrzFy1pyBXPzwoSw8azsQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780067302; c=relaxed/simple; bh=FXFmm/bt28qzsjhzY8TENCjzEiTjb//R/uZtmzqCTi4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=pz/jag+KztiHaq7+UUSHi2ADNHjcFBSuHaas5sC/0EKpHVlnnwU020M2MjrJm6Fg/Baz8Ib72BxpR60IFhPhqOu1u7S7Q58DFmyRbgqCsenrjR2Nt5xsvMRb8eKAySwjrX0cSuab9sSCDsyfTefoyDD55AgRoSHvJlKM1n7a3P0= 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=YKnqxczI; 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="YKnqxczI" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-82fa2165c3eso9300766b3a.0 for ; Fri, 29 May 2026 08:08:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780067300; x=1780672100; 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=hiLxlYw3clwD2dLxI09vlAh7vN9DHw/HVEHbWWzJKBk=; b=YKnqxczI3yawyQxppQjpZXSdQey8KrFecNNN0NvjBTtgm0bcy3t+XH1QKRoKsRMtMk VyLieqz2PAHG55nVmLrlV6FfVLLshwR499Lc7dHchGVk5vIboZKP6qHuuO7sEFD4aiBR RCzta4gO3pwvos5mcUFstAR/sBhCVsP8qyDIddv4BHjfdaXglNYq8aufIk/P+T1S1HPA UUSgsfudVdVs3XHt2HaU0nn0aJyfuTgE8J1Z4Wv8woe/80qke/fQmlvWvnEIGyykZ/SQ 8wHYOruGsqFE90xIsKTv7MdB7Os1ItoGcE96asK5DBJ6t0b7Ac91cCZrOArYiALAp5B1 cyDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780067300; x=1780672100; 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=hiLxlYw3clwD2dLxI09vlAh7vN9DHw/HVEHbWWzJKBk=; b=YOIUpoY0/su3QnCmuXqg87Tv7kyZRq4vC0AU3wFGSZQe0X0Lg897RV/QOQH9FitxEx P1Y48fD5bzIyqSIzigK136YwdajLPx8NdIfW1S8YTNHiaWcqgFu5vsTmK+z5EXZKH1/9 ULVmxK/0IEn5Xfn8qhQuqjzIKWObvxAh/yW2hd98oavDfpD4ne5JyUMk0p0BsF9Jt53X TL51nZeOXvcfsCzNCAvqC0O9qaj3gg0ANe4uVWp/gtgSVmIIQkIR2yp34PtsK5ozhAe7 zIbCP4JlRmZM/jGKRKFmJYURMXoX+49rAlTLMzvMWYnn2OUAENAcxRVzS1qWcOueAOmP Y49w== X-Forwarded-Encrypted: i=1; AFNElJ8caSeaBrEhpuBlrHIHPG9fnuB0ysWTgZGeGjaWuMjIOBo1jypGiK3aiZfQ3fWLgZ3wPjeob0eer80QWew=@vger.kernel.org X-Gm-Message-State: AOJu0YwHcIZy80ubzIMkpWHXlyguYj/ywrMdR6i6C+QnCSujRml7xf/V df4pa2DvL2IQnWR028cVycZQleIUaNCJoQJ9FwcXZMCFEXO0oM9jZvs95V33aboLnHwdxykHhXs N9kOkSQ== X-Received: from pgx6.prod.google.com ([2002:a63:1746:0:b0:c79:81bb:79ef]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:9149:b0:3b2:a958:a725 with SMTP id adf61e73a8af0-3b411e478f7mr4139551637.41.1780067299927; Fri, 29 May 2026 08:08:19 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 08:08:18 -0700 In-Reply-To: <20260529144435.704127-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: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529150818.714760-1-seanjc@google.com> Subject: [PATCH v4 40/47] x86/kvmclock: Hook clocksource.suspend/resume when kvmclock isn't sched_clock From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H . Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , 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 4e304f1c887d..5dfac79a5d30 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -131,7 +131,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) @@ -201,6 +211,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) @@ -296,6 +308,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780067321; cv=none; d=zohomail.com; s=zohoarc; b=g/O9goX5YJvGj2tw0QX3lGkdZ8kjHBDpHe7YwbA+cg+dGg2JctGR4UElB34hIm6yny9s4QPYlCuTcGxxlPCDZ8rmF9EUPANiDBBC2qkCsczMNKvmHHSY+UVcLrzq1JyjO1517Cs4P4E2vxQWF583zRMxI+vHyNCPIPzC7l/oZxY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780067321; 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=N9FJGXb1rHvCmGDbAStTerw3YHwheVCgedyMSiUJO9w=; b=KJnKAvcMcba8QekH2/fe4DPtTnTJoCJRJm8pHyWYjwPacQ3nwyvxLUCucOqIw3wn+1wO5uOc3a5Azv3m1FJ7RscyCw+DLPQw29EweVWh1hIFhMOjgbs84jOJKW2FDKhbRTZGrCb3ZVrg7afQlUX6jofkGx0XjMX6SdFv5ipLZXI= 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 1780067321542196.25085007208986; Fri, 29 May 2026 08:08:41 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322446.1588717 (Exim 4.92) (envelope-from ) id 1wSyp0-0006lv-4T; Fri, 29 May 2026 15:08:26 +0000 Received: by outflank-mailman (output) from mailman id 1322446.1588717; Fri, 29 May 2026 15:08: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 1wSyp0-0006ll-1V; Fri, 29 May 2026 15:08:26 +0000 Received: by outflank-mailman (input) for mailman id 1322446; Fri, 29 May 2026 15:08:25 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <35asZagYKCfougcpleiqqing.eqozgp-fgxgnnkuvu.zgprtqlgev.qti@flex--seanjc.bounces.google.com>) id 1wSyoz-0006iP-0V for xen-devel@lists.xenproject.org; Fri, 29 May 2026 15:08:25 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSyoy-002uwf-DS for xen-devel@lists.xenproject.org; Fri, 29 May 2026 17:08:24 +0200 Received: from [10.42.69.3] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <35asZagYKCfougcpleiqqing.eqozgp-fgxgnnkuvu.zgprtqlgev.qti@flex--seanjc.bounces.google.com>) id 6a19abcf-e002-0a2a0a5209dd-0a2a4503e0ae-30 for ; Fri, 29 May 2026 17:08:24 +0200 Received: from [209.85.215.201] (helo=mail-pg1-f201.google.com) by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <35asZagYKCfougcpleiqqing.eqozgp-fgxgnnkuvu.zgprtqlgev.qti@flex--seanjc.bounces.google.com>) id 6a19abe6-672d-0a2a45030019-d155d7c9ed02-3 for ; Fri, 29 May 2026 17:08:24 +0200 Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-c82ac893940so7119245a12.1 for ; Fri, 29 May 2026 08:08:23 -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=1780067302; x=1780672102; 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=N9FJGXb1rHvCmGDbAStTerw3YHwheVCgedyMSiUJO9w=; b=fnF78wHADr4EI/QTQR6MlTLlhAX0nIH8MlyxnND2S2lWQHqEki7zTQ5Pz4uCeaBbYT jikgxgnxUFSZaCY2Equ7x1+GT7U/32aWwFAZVNCaDJjjIQiP7/5kjsDAWCRXsBf98u50 4f/XOIu5qTwwQNa+Cv4PltpAxCoFbjsUoWusgsdHKdr42VJDvbzfAew/MYJ3X77BJgH4 X2lW5tbUYWaGtB7bl6AwFERixgs8bas5FIC9m1YkaSJhe/bpTyP9spBAIDcaZrdHG+bi P7t8g6IVhLuLa5q0QplWJhTkI2vwPx1UW+SAMCa0h/VV1fgJTzE92cRKR9KQZ1gp36G/ CsxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780067302; x=1780672102; 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=N9FJGXb1rHvCmGDbAStTerw3YHwheVCgedyMSiUJO9w=; b=q5+Xiindk0moyyMOLQ4f80xNmYQBnOm8UMWFVuHQgEsDdmegSBagNWATSH92kqUciK 4Ms1Hgdxi9CnuqvPXcfeQD94+vidKkCEtpUwQTd9KWtmMA3RBmI31ZFqQJaXWKTA3a/U NekoiJg0qK/yKB96owcUNaqQ2SiwvQhwvRJepmZCQfmBNlYarlG99vgFg7V+mPXFg9Hs 3xciMQGiqQTANUHotdXIE5RJGDAIlqZq9eeAf5AMGif+/MQvbUGYFD83zPGjiK19i7B5 eXSRPAIeBy00xzeNLkWlorUiCzXV4n2kr99uSWx0zFwTMIviDJoyNMQG8q0RE6HPg6WD fbqA== X-Forwarded-Encrypted: i=1; AFNElJ86JxKdP6Yj46FFVcn5cYTC5J9fmtnzzjy8sfo2l4MSw7lAwOw5mYBctZMCji+fyy+Mpqb8t40s/tg=@lists.xenproject.org X-Gm-Message-State: AOJu0Yx3L+IRm9OQdRVc8YradH2CA5oiBPDErpMYH/BTM3okBcuKPnjf BJIxhq4hVtXe5FYitn2X4J7JgSr3Jz8sEcvgI5HNscOCtVuNf4tLyFKRbNKXcvu79dQM1Xmg2H2 7CCzkQg== X-Received: from pgvi7.prod.google.com ([2002:a65:61a7:0:b0:c85:82f6:34de]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:594:b0:3b3:2703:111 with SMTP id adf61e73a8af0-3b411e9b75cmr3575842637.44.1780067301940; Fri, 29 May 2026 08:08:21 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 08:08:20 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529150820.714844-1-seanjc@google.com> Subject: [PATCH v4 41/47] x86/kvmclock: WARN if wall clock is read while kvmclock is suspended From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H . Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-33051d/1780067304-39B7C938-9D80C75C/0/0 X-purgate-type: clean X-purgate-size: 2065 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780067323109154100 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 5dfac79a5d30..73fabfac2bc9 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); @@ -119,6 +122,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 @@ -131,16 +135,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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 C07B43FFADC for ; Fri, 29 May 2026 15:08:24 +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=1780067306; cv=none; b=fZHHwlU+bq35Txw7lul1EEVw76IZEsKYnn/BfRXm7QGDiU+OcuI5M2t5D2Izuj/csYD2f4+JcAThFzA7rv242qrbgEvXDKhAAzl6Ynmw146xgGLn3wfYRfxvSPoT/gzMEZLpmdery8sf9UuWkAZ424G7okK9zRe+tGJ8gH54BcM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780067306; c=relaxed/simple; bh=4VaqmgjNCHEhgXChxiXGwJR3wgEm9x1M9Rq4DUXzzAg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=cUPuXPRFRqe/NS7NWPWFJ7ExnDlBbtKr494lQ33wbdlVk+GQsY6YluA/abH82A4pMHwlK5Q7FutBEIBTBtT4tYgzILB6nljEqP4shKvSI8PPA1t9+vAXoqZrTqgjCqnfThiSnPmdLGJS/YbTQDT3UgEJbKrALTnovGRYuKvibGM= 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=NWYrFD90; 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="NWYrFD90" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-c8582b167f7so40565a12.0 for ; Fri, 29 May 2026 08:08:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780067304; x=1780672104; 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=Yfx7EXC5hiFOp82KCG+sZ/JXqzo7JAMVp+JZIeKJNyA=; b=NWYrFD90SBRqAnyVRPklgkORGBuebbL+mEgv4SMQ/EwILheIXMg0iwDZWn2EDAaabq 6JPirMiafHJ/tEQUmvZ5j+YS+0XCt//7FdUZBm+snGFIXx0IOrnXGqn84Dxrh24PrSKM +rOreMEr1arJTWk9TzDvQr0MzsmP6HZ7bInZHn5MV76BymdKqF3xjib4h38D1/GcDpBG GCDW2OUXHPRU51ouPTBbe1mZT8mnR4XO+zsHv6El/lNfjBjwMY2SyKwBHKWkvNKQJ5Dq Wf7Fpw8BWHOUTvXsp4pBzKLQhOF/pHWR/EG4eo2BAd1z+NZUs36Sq9iDFfOqWsS6Hj78 za+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780067304; x=1780672104; 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=Yfx7EXC5hiFOp82KCG+sZ/JXqzo7JAMVp+JZIeKJNyA=; b=gDMnLNc1zlqw0KzWkUcQT1XFCNPRt/WntVMeBUAnT+gUE35YZDnSRBZQ3IaG+hs/BP ktOhLC3eLYtyXodwkhpv3WP21M9t9IHdonkZ/kYwVLOa6zA7rmdodwGUnbHRuD2+/we9 9eSWPibAGaP9PqhTNLvNOODs6RPYMLVRQT5P/1ivy4jx99rFIOml/qoMRmVkDHnx6y8T fQHzANyG/DinzJ2LN3RMsZgDwgbCpXIMvCXQh5cPoujIqVtXlwTE1gnP8A8XxjLRA1IO QDAHDOTHpThriwKS4sgK+Q07VYcR6Hr4Ydro4DilDls1NefzzY+SGi65jAZh8LRmADSj sRZw== X-Forwarded-Encrypted: i=1; AFNElJ/a5HuXws8GVia8E7DjvROfKbP0CMEl6oXh3NjCRs1HsiZGIykayIZFm4LLpC+kWvkc4MScw5WbZ6lrEmo=@vger.kernel.org X-Gm-Message-State: AOJu0YzV4X7UQ5v7r5XggO3CY5WqTKEiy/eG7PKRLEsixn/axE9gvM6e ZAy4rcum3BTJ8uAwt9BsuTQuObHt44KJIdUiGj12S1Mk4C8SeACywyFiPvLWmzrIkWUGBHgTs9a Ra0NFiw== X-Received: from plai6.prod.google.com ([2002:a17:902:c946:b0:2bf:1ccd:c294]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e88c:b0:2bf:3074:34dc with SMTP id d9443c01a7336-2bf367c54demr2671615ad.14.1780067303834; Fri, 29 May 2026 08:08:23 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 08:08:22 -0700 In-Reply-To: <20260529144435.704127-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: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529150822.714883-1-seanjc@google.com> Subject: [PATCH v4 42/47] x86/paravirt: Mark __paravirt_set_sched_clock() as __init From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H . Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , 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 7fbcfc2efd1d..6da0a3ac05c2 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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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 B0EAF402B9F for ; Fri, 29 May 2026 15:08:27 +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=1780067309; cv=none; b=SY/BQALxAQ3asEaNNb0Vr3vDcRdVKN/yLcMAIx6J4E/eMsWqOg6tTbLlntrlbnW/JVWXUf3ehzSEkUoyOBKNCm2ZQBMV5h4tLH5G9zt6k3wrl7CGqNzFxBHeBBYkHfoBU3uolGwIxYTZ1Udp+Qe3I+2GhLqKAWPNurTNBDGMmLc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780067309; c=relaxed/simple; bh=fmtwqTBYkb6t5vw+7MpnJ0D/yvZROFNekcfkLoS9uAw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=s8HS0VFYB+a9+iDlsLBHYIMYHdEADgB1JOdYLG6U9skbaB7hJrkkQEvOX2yyIwHDIXgZRKHOeYoh7voCJvXp6tMYBkbbrKiug8itlooVGQaAqunFuWVtOSiye5eplN8i2chxCVq26CyKnGAHpi0+Su2A/OlJkfwYVXPVyyrf4kU= 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=rdHixLCX; 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="rdHixLCX" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2bd6aeb3637so313114615ad.2 for ; Fri, 29 May 2026 08:08:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780067307; x=1780672107; 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=2eZ/5/NHYtlqNBUgYS8sS/KxrmMqlqE8QNmqFczaR90=; b=rdHixLCX61dil2+0N2A/tYy0wy2Yn191b+ZzoDAovSyX7g0g184O6J8KCPwJNMWEnh BoV+hHTMxc1vkcjeAVOHbZnoZhokpyiBvvK16SfbGYJ3QjyhErPpBNxztr+KRPvm8euw A3hX+ECenN+bpU+oZxgue0Lu3SYC51/edAT2wkFoFp5bBGW7IDqVfmkWtamHkRrSCcGU cB3t687aMts2gVKeSYWgyOPDlP1fwYXDs2borjN64W61oAHhxOEZcsvmnng7FAO00+du aiGPJ6NDbZGEqBQGAmoZqNR8CX1oJjMC0PZxRE8bRSs7bZtz6ASc3Gejy3Ja05UOk1Hz oTrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780067307; x=1780672107; 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=2eZ/5/NHYtlqNBUgYS8sS/KxrmMqlqE8QNmqFczaR90=; b=N278OzmNnuU9xHTpyY5ktNOU1LxL/1NmhyUzx6iP2rgluA5ElTlNWk6jaciwKBfFBa JWXQZq+SumhM3Tl6y5b3xSyyDKRkr3LSH3dZmhPjYjTqruVel7BvCcNL5MtTLLTZBfbx jEa+ZPK3sLus+69mTDLOE4pzdImFP7QxuNyo91tt5BR85VzPAQzIewrHGrR6GqS953+Y hee/7RKB86cQxJdpCyJfwkmNV9ru02h7KtFco8EltFZ9UNYq7K936/2pvxQd/D5e1L2L 7FnR7UVwM2jZMgDV1B48V+ZvqPZf4YRD0J4h4Kj6Mw1iAkwsGe2tntjMjwbndNZpfUgE fiPg== X-Forwarded-Encrypted: i=1; AFNElJ9JiwLBq5V+tVezkE63CevmLk7SRQ61MiJxg3iht3Qbxl90Qh8xha1FZL/kBKfCf+CMXSJoGWM73PZaj0o=@vger.kernel.org X-Gm-Message-State: AOJu0Yy7tJIOfLv3dO7QSvqWrPXOiC32pL7nektkb79jgVQ5w9sSIZYc SoykF/N1LMKmkyR0b8NkRxTGnrrUhUakpDBM/BdKtHfaqfIJkOXauQmaDbaM4OAK5Pl65A9t/Sn l5LLo3g== X-Received: from plau10.prod.google.com ([2002:a17:903:304a:b0:2ba:67f8:6257]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:c94c:b0:2bf:604:d5ad with SMTP id d9443c01a7336-2bf368904abmr2085275ad.37.1780067306314; Fri, 29 May 2026 08:08:26 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 08:08:24 -0700 In-Reply-To: <20260529144435.704127-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: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529150824.714934-1-seanjc@google.com> Subject: [PATCH v4 43/47] x86/paravirt: Plumb a return code into __paravirt_set_sched_clock() From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H . Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a return code to __paravirt_set_sched_clock() so that the kernel can reject attempts to use a PV sched_clock without breaking the caller. E.g. when running as a CoCo VM with a secure TSC, using a PV clock is generally undesirable. Note, kvmclock is the only PV clock that does anything "extra" beyond simply registering itself as sched_clock, i.e. is the only caller that needs to check the new return value. Reviewed-by: David Woodhouse Signed-off-by: Sean Christopherson --- arch/x86/include/asm/timer.h | 6 +++--- arch/x86/kernel/kvmclock.c | 9 ++++++--- arch/x86/kernel/tsc.c | 5 +++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/arch/x86/include/asm/timer.h b/arch/x86/include/asm/timer.h index 96ae7feac47c..ca5c95d48c03 100644 --- a/arch/x86/include/asm/timer.h +++ b/arch/x86/include/asm/timer.h @@ -14,14 +14,14 @@ extern int no_timer_check; extern bool using_native_sched_clock(void); =20 #ifdef CONFIG_PARAVIRT -void __init __paravirt_set_sched_clock(u64 (*func)(void), bool stable, - void (*save)(void), void (*restore)(void)); +int __init __paravirt_set_sched_clock(u64 (*func)(void), bool stable, + void (*save)(void), void (*restore)(void)); =20 static __always_inline void paravirt_set_sched_clock(u64 (*func)(void), void (*save)(void), void (*restore)(void)) { - __paravirt_set_sched_clock(func, true, save, restore); + (void)__paravirt_set_sched_clock(func, true, save, restore); } #endif =20 diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index 73fabfac2bc9..1336c24f59cf 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -310,10 +310,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 6da0a3ac05c2..7bcf757bf551 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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780067325; cv=none; d=zohomail.com; s=zohoarc; b=bsyHktoLLQOvK6xc3t7F8PFLRyTAC4RsweY7WGB+r4hTNOYABBoejPXPsXpqJuWuaF3wYI3/3rQg8hfOgLi5aPRoOY11McF+hZQp5pCFfgDEYRH7bnLYv3NM3OijqbBgsL5N+jWdtKgahOL0Lp1vceI6bKCi1LfBTJJW7driAE4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780067325; 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=EFwMDca4i0UUfWhYRWZx1hhbmviPyyt5LCM1/HLShPA=; b=SacPpPIZYwU7B76yZBRRLIFIivDCffsU3mPm8jy5aST23IjmV8ZdasAF3rCIuLHE8fVFaPCZaQGfheXDAbwPHyX5xnlm9Nw7+6y7MSyKnj8AmtO5uK1ORJ+qDtxwCjvZAVnnbQlJh7M9mKeFa7GjjywEROcWzxdkcqSmOfiZbs0= 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 1780067325107519.7663445580977; Fri, 29 May 2026 08:08:45 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322450.1588725 (Exim 4.92) (envelope-from ) id 1wSyp8-0007DJ-BN; Fri, 29 May 2026 15:08:34 +0000 Received: by outflank-mailman (output) from mailman id 1322450.1588725; Fri, 29 May 2026 15:08:34 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wSyp8-0007Ck-8U; Fri, 29 May 2026 15:08:34 +0000 Received: by outflank-mailman (input) for mailman id 1322450; Fri, 29 May 2026 15:08:32 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <37asZagYKCQQwierngksskpi.gsq1ir-hizippmwxw.1irtvsnigx.svk@flex--seanjc.bounces.google.com>) id 1wSyp6-0007At-U8 for xen-devel@lists.xenproject.org; Fri, 29 May 2026 15:08:32 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSyp5-00BVDF-GG for xen-devel@lists.xenproject.org; Fri, 29 May 2026 17:08:31 +0200 Received: from [10.42.69.6] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <37asZagYKCQQwierngksskpi.gsq1ir-hizippmwxw.1irtvsnigx.svk@flex--seanjc.bounces.google.com>) id 6a19abec-2eae-0a2a0a5409dd-0a2a4506b9e2-8 for ; Fri, 29 May 2026 17:08:31 +0200 Received: from [209.85.214.201] (helo=mail-pl1-f201.google.com) by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <37asZagYKCQQwierngksskpi.gsq1ir-hizippmwxw.1irtvsnigx.svk@flex--seanjc.bounces.google.com>) id 6a19abed-7371-0a2a45060019-d155d6c9d110-3 for ; Fri, 29 May 2026 17:08:31 +0200 Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2bf160f7191so7902165ad.3 for ; Fri, 29 May 2026 08:08: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=1780067309; x=1780672109; 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=EFwMDca4i0UUfWhYRWZx1hhbmviPyyt5LCM1/HLShPA=; b=hLIlMKa8CvKj1FZ/1WyFxZJXQhrdWXTkfDWqDtWLIXTtQRy/AWA9zCzxFNNMjnELHP upDDiliJc8oaWif95eWreY4XyHURBzSUj3/EbUU4u1KJ5erpYy0zWzYpblQAHeQLXjsJ 7xK7NysyVJy/cLbNer60XisI4LoqUgiiTR5R/1QlX1kIizTN+yw8mtj3M/u+haTE4vDG 2NHwbDs8HBlxqImhMe/Nrssr0AtvqTDh70jOIg4oeiD1EPK2s7BFlTYRZSv3KRKjtmWs ZwfTiclHbjh6LIkYZn+3tj1R240apCD2V+hiUtE2FraAlJn+Va8NitBUDkjo0zyC4XS/ E2Ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780067309; x=1780672109; 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=EFwMDca4i0UUfWhYRWZx1hhbmviPyyt5LCM1/HLShPA=; b=nTSGhbBxZY7M94rAfRWQJO1JKX5TNzeagGKTNSjpmBAb7Bj02PL0HUsqLmYzjaoaMI YsW3bsI8srrc3gceQ4r1QgAByVUknxozs5MJs9TpSfTlcO/e617vy6xWaK9C+Vzh2PrX 9uaXjNpKdPueqIaVQKWt8fbfbx0gMaW7XFA6KCOPMcaJTRImrdkPj7QvSBi6igfwsa1K z9AmSD5FXLLC1BpQ0qRJ2bNQkGpvcQZDImNMGlXuUbMn2+GNmEjx3GsA7xmYzSsh0HMd btfe47cfGybf3AtbqtYilNHAN32SXxtwXepwrIDkcnSJ5dWt/mRQcy4ce11b6lEM6Pka m+Gg== X-Forwarded-Encrypted: i=1; AFNElJ8VrfNPgN7hJsojhiz0KFtH6tNpJkGkPhB29hYiLoUiD29E98dGdhHJ0XQKicZ7D0kTu3UAgPRUK2U=@lists.xenproject.org X-Gm-Message-State: AOJu0Ywg4cEie3rgjNLSfW2OGLXh/cqqdiqD3CwZuJ2+AA4Tj4pFDK88 0o0nYqpBO2kGsbMMRmpp8jxKnGqKCkPz38CaOR4Ir96g1Nt2W7JPCiclOzBFL18+9eUV1aZrFD0 y/7wGBw== X-Received: from plbjy6.prod.google.com ([2002:a17:903:42c6:b0:2bd:d2c2:2776]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:eccf:b0:2bf:3126:44b6 with SMTP id d9443c01a7336-2bf368bd5dfmr2325645ad.40.1780067309070; Fri, 29 May 2026 08:08:29 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 08:08:26 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529150827.714968-1-seanjc@google.com> Subject: [PATCH v4 44/47] x86/paravirt: Don't use a PV sched_clock in CoCo guests with trusted TSC From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H . Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-16d1c6/1780067311-8EF89D75-DEE7E71A/0/0 X-purgate-type: clean X-purgate-size: 1335 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780067327678154100 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 7bcf757bf551..036916953f4a 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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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 9F2CA407CEF for ; Fri, 29 May 2026 15:08:33 +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=1780067316; cv=none; b=SCIo2FzOOsj5Qvy+SNCmZ4PDx4JSanJKUXxBXYBvIiPxOZpVbDNvBUwGWxRwh/Mygrm1wdPxfp6rGPauFQVrnnIrp1jrH8NESzybBOSUoSnR7/m9iGKtG/ok4K9HIHqTlwBSAkVmVzxaGKSVJxjjhaINhqM3F4gAaX4/rxPPt1I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780067316; c=relaxed/simple; bh=4EM21BPya+I+Yh2sqhdfbU6L/IzTuUdE/Zaa6ZzwnUE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Wvp/AT29ioGKG2Nh/76XKV8lf3KRjMnoAMkV4L4MfO/Vs4snHujKZwl9s+DYaPGUzkV974Cg9qWF2c22P1+u03EM8PzOGWBcS43fHdcNKV36WoBA5S2Lgq61U09lTpijDwt6oS2ue5Nt95wj/RL7QoTM31nRe+p490fN6TUe5Co= 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=UsHMfdjV; 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="UsHMfdjV" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2bf11699875so19374695ad.1 for ; Fri, 29 May 2026 08:08:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780067313; x=1780672113; 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=UfrlcsEyKDSqAVUZDFPjPbjb9qd7cdvAZhMFheCkbts=; b=UsHMfdjVsyqUYN96PfvF1fVaupZDLBIc+ZGKhs3dqP/q5M3nB2jc/D/gLsRQ3YAqNN lj6wzR1nNZ9Y4vDlICXqzLoo5QJ9At1k+WpmhlGGnzSHXt+NlMPoLgS+9ar4rBE2CEuT UBNEjUUqzgdXG6VEObbiJWMqLE6Ghm2AJITcMu7Uiipf8yDANqoIJ3jlyNiSrQPbmaGW CzgqdO12oqj6eDZS/5nfetzBrhwLUBt1AFwl7HWNDgYAJ2OIa9p+HuJhxE4pgnawDNoj d9zizW60k9NzfS5KVi+T/+YE8Vg4Bg2M7pvL4rR+HI9AGhMxam4FQUrwPuy60xX7xWKW Q7aA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780067313; x=1780672113; 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=UfrlcsEyKDSqAVUZDFPjPbjb9qd7cdvAZhMFheCkbts=; b=r5hyUhESf3hjfqeAcUwzsURsh/kclg8pTwdkPvQwi/VYln7A39Eq2VvBtHDsAa6HBF OMP8G0diS+gNP64NwfvoX62PgbOZarhdcgxIyH/ieX5fD4tINgoViYyNyR+dMivXsFUI 5pgn8FdHLTsyfwEuVbkHOPoXLi7wBanoyTjckvVefRR2s3SuFz89HeKN2rf3kfOBKVja 7RfXSSBVt0ktgS+AwUSusN7+TE1SxLdQWA8Wz0grzvPPsOuSbLhwQNZDoZixt4hAnmPK qjBDW9T2fWBFAmfwDWdALSSQv/tQ3CQGwogwhL+m3akLLa6NU1dWGAhAsinKm3u5Wkyk 2Z+w== X-Forwarded-Encrypted: i=1; AFNElJ+y5lD6RS90TuhwfftgxF+2y43FtlmlqTOjoSc46xHDi39UtjsHJP110U60UITbrVH9UQP8gVIDNk0Lp74=@vger.kernel.org X-Gm-Message-State: AOJu0YzBO7GuPeXfPpKvCQANkb5HCvOSICnz6mY/NHQ/t0Aptjo9SbaQ wsCljOrQGQGJCNS7nIeSW3F/iw8+VT9/gwKb3aAOnlEnbeCp6/viIlZq5cNxMSU4w9Y5miadCto wRhlJPQ== X-Received: from plpp10.prod.google.com ([2002:a17:902:c70a:b0:2bd:56ce:d8ea]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:fc85:b0:2bc:ac76:c1d0 with SMTP id d9443c01a7336-2bf20de3033mr36747075ad.17.1780067312791; Fri, 29 May 2026 08:08:32 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 08:08:30 -0700 In-Reply-To: <20260529144435.704127-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: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529150830.715007-1-seanjc@google.com> Subject: [PATCH v4 45/47] x86/kvmclock: Use TSC for sched_clock if it's constant and non-stop From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H . Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , 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, nonstop, and not marked unstable via command line. 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 1336c24f59cf..cd65ad328637 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -374,7 +374,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; @@ -394,6 +393,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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 0F08B408016 for ; Fri, 29 May 2026 15:08:35 +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=1780067317; cv=none; b=lKZBtfkZtatNpfSBHFWsSR4SdqA4MNO9t6EP6mZf8Nypn2Pa8NpM7hduTWXUWykei+bfe3RAL0Qu6WWIXxO6KwlXgBRXunq+OpzmZbNvZHCenMavSGyHUo6PJWSW+KQt/c3nbMyWK7zwkA8SpUYsyMpbQY3izByRVApJO2PR1ic= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780067317; c=relaxed/simple; bh=LpZswxQcTpWpwllCQjxqETaNWjtDeaq0T2fKUuy7APw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=TsRrwKQBlMEXs12hbIrUkIKBp7GCZ2JTAr9ZfERL44Jd8C2kGvTyRqHyv8YPdC9tXdP23dhiRr30sdfStmkeTDPy6MnCg/TGpnJeIy6UjjStWc4yWlmSzFbif7TDZgahWoaUA+K85cy4HiLUMYusIqcLy3f57xPWdBWJYBvSts8= 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=oUCzvPF5; 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="oUCzvPF5" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-36b982ec338so1849601a91.0 for ; Fri, 29 May 2026 08:08:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780067315; x=1780672115; 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=NsWUFw3C//DyVpAd+DrRqJ7N44+Z3glyMOS0MZwC4vY=; b=oUCzvPF5D+myYR86G2BjCm78NOQYpRyKvzs4Q90x6pwDO7UbGxsSMbtFqN8eGD4NNi P2Lt9PJtDzVwd61bYQmdV9KO3v1h0G6jL+T4os4C/tmpylK5PjPPvIVJVNAzTY1kE4DE VYF/bD2khyEtJTCiSzvpQQl/OgiZKjMKFec7ATVBK9OvHdpAeKp0q36CM44qqRLjWqi9 J8JoLaGq0rbw6gedoW6+vGqA59nhIE3jBdiS3VNfhtAxMO+qkdYR5Rvfp293M+X13bPj +1pXoLTtxwNhkHdJI5hhR+ZOnp3ZlwiXdW7jthkBR82rBtbJORIwLFBkfSiVtsThTdRa IL5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780067315; x=1780672115; 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=NsWUFw3C//DyVpAd+DrRqJ7N44+Z3glyMOS0MZwC4vY=; b=jUp287koGYxCME1GEBIkXODZKsz1bvj9O/gCymhRtNbD7IFx00F2PbAyHw88pbmziN iTNzpFuG98yYKQlGLGT60dYKNXoN/+SmLb9zbN7iAfUCbsADi6h5hnQN0MRLNjflzm68 oR8Vca94O3iappbJ9VO80r8RmMLA6u8BVlj3yLfGLpopAuhcZcDIrz4blnu5frCMm5Uv t1718HK1F7Itb2DvzMg7AIMAtDomfgvvhThO29b+89q+lAhUHCv5euXxiFI1//lePh2T V6DGrsEJTcVozJQzW/e2RkJRu8XiY72o4umJAYvBzCKrACjDds3aO1viEilKnrPN0Do8 leuQ== X-Forwarded-Encrypted: i=1; AFNElJ9NEsMsoRj2UNpwQAAppnMCIedfNXfKyTgOWBzuWxvH8ruIT8J/rpswCykfoLKHTVlViec0IOAGtD17CMo=@vger.kernel.org X-Gm-Message-State: AOJu0YwsSV4dJLX9l26KArkWgcwQ82+fucJmJoNKHkcHaI4iw/IEq+gg 9bojj4FgMgFCguk1vlCbEQYEgNV6SO7eBOgWKdtxzcsF+BzAaoG9aCLahXth7NLgbLi+Z1DCO03 oo42CJw== X-Received: from ploo20.prod.google.com ([2002:a17:902:e014:b0:2ba:41dd:4a8e]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:2bce:b0:2b4:5f96:184d with SMTP id d9443c01a7336-2bf3679ebb8mr2933525ad.5.1780067315192; Fri, 29 May 2026 08:08:35 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 08:08:33 -0700 In-Reply-To: <20260529144435.704127-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: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529150833.715042-1-seanjc@google.com> Subject: [PATCH v4 46/47] x86/kvmclock: Plumb in AP-online and BSP-resume to kvmlock, for documentation From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H . Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , 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. 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 fd1c417b4f9b..2ed4bf13e3ed 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 cd65ad328637..d122912b8856 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -129,7 +129,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 @@ -153,13 +153,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 /* @@ -360,7 +381,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.54.0.823.g6e5bcc1fc9-goog From nobody Sat May 30 11:15:07 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=1780067338; cv=none; d=zohomail.com; s=zohoarc; b=K3aFfwAtc8KB6vwq+k1x5Lah9L7ztJCSq3bFa8FnM29cWs8YbRBRPJVcdJWGCh4+Ku4/Ye5aK4wvVPKNWxtlSpVbvvZtNwXlVJwRJgzdO9/tbSfGozUKw8JdTrfha8DZ3FK31/tx5p6Hg4cg8CvxAtmhyMFpf5I+6NKJXDtNsUQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780067338; 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=79xm+AEEzsSDw8ktlax8YEYwGg5Kvc01O7CLcLHBYus=; b=equHHfQWpbqttCiqw1g/yHipx5iP3pTX8UDPisEhXoc7O6BYBkjwJqklPg6OYMDYcdjJc4vGpeOYv0dxqY7xaHZpIvt0A0Ayyx7spXLOi58VnGAf/LHDfGtFnwR47PcolY7E+naEWw5jxMs65xxVWOh+rZmVFu/ZQhc0ywqrtG8= 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 1780067338675143.27104879958813; Fri, 29 May 2026 08:08:58 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1322454.1588735 (Exim 4.92) (envelope-from ) id 1wSypG-0007d9-Jl; Fri, 29 May 2026 15:08:42 +0000 Received: by outflank-mailman (output) from mailman id 1322454.1588735; Fri, 29 May 2026 15:08:42 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wSypG-0007d2-GL; Fri, 29 May 2026 15:08:42 +0000 Received: by outflank-mailman (input) for mailman id 1322454; Fri, 29 May 2026 15:08:40 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from <39asZagYKCQw4qmzvos00sxq.o0y9qz-pq7qxxu454.9qz130vqo5.03s@flex--seanjc.bounces.google.com>) id 1wSypE-0007Zz-Id for xen-devel@lists.xenproject.org; Fri, 29 May 2026 15:08:40 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wSypD-002v1U-Vn for xen-devel@lists.xenproject.org; Fri, 29 May 2026 17:08:39 +0200 Received: from [10.42.69.3] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from <39asZagYKCQw4qmzvos00sxq.o0y9qz-pq7qxxu454.9qz130vqo5.03s@flex--seanjc.bounces.google.com>) id 6a19abee-e002-0a2a0a5209dd-0a2a4503dac2-14 for ; Fri, 29 May 2026 17:08:39 +0200 Received: from [209.85.216.74] (helo=mail-pj1-f74.google.com) by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from <39asZagYKCQw4qmzvos00sxq.o0y9qz-pq7qxxu454.9qz130vqo5.03s@flex--seanjc.bounces.google.com>) id 6a19abf6-672d-0a2a45030019-d155d84ab121-3 for ; Fri, 29 May 2026 17:08:39 +0200 Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-368f2d76b04so13502820a91.3 for ; Fri, 29 May 2026 08:08: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="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=1780067318; x=1780672118; 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=79xm+AEEzsSDw8ktlax8YEYwGg5Kvc01O7CLcLHBYus=; b=IqKfUXn7Z0/iL6lpQJRPgFBoWZ42pJOAF3cxVuTS7H5qQfckj9JbDkrn1njzF60PNY HhX53FXbeXdgK7JIAvq23WuexpWvCAO8rPICenDgKFreW7puoo5nEnC6+w0mfL14XR5V v9yQVaYGocwy/ZAIcJu+BIpMGTlitLlIw22IflL3OdAvAF1kQlPzo7b9SMG8JtgkMsPj h832BghMhsgVpGgck6UeubB74Fhff7rLxWJt4KozMYICpUFU8WEqfDmKUxSGlWGbI6Fs vWb0MZOQAuVaMXSKdOco+66pK5sJoOlZ153IO0LwDMeFBVYLVi2hsogejd9jnirgwU/t F07A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780067318; x=1780672118; 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=79xm+AEEzsSDw8ktlax8YEYwGg5Kvc01O7CLcLHBYus=; b=lGBLpNrlp0QjZHwXzLnkU4USvh5x14JoG5OzXjy0XBLJyrmyzcgHMH0sLUHB8k+Pfd ZF+/wUL1b+JcSA50/RyuYBAeKwZhpwgeEXUHwouZ+AZ4ghvyB8TBR6+5HC3J4YkU1TSd 3ujfma3iFk1g6YvpNPJvwCqahwWkU58ygJzpyDDX2IPlJPPqJoF2DPjfMkAUcyu+qkg+ EmgJSspdGLwXBWUVSwzV3waaoOseYDCqQcN6yi7FAzbil2tKvTYf32/tWj586KbUhoVx Kjl13fAfgYfYrIMRfyAhlEKSGx+ZErT2JoU+nono0JJ3zf0XJb/fvb4LfT5nBW7ojK1S KZyA== X-Forwarded-Encrypted: i=1; AFNElJ/OrRQmDbVJ4+Mr8/EGyN3Y1W/Li2xspv2MJOH5B5dwJldn0z2SU+V9eVvH7VR+FZvcDF4ws/jSPDk=@lists.xenproject.org X-Gm-Message-State: AOJu0YxOS8T5dv64Uj6nOiBePOrH8s6CDiN5HEY26K1IwVd3Pb/YF+lI JyQrna9DlyuJa3SZwjL+aNk2dnlIlU3FVZsjOn9oKbjWOILJ24CeQQgezi9ks5geI4wY5aUnmuM M+3AEtg== X-Received: from pgh1.prod.google.com ([2002:a05:6a02:4e01:b0:c79:8102:80bb]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:184b:b0:366:479e:63a5 with SMTP id 98e67ed59e1d1-36bbcc160f0mr4139147a91.2.1780067317529; Fri, 29 May 2026 08:08:37 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 May 2026 08:08:35 -0700 In-Reply-To: <20260529144435.704127-1-seanjc@google.com> Mime-Version: 1.0 References: <20260529144435.704127-1-seanjc@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529150835.715093-1-seanjc@google.com> Subject: [PATCH v4 47/47] x86/paravirt: Move using_native_sched_clock() stub into timer.h From: Sean Christopherson To: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , 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: "H . Peter Anvin" , Rick Edgecombe , Vitaly Kuznetsov , Broadcom internal kernel review list , Boris Ostrovsky , Stephen Boyd , 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, David Woodhouse , Tom Lendacky , Nikunj A Dadhania , David Woodhouse , Michael Kelley , Thomas Gleixner X-purgate-ID: tlsNG-33051d/1780067319-41396938-FB303E5A/0/0 X-purgate-type: clean X-purgate-size: 1710 X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1780067341425154100 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 036916953f4a..159d7d060204 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.54.0.823.g6e5bcc1fc9-goog