[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v4 12/26] x86/cpu: Move set_cpumask() calls into c_early_init()



On Wed, Mar 23, 2016 at 04:36:15PM +0000, Andrew Cooper wrote:
> Before c/s 44e24f8567 "x86: don't call generic_identify() redundantly", the
> commandline-provided masks would take effect in Xen's view of the features.

s/the// ?

Or perhaps s/the/cpuid// ?
> 
> As the masks got applied after the query for features, the redundant call to
> generic_identify() would clobber the pre-masking feature information with the
> post-masking information.
> 
> Move the set_cpumask() calls into c_early_init() so their effects take place

s/their effects take/it's effect takes/ 

> before the main query for features in generic_identify().

.. and unifying all c_early_init() functions behavior?

> 
> The cpuid_mask_* command line parameters now limit the entire system, a
> feature XenServer was relying on for testing purposes.  Subsequent changes

.. what are those changes? Could you mention the title of the patch perhaps?

> will cause the mask MSRs to be context switched per-domain, removing the need
> to use the command line parameters for heterogeneous levelling purposes.
> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>

Besides those little nitpicks:

Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
> ---
> CC: Jan Beulich <JBeulich@xxxxxxxx>
> ---
>  xen/arch/x86/cpu/amd.c   |  8 ++++++--
>  xen/arch/x86/cpu/intel.c | 34 +++++++++++++++++-----------------
>  2 files changed, 23 insertions(+), 19 deletions(-)
> 
> diff --git a/xen/arch/x86/cpu/amd.c b/xen/arch/x86/cpu/amd.c
> index 47a38c6..5516777 100644
> --- a/xen/arch/x86/cpu/amd.c
> +++ b/xen/arch/x86/cpu/amd.c
> @@ -407,6 +407,11 @@ static void amd_get_topology(struct cpuinfo_x86 *c)
>                                                           c->cpu_core_id);
>  }
>  
> +static void early_init_amd(struct cpuinfo_x86 *c)
> +{
> +     set_cpuidmask(c);
> +}
> +
>  static void init_amd(struct cpuinfo_x86 *c)
>  {
>       u32 l, h;
> @@ -595,14 +600,13 @@ static void init_amd(struct cpuinfo_x86 *c)
>       if ((smp_processor_id() == 1) && !cpu_has(c, X86_FEATURE_ITSC))
>               disable_c1_ramping();
>  
> -     set_cpuidmask(c);
> -
>       check_syscfg_dram_mod_en();
>  }
>  
>  static const struct cpu_dev amd_cpu_dev = {
>       .c_vendor       = "AMD",
>       .c_ident        = { "AuthenticAMD" },
> +     .c_early_init   = early_init_amd,
>       .c_init         = init_amd,
>  };
>  
> diff --git a/xen/arch/x86/cpu/intel.c b/xen/arch/x86/cpu/intel.c
> index bdf89f6..ad22375 100644
> --- a/xen/arch/x86/cpu/intel.c
> +++ b/xen/arch/x86/cpu/intel.c
> @@ -189,6 +189,23 @@ static void early_init_intel(struct cpuinfo_x86 *c)
>       if (boot_cpu_data.x86 == 0xF && boot_cpu_data.x86_model == 3 &&
>           (boot_cpu_data.x86_mask == 3 || boot_cpu_data.x86_mask == 4))
>               paddr_bits = 36;
> +
> +     if (c == &boot_cpu_data && c->x86 == 6) {
> +             if (probe_intel_cpuid_faulting())
> +                     __set_bit(X86_FEATURE_CPUID_FAULTING,
> +                               c->x86_capability);
> +     } else if (boot_cpu_has(X86_FEATURE_CPUID_FAULTING)) {
> +             BUG_ON(!probe_intel_cpuid_faulting());
> +             __set_bit(X86_FEATURE_CPUID_FAULTING, c->x86_capability);
> +     }
> +
> +     if (!cpu_has_cpuid_faulting)
> +             set_cpuidmask(c);
> +     else if ((c == &boot_cpu_data) &&
> +              (~(opt_cpuid_mask_ecx & opt_cpuid_mask_edx &
> +                 opt_cpuid_mask_ext_ecx & opt_cpuid_mask_ext_edx &
> +                 opt_cpuid_mask_xsave_eax)))
> +             printk("No CPUID feature masking support available\n");
>  }
>  
>  /*
> @@ -258,23 +275,6 @@ static void init_intel(struct cpuinfo_x86 *c)
>               detect_ht(c);
>       }
>  
> -     if (c == &boot_cpu_data && c->x86 == 6) {
> -             if (probe_intel_cpuid_faulting())
> -                     __set_bit(X86_FEATURE_CPUID_FAULTING,
> -                               c->x86_capability);
> -     } else if (boot_cpu_has(X86_FEATURE_CPUID_FAULTING)) {
> -             BUG_ON(!probe_intel_cpuid_faulting());
> -             __set_bit(X86_FEATURE_CPUID_FAULTING, c->x86_capability);
> -     }
> -
> -     if (!cpu_has_cpuid_faulting)
> -             set_cpuidmask(c);
> -     else if ((c == &boot_cpu_data) &&
> -              (~(opt_cpuid_mask_ecx & opt_cpuid_mask_edx &
> -                 opt_cpuid_mask_ext_ecx & opt_cpuid_mask_ext_edx &
> -                 opt_cpuid_mask_xsave_eax)))
> -             printk("No CPUID feature masking support available\n");
> -
>       /* Work around errata */
>       Intel_errata_workarounds(c);
>  
> -- 
> 2.1.4
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.