[v5,12/14] x86/kvmclock: Skip kvmclock when Secure TSC is available

Message ID 20231030063652.68675-13-nikunj@amd.com
State New
Headers
Series Add Secure TSC support for SNP guests |

Commit Message

Nikunj A. Dadhania Oct. 30, 2023, 6:36 a.m. UTC
  For AMD SNP guests having Secure TSC enabled, skip using the kvmclock.
The guest kernel will fallback and use Secure TSC based clocksource.

Signed-off-by: Nikunj A Dadhania <nikunj@amd.com>
---
 arch/x86/kernel/kvmclock.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Tom Lendacky Oct. 30, 2023, 9 p.m. UTC | #1
On 10/30/23 01:36, Nikunj A Dadhania wrote:
> For AMD SNP guests having Secure TSC enabled, skip using the kvmclock.
> The guest kernel will fallback and use Secure TSC based clocksource.
> 
> Signed-off-by: Nikunj A Dadhania <nikunj@amd.com>
> ---
>   arch/x86/kernel/kvmclock.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
> index fb8f52149be9..779e7311fa6f 100644
> --- a/arch/x86/kernel/kvmclock.c
> +++ b/arch/x86/kernel/kvmclock.c
> @@ -288,7 +288,7 @@ void __init kvmclock_init(void)
>   {
>   	u8 flags;
>   
> -	if (!kvm_para_available() || !kvmclock)
> +	if (!kvm_para_available() || !kvmclock || cc_platform_has(CC_ATTR_GUEST_SECURE_TSC))

And is setting X86_FEATURE_TSC_RELIABLE, as Dave Hansen suggests, enough
to prevent usage of kvmclock?

There was a discussion here:
  https://lore.kernel.org/lkml/20230808162320.27297-1-kirill.shutemov@linux.intel.com/

Thanks,
Tom

>   		return;
>   
>   	if (kvm_para_has_feature(KVM_FEATURE_CLOCKSOURCE2)) {
  
Nikunj A. Dadhania Nov. 2, 2023, 5:39 a.m. UTC | #2
On 10/31/2023 2:30 AM, Tom Lendacky wrote:
> On 10/30/23 01:36, Nikunj A Dadhania wrote:
>> For AMD SNP guests having Secure TSC enabled, skip using the kvmclock.
>> The guest kernel will fallback and use Secure TSC based clocksource.
>>
>> Signed-off-by: Nikunj A Dadhania <nikunj@amd.com>
>> ---
>>   arch/x86/kernel/kvmclock.c | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
>> index fb8f52149be9..779e7311fa6f 100644
>> --- a/arch/x86/kernel/kvmclock.c
>> +++ b/arch/x86/kernel/kvmclock.c
>> @@ -288,7 +288,7 @@ void __init kvmclock_init(void)
>>   {
>>       u8 flags;
>>   -    if (!kvm_para_available() || !kvmclock)
>> +    if (!kvm_para_available() || !kvmclock || cc_platform_has(CC_ATTR_GUEST_SECURE_TSC))
> 
> And is setting X86_FEATURE_TSC_RELIABLE, as Dave Hansen suggests, enough
> to prevent usage of kvmclock?

No that wasn't sufficient. kvmclock was always selected before SecureTSC even when X86_FEATURE_TSC_RELIABLE was selected.

> 
> There was a discussion here:
>  https://lore.kernel.org/lkml/20230808162320.27297-1-kirill.shutemov@linux.intel.com/
> 
> Thanks,
> Tom

Regards
Nikunj
  

Patch

diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
index fb8f52149be9..779e7311fa6f 100644
--- a/arch/x86/kernel/kvmclock.c
+++ b/arch/x86/kernel/kvmclock.c
@@ -288,7 +288,7 @@  void __init kvmclock_init(void)
 {
 	u8 flags;
 
-	if (!kvm_para_available() || !kvmclock)
+	if (!kvm_para_available() || !kvmclock || cc_platform_has(CC_ATTR_GUEST_SECURE_TSC))
 		return;
 
 	if (kvm_para_has_feature(KVM_FEATURE_CLOCKSOURCE2)) {