]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
clocksource: hyper-v: make sure Invariant-TSC is used if it is available
authorDexuan Cui <decui@microsoft.com>
Sat, 8 Apr 2023 21:03:39 +0000 (14:03 -0700)
committerWei Liu <wei.liu@kernel.org>
Mon, 17 Apr 2023 19:19:05 +0000 (19:19 +0000)
If Hyper-V TSC page is unavailable and Invariant-TSC is available,
currently hyperv_cs_msr (rather than Invariant-TSC) is used by default.

Use Invariant-TSC by default by downgrading hyperv_cs_msr.rating in
hv_init_tsc_clocksource(), if Invariant-TSC is available.

Signed-off-by: Dexuan Cui <decui@microsoft.com>
Reviewed-by: Michael Kelley <mikelley@microsoft.com>
Link: https://lore.kernel.org/r/20230408210339.15085-1-decui@microsoft.com
Signed-off-by: Wei Liu <wei.liu@kernel.org>
drivers/clocksource/hyperv_timer.c

index f32948c8a96fa3cfa1658a42ff38829a7e1109c3..bcd9042a0c9f460a4eeece614d0b032176ccc620 100644 (file)
@@ -517,9 +517,6 @@ static bool __init hv_init_tsc_clocksource(void)
 {
        union hv_reference_tsc_msr tsc_msr;
 
-       if (!(ms_hyperv.features & HV_MSR_REFERENCE_TSC_AVAILABLE))
-               return false;
-
        /*
         * If Hyper-V offers TSC_INVARIANT, then the virtualized TSC correctly
         * handles frequency and offset changes due to live migration,
@@ -536,6 +533,9 @@ static bool __init hv_init_tsc_clocksource(void)
                hyperv_cs_msr.rating = 250;
        }
 
+       if (!(ms_hyperv.features & HV_MSR_REFERENCE_TSC_AVAILABLE))
+               return false;
+
        hv_read_reference_counter = read_hv_clock_tsc;
 
        /*