Messages in this thread | | | Date | Mon, 17 Jun 2019 09:52:14 +0200 | From | Borislav Petkov <> | Subject | Re: [PATCH 1/3] x86/resctrl: Get max rmid and occupancy scale directly from CPUID instead of cpuinfo_x86 |
| |
On Sun, Jun 16, 2019 at 08:18:09PM -0700, Fenghua Yu wrote: > diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c > index 2c57fffebf9b..f080be35da41 100644 > --- a/arch/x86/kernel/cpu/common.c > +++ b/arch/x86/kernel/cpu/common.c > @@ -801,6 +801,31 @@ static void init_speculation_control(struct cpuinfo_x86 *c) > } > } > > +static void get_cqm_info(struct cpuinfo_x86 *c) > +{ > + if (cpu_has(c, X86_FEATURE_CQM_LLC)) { > + u32 eax, ebx, ecx, edx; > + > + /* QoS sub-leaf, EAX=0Fh, ECX=0 */ > + cpuid_count(0x0000000F, 0, &eax, &ebx, &ecx, &edx); > + /* will be overridden if occupancy monitoring exists */ > + c->x86_cache_max_rmid = ebx; > + > + if (cpu_has(c, X86_FEATURE_CQM_OCCUP_LLC) || > + cpu_has(c, X86_FEATURE_CQM_MBM_TOTAL) || > + cpu_has(c, X86_FEATURE_CQM_MBM_LOCAL)) { > + /* QoS sub-leaf, EAX=0Fh, ECX=1 */ > + cpuid_count(0x0000000F, 1, &eax, &ebx, &ecx, &edx); > + > + c->x86_cache_max_rmid = ecx; > + c->x86_cache_occ_scale = ebx; > + } > + } else { > + c->x86_cache_max_rmid = -1; > + c->x86_cache_occ_scale = -1; > + } > +} > + > void get_cpu_cap(struct cpuinfo_x86 *c) > { > u32 eax, ebx, ecx, edx; > @@ -832,33 +857,6 @@ void get_cpu_cap(struct cpuinfo_x86 *c) > c->x86_capability[CPUID_D_1_EAX] = eax; > } > > - /* Additional Intel-defined flags: level 0x0000000F */ > - if (c->cpuid_level >= 0x0000000F) { > - > - /* QoS sub-leaf, EAX=0Fh, ECX=0 */ > - cpuid_count(0x0000000F, 0, &eax, &ebx, &ecx, &edx); > - c->x86_capability[CPUID_F_0_EDX] = edx; > - > - if (cpu_has(c, X86_FEATURE_CQM_LLC)) { > - /* will be overridden if occupancy monitoring exists */ > - c->x86_cache_max_rmid = ebx; > - > - /* QoS sub-leaf, EAX=0Fh, ECX=1 */ > - cpuid_count(0x0000000F, 1, &eax, &ebx, &ecx, &edx); > - c->x86_capability[CPUID_F_1_EDX] = edx; > - > - if ((cpu_has(c, X86_FEATURE_CQM_OCCUP_LLC)) || > - ((cpu_has(c, X86_FEATURE_CQM_MBM_TOTAL)) || > - (cpu_has(c, X86_FEATURE_CQM_MBM_LOCAL)))) { > - c->x86_cache_max_rmid = ecx; > - c->x86_cache_occ_scale = ebx; > - } > - } else { > - c->x86_cache_max_rmid = -1; > - c->x86_cache_occ_scale = -1; > - } > - }
Why are you doing this carving out into a separate function since you're keeping the cpuinfo_x86 members?
-- Regards/Gruss, Boris.
Good mailing practices for 400: avoid top-posting and trim the reply.
| |