VMX: don't unconditionally set the tsc_scaling.setup hook
authorJan Beulich <jbeulich@suse.com>
Thu, 19 Jul 2018 07:35:43 +0000 (09:35 +0200)
committerJan Beulich <jbeulich@suse.com>
Thu, 19 Jul 2018 07:35:43 +0000 (09:35 +0200)
Instead of checking hvm_tsc_scaling_supported inside the hook function,
install the hook only when setting state such that said predicate
becomes true.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Kevin Tian <kevin.tian@intel.com>
xen/arch/x86/hvm/vmx/vmx.c

index 12e0ee5c4e67c86285e88992f6d449c5c35e3bf1..df3408bdde2ffd11ddfabfa4a0b1df709c088118 100644 (file)
@@ -1282,7 +1282,7 @@ static void vmx_handle_cd(struct vcpu *v, unsigned long value)
 
 static void vmx_setup_tsc_scaling(struct vcpu *v)
 {
-    if ( !hvm_tsc_scaling_supported || v->domain->arch.vtsc )
+    if ( v->domain->arch.vtsc )
         return;
 
     vmx_vmcs_enter(v);
@@ -2345,7 +2345,6 @@ static struct hvm_function_table __initdata vmx_function_table = {
     .altp2m_vcpu_emulate_vmfunc = vmx_vcpu_emulate_vmfunc,
     .tsc_scaling = {
         .max_ratio = VMX_TSC_MULTIPLIER_MAX,
-        .setup     = vmx_setup_tsc_scaling,
     },
 };
 
@@ -2485,7 +2484,10 @@ const struct hvm_function_table * __init start_vmx(void)
     }
 
     if ( cpu_has_vmx_tsc_scaling )
+    {
         vmx_function_table.tsc_scaling.ratio_frac_bits = 48;
+        vmx_function_table.tsc_scaling.setup = vmx_setup_tsc_scaling;
+    }
 
     if ( cpu_has_mpx && cpu_has_vmx_mpx )
     {