If CPU frequency governors can change the TSC frequency, use
the highest possible frequency as the reference.

Signed-off-by: Zachary Amsden <[email protected]>
---
 arch/x86/kvm/x86.c |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 520ea6a..3c4266f 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -3701,7 +3701,15 @@ static void kvm_timer_init(void)
         * can change at any time.
         */
        register_cpu_notifier(&kvm_x86_cpu_notifier);
+       ref_tsc_khz = tsc_khz;
        if (!boot_cpu_has(X86_FEATURE_CONSTANT_TSC)) {
+#ifdef CONFIG_CPU_FREQ
+               struct cpufreq_policy policy;
+
+               cpufreq_get_policy(&policy, get_cpu());
+               ref_tsc_khz = policy.cpuinfo.max_freq;
+               put_cpu();
+#endif
                cpufreq_register_notifier(&kvmclock_cpufreq_notifier_block,
                                          CPUFREQ_TRANSITION_NOTIFIER);
                for_each_online_cpu(cpu) {
@@ -3718,7 +3726,6 @@ static void kvm_timer_init(void)
                        per_cpu(cpu_tsc_khz, cpu) = tsc_khz;
        }
        tsc_base_cpu = get_cpu();
-       ref_tsc_khz = per_cpu(cpu_tsc_khz, tsc_base_cpu);
        resync(NULL);
        put_cpu();
 }
-- 
1.6.5.2

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to