x86/sev: Mark the TSC in a secure TSC guest as reliable
authorNikunj A Dadhania <nikunj@amd.com>
Mon, 6 Jan 2025 12:46:29 +0000 (18:16 +0530)
committerBorislav Petkov (AMD) <bp@alien8.de>
Tue, 7 Jan 2025 20:26:20 +0000 (21:26 +0100)
In SNP guest environment with Secure TSC enabled, unlike other clock sources
(such as HPET, ACPI timer, APIC, etc), the RDTSC instruction is handled
without causing a VM exit, resulting in minimal overhead and jitters. Even
when the host CPU's TSC is tampered with, the Secure TSC enabled guest keeps
on ticking forward. Hence, mark Secure TSC as the only reliable clock source,
bypassing unstable calibration.

  [ bp: Massage. ]

Signed-off-by: Nikunj A Dadhania <nikunj@amd.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com>
Tested-by: Peter Gonda <pgonda@google.com>
Link: https://lore.kernel.org/r/20250106124633.1418972-10-nikunj@amd.com
arch/x86/mm/mem_encrypt_amd.c

index 774f9677458f276988fac7323a6b405cfd798024..b56c5c073003d6e72692657603692a300ac58191 100644 (file)
@@ -541,6 +541,9 @@ void __init sme_early_init(void)
         * kernel mapped.
         */
        snp_update_svsm_ca();
+
+       if (sev_status & MSR_AMD64_SNP_SECURE_TSC)
+               setup_force_cpu_cap(X86_FEATURE_TSC_RELIABLE);
 }
 
 void __init mem_encrypt_free_decrypted_mem(void)