FAILED: patch "[PATCH] clocksource: hyper-v: Use lapic timer in a TDX VM without" failed to apply to 6.6-stable tree
[email protected]
maintainerThe patch below does not apply to the 6.6-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.6.y
git checkout FETCH_HEAD
git cherry-pick -x 7f828d5fff7d24752e1ecf6bebb6617a81f97b93
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2024091354-stock-suspend-e1ee@gregkh' --subject-prefix 'PATCH 6.6.y' HEAD^..
Possible dependencies:
7f828d5fff7d ("clocksource: hyper-v: Use lapic timer in a TDX VM without paravisor") b967df629351 ("hyperv-tlfs: Rename some HV_REGISTER_* defines for consistency") 0e3f7d120086 ("hyperv-tlfs: Change prefix of generic HV_REGISTER_* MSRs to HV_MSR_*")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 7f828d5fff7d24752e1ecf6bebb6617a81f97b93 Mon Sep 17 00:00:00 2001
From: Dexuan Cui <[email protected]>
Date: Thu, 20 Jun 2024 23:16:14 -0700
Subject: [PATCH] clocksource: hyper-v: Use lapic timer in a TDX VM without
paravisor
In a TDX VM without paravisor, currently the default timer is the Hyper-V timer, which depends on the slow VM Reference Counter MSR: the Hyper-V TSC page is not enabled in such a VM because the VM uses Invariant TSC as a better clocksource and it's challenging to mark the Hyper-V TSC page shared in very early boot.
Lower the rating of the Hyper-V timer so the local APIC timer becomes the the default timer in such a VM, and print a warning in case Invariant TSC is unavailable in such a VM. This change should cause no perceivable performance difference.
Message-ID: <[email protected]>
arch/x86/kernel/cpu/mshyperv.c +15 -1
@@ -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 ;
drivers/clocksource/hyperv_timer.c +15 -1
@@ -137,7 +137,21 @@ static int hv_stimer_init(unsigned int cpu) ce->name ="Hyper-V clockevent" ; ce->features =CLOCK_EVT_FEAT_ONESHOT ; ce->cpumask =cpumask_of (cpu); - ce->rating =1000 ; + +/* +* Lower the rating of the Hyper-V timer in a TDX VM without paravisor, +* so the local APIC timer (lapic_clockevent) is the default timer in +* such a VM. The Hyper-V timer is not preferred in such a VM because +* it depends on the slow VM Reference Counter MSR (the Hyper-V TSC +* page is not enbled in such a VM because the VM uses Invariant TSC +* as a better clocksource and it's challenging to mark the Hyper-V +* TSC page shared in very early boot). +*/ +if (!ms_hyperv.paravisor_present &&hv_isolation_type_tdx ()) + ce->rating =90 ; +else + ce->rating =1000 ; + ce->set_state_shutdown = hv_ce_shutdown; ce->set_state_oneshot = hv_ce_set_oneshot; ce->set_next_event = hv_ce_set_next_event;