[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <e4b8bfa6-3029-4b47-968c-c148622c78c7@linux.intel.com>
Date: Tue, 22 Aug 2023 16:46:56 -0700
From: Kuppuswamy Sathyanarayanan
<sathyanarayanan.kuppuswamy@...ux.intel.com>
To: "Kirill A. Shutemov" <kirill.shutemov@...ux.intel.com>,
Thomas Gleixner <tglx@...utronix.de>,
Dave Hansen <dave.hansen@...el.com>,
Borislav Petkov <bp@...en8.de>,
Andy Lutomirski <luto@...nel.org>
Cc: Elena Reshetova <elena.reshetova@...el.com>,
Jun Nakajima <jun.nakajima@...el.com>, x86@...nel.org,
linux-coco@...ts.linux.dev, linux-kernel@...r.kernel.org
Subject: Re: [PATCHv2] x86/tdx: Mark TSC reliable
On 8/22/2023 4:18 PM, Kirill A. Shutemov wrote:
> In x86 virtualization environments, including TDX, RDTSC instruction is
> handled without causing a VM exit, resulting in minimal overhead and
> jitters. On the other hand, other clock sources (such as HPET, ACPI
> timer, APIC, etc.) necessitate VM exits to implement, resulting in more
> fluctuating measurements compared to TSC. Thus, those clock sources are
> not effective for calibrating TSC.
>
> In TD guests, TSC is virtualized by the TDX module, which ensures:
>
> - Virtual TSC values are consistent among all the TD’s VCPUs;
> - Monotonously incrementing for any single VCPU;
> - The frequency is determined by TD configuration. The host TSC is
> invariant on platforms where TDX is available.
>
> Reliable TSC is architectural guarantee for the TDX platform and it must
> work for any sane TDX implementation.
>
> Use TSC as the only reliable clock source in TD guests, bypassing
> unstable calibration.
>
> Signed-off-by: Kirill A. Shutemov <kirill.shutemov@...ux.intel.com>
> ---
> v2:
> - Slightly updated commit message;
> ---
Looks good to me.
Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@...ux.intel.com>
> arch/x86/coco/tdx/tdx.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/arch/x86/coco/tdx/tdx.c b/arch/x86/coco/tdx/tdx.c
> index 1d6b863c42b0..1583ec64d92e 100644
> --- a/arch/x86/coco/tdx/tdx.c
> +++ b/arch/x86/coco/tdx/tdx.c
> @@ -769,6 +769,9 @@ void __init tdx_early_init(void)
>
> setup_force_cpu_cap(X86_FEATURE_TDX_GUEST);
>
> + /* TSC is the only reliable clock in TDX guest */
> + setup_force_cpu_cap(X86_FEATURE_TSC_RELIABLE);
> +
> cc_vendor = CC_VENDOR_INTEL;
> tdx_parse_tdinfo(&cc_mask);
> cc_set_mask(cc_mask);
--
Sathyanarayanan Kuppuswamy
Linux Kernel Developer
Powered by blists - more mailing lists