|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 2/6] x86: replace APERFMPERF synthetic feature bit
Le 14/01/2026 à 14:45, Jan Beulich a écrit : > Use the respective host CPU policy bit instead. This has the (tolerable, > as we generally assume symmetry anyway) effect of using the BSP's > (unleveled) setting, rather than the result of leveling (as is done by > identify_cpu() on boot_cpu_data, rendering the variable name somewhat > misleading). > > Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> > Reviewed-by: Jason Andryuk <jason.andryuk@xxxxxxx> > --- > The leveling of boot_cpu_data is problematic anyway, as that way features > can in principle disappear post-boot (as CPUs are being brought online; > just that we don't think anymore that we really support physical CPU > hotplug). I think in the vast majority of cases, hotplugged CPUs are of same model or very similar; so shouldn't diverge too much in term of features. Otherwise, it's pretty much impossible to guarantee anything unless we have per-socket cpu datas. > --- > v3: Re-base over naming changes. > v2: Extend description. > > --- a/xen/arch/x86/acpi/cpufreq/cpufreq.c > +++ b/xen/arch/x86/acpi/cpufreq/cpufreq.c > @@ -80,7 +80,7 @@ unsigned int get_measured_perf(unsigned > return 0; > > policy = per_cpu(cpufreq_cpu_policy, cpu); > - if ( !policy || !cpu_has_aperfmperf ) > + if ( !policy || !cpu_has_hw_feedback_cap ) > return 0; > > switch (flag) > --- a/xen/arch/x86/cpu/common.c > +++ b/xen/arch/x86/cpu/common.c > @@ -523,10 +523,6 @@ static void generic_identify(struct cpui > if ( cpu_has(c, X86_FEATURE_CLFLUSH) ) > c->x86_clflush_size = ((ebx >> 8) & 0xff) * 8; > > - if ( (c->cpuid_level >= CPUID_PM_LEAF) && > - (cpuid_ecx(CPUID_PM_LEAF) & CPUID6_ECX_APERFMPERF_CAPABILITY) ) > - __set_bit(X86_FEATURE_APERFMPERF, c->x86_capability); > - > /* AMD-defined flags: level 0x80000001 */ > if (c->extended_cpuid_level >= 0x80000001) > cpuid(0x80000001, &tmp, &tmp, > --- a/xen/arch/x86/include/asm/cpufeature.h > +++ b/xen/arch/x86/include/asm/cpufeature.h > @@ -11,7 +11,9 @@ > #include <xen/macros.h> > > #ifndef __ASSEMBLER__ > +#include <asm/cpu-policy.h> > #include <asm/cpuid.h> > +#include <xen/lib/x86/cpu-policy.h> > #else > #include <asm/cpufeatureset.h> > #endif > @@ -121,7 +123,6 @@ static inline bool boot_cpu_has(unsigned > #define CPUID6_EAX_HDC BIT(13, U) > #define CPUID6_EAX_HWP_PECI BIT(16, U) > #define CPUID6_EAX_HW_FEEDBACK BIT(19, U) > -#define CPUID6_ECX_APERFMPERF_CAPABILITY BIT(0, U) > > /* CPUID level 0x00000001.edx */ > #define cpu_has_fpu 1 > @@ -175,6 +176,9 @@ static inline bool boot_cpu_has(unsigned > #define cpu_has_fma4 boot_cpu_has(X86_FEATURE_FMA4) > #define cpu_has_tbm boot_cpu_has(X86_FEATURE_TBM) > > +/* CPUID level 0x00000006.ecx */ > +#define cpu_has_hw_feedback_cap host_cpu_policy.basic.hw_feedback_cap > + > /* CPUID level 0x0000000D:1.eax */ > #define cpu_has_xsaveopt boot_cpu_has(X86_FEATURE_XSAVEOPT) > #define cpu_has_xsavec boot_cpu_has(X86_FEATURE_XSAVEC) > @@ -292,7 +296,6 @@ static inline bool boot_cpu_has(unsigned > /* Synthesized. */ > #define cpu_has_arch_perfmon boot_cpu_has(X86_FEATURE_ARCH_PERFMON) > #define cpu_has_cpuid_faulting boot_cpu_has(X86_FEATURE_CPUID_FAULTING) > -#define cpu_has_aperfmperf boot_cpu_has(X86_FEATURE_APERFMPERF) > #define cpu_has_xen_lbr boot_cpu_has(X86_FEATURE_XEN_LBR) > #define cpu_has_xen_shstk (IS_ENABLED(CONFIG_XEN_SHSTK) && \ > boot_cpu_has(X86_FEATURE_XEN_SHSTK)) > --- a/xen/arch/x86/include/asm/cpufeatures.h > +++ b/xen/arch/x86/include/asm/cpufeatures.h > @@ -19,7 +19,7 @@ XEN_CPUFEATURE(TSC_RELIABLE, X86_SY > XEN_CPUFEATURE(XTOPOLOGY, X86_SYNTH( 5)) /* cpu topology enum > extensions */ > XEN_CPUFEATURE(CPUID_FAULTING, X86_SYNTH( 6)) /* cpuid faulting */ > XEN_CPUFEATURE(XEN_FRED, X86_SYNTH( 7)) /* Xen uses FRED */ > -XEN_CPUFEATURE(APERFMPERF, X86_SYNTH( 8)) /* APERFMPERF */ > +/* Bit 8 unused */ > XEN_CPUFEATURE(MFENCE_RDTSC, X86_SYNTH( 9)) /* MFENCE synchronizes > RDTSC */ > XEN_CPUFEATURE(XEN_SMEP, X86_SYNTH(10)) /* SMEP gets used by Xen > itself */ > XEN_CPUFEATURE(XEN_SMAP, X86_SYNTH(11)) /* SMAP gets used by Xen > itself */ > > -- Teddy Astie | Vates XCP-ng Developer XCP-ng & Xen Orchestra - Vates solutions web: https://vates.tech
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |