> From: Michael Kelley <mhklinux@xxxxxxxxxxx> > Sent: Thursday, June 20, 2024 2:19 PM > To: Dexuan Cui <decui@xxxxxxxxxxxxx>; KY Srinivasan > [...] > > --- a/arch/x86/kernel/cpu/mshyperv.c > > +++ b/arch/x86/kernel/cpu/mshyperv.c > > @@ -449,9 +449,13 @@ static void __init ms_hyperv_init_platform(void) > > ms_hyperv.hints &= > ~HV_X64_APIC_ACCESS_RECOMMENDED; > > > > if (!ms_hyperv.paravisor_present) { > > - /* To be supported: more work is required. > */ > > + /* Use Invariant TSC as a better > clocksource. */ > > I got confused by this comment, partly because I've forgotten the > meaning of the ms_hyperv.feature flags. :-( Perhaps you could be > more explicit in the comment and say "Mark the Hyper-V TSC page > feature as disabled in a TDX VM so that the Invariant TSC, which is > a better clocksource anyway, is used instead." > > > ms_hyperv.features &= > ~HV_MSR_REFERENCE_TSC_AVAILABLE; > > > > + /* Use the Ref Counter in case Invariant > TSC is unavailable. */ > > + if (!(ms_hyperv.features & > HV_ACCESS_TSC_INVARIANT)) > > + pr_warn("Hyper-V: Invariant TSC is > unavailable\n"); > > The above comment was even more confusing, because the code block > doesn't do anything except print a message. The code doesn't force > the use of the Ref Counter. I'd suggest something like: "The Invariant > TSC is expected to be available, but if not, print a warning message. > The slower Hyper-V MSR-based Ref Counter should end up being > the clocksource." > > Michael Thanks for the good "comments"! :-) I'm going to post v2 with the change below. diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c index e0fd57a8ba840..954b7cbfa2f02 100644 --- a/arch/x86/kernel/cpu/mshyperv.c +++ b/arch/x86/kernel/cpu/mshyperv.c @@ -449,9 +449,23 @@ static void __init ms_hyperv_init_platform(void) ms_hyperv.hints &= ~HV_X64_APIC_ACCESS_RECOMMENDED; if (!ms_hyperv.paravisor_present) { - /* To be supported: more work is required. */ + /* + * Mark the Hyper-V TSC page feature as disabled + * in a TDX VM without paravisor so that the + * Invariant TSC, which is a better clocksource + * anyway, is used instead. + */ ms_hyperv.features &= ~HV_MSR_REFERENCE_TSC_AVAILABLE; + /* + * The Invariant TSC is expected to be available + * in a TDX VM without paravisor, but if not, + * print a warning message. The slower Hyper-V MSR-based + * Ref Counter should end up being the clocksource. + */ + if (!(ms_hyperv.features & HV_ACCESS_TSC_INVARIANT)) + pr_warn("Hyper-V: Invariant TSC is unavailable\n"); + /* HV_MSR_CRASH_CTL is unsupported. */ ms_hyperv.misc_features &= ~HV_FEATURE_GUEST_CRASH_MSR_AVAILABLE;