lkml.org 
[lkml]   [2020]   [Jun]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 105/265] x86/cpu: Move resctrl CPUID code to resctrl/
    Date
    From: Reinette Chatre <reinette.chatre@intel.com>

    [ Upstream commit 0118ad82c2a64ebcf15d7565ed35361407efadfa ]

    The function determining a platform's support and properties of cache
    occupancy and memory bandwidth monitoring (properties of
    X86_FEATURE_CQM_LLC) can be found among the common CPU code. After
    the feature's properties is populated in the per-CPU data the resctrl
    subsystem is the only consumer (via boot_cpu_data).

    Move the function that obtains the CPU information used by resctrl to
    the resctrl subsystem and rename it from init_cqm() to
    resctrl_cpu_detect(). The function continues to be called from the
    common CPU code. This move is done in preparation of the addition of some
    vendor specific code.

    No functional change.

    Suggested-by: Borislav Petkov <bp@suse.de>
    Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Link: https://lkml.kernel.org/r/38433b99f9d16c8f4ee796f8cc42b871531fa203.1588715690.git.reinette.chatre@intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/x86/include/asm/resctrl_sched.h | 3 +++
    arch/x86/kernel/cpu/common.c | 27 ++-------------------------
    arch/x86/kernel/cpu/resctrl/core.c | 24 ++++++++++++++++++++++++
    3 files changed, 29 insertions(+), 25 deletions(-)

    diff --git a/arch/x86/include/asm/resctrl_sched.h b/arch/x86/include/asm/resctrl_sched.h
    index f6b7fe2833cc7..c8a27cbbdae29 100644
    --- a/arch/x86/include/asm/resctrl_sched.h
    +++ b/arch/x86/include/asm/resctrl_sched.h
    @@ -84,9 +84,12 @@ static inline void resctrl_sched_in(void)
    __resctrl_sched_in();
    }

    +void resctrl_cpu_detect(struct cpuinfo_x86 *c);
    +
    #else

    static inline void resctrl_sched_in(void) {}
    +static inline void resctrl_cpu_detect(struct cpuinfo_x86 *c) {}

    #endif /* CONFIG_X86_CPU_RESCTRL */

    diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
    index 8293ee5149758..e2e4af685f9b4 100644
    --- a/arch/x86/kernel/cpu/common.c
    +++ b/arch/x86/kernel/cpu/common.c
    @@ -56,6 +56,7 @@
    #include <asm/intel-family.h>
    #include <asm/cpu_device_id.h>
    #include <asm/uv/uv.h>
    +#include <asm/resctrl_sched.h>

    #include "cpu.h"

    @@ -854,30 +855,6 @@ static void init_speculation_control(struct cpuinfo_x86 *c)
    }
    }

    -static void init_cqm(struct cpuinfo_x86 *c)
    -{
    - if (!cpu_has(c, X86_FEATURE_CQM_LLC)) {
    - c->x86_cache_max_rmid = -1;
    - c->x86_cache_occ_scale = -1;
    - return;
    - }
    -
    - /* will be overridden if occupancy monitoring exists */
    - c->x86_cache_max_rmid = cpuid_ebx(0xf);
    -
    - 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)) {
    - u32 eax, ebx, ecx, edx;
    -
    - /* QoS sub-leaf, EAX=0Fh, ECX=1 */
    - cpuid_count(0xf, 1, &eax, &ebx, &ecx, &edx);
    -
    - c->x86_cache_max_rmid = ecx;
    - c->x86_cache_occ_scale = ebx;
    - }
    -}
    -
    void get_cpu_cap(struct cpuinfo_x86 *c)
    {
    u32 eax, ebx, ecx, edx;
    @@ -945,7 +922,7 @@ void get_cpu_cap(struct cpuinfo_x86 *c)

    init_scattered_cpuid_features(c);
    init_speculation_control(c);
    - init_cqm(c);
    + resctrl_cpu_detect(c);

    /*
    * Clear/Set all flags overridden by options, after probe.
    diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c
    index d8cc5223b7ce8..49599733fa94d 100644
    --- a/arch/x86/kernel/cpu/resctrl/core.c
    +++ b/arch/x86/kernel/cpu/resctrl/core.c
    @@ -958,6 +958,30 @@ static __init void rdt_init_res_defs(void)

    static enum cpuhp_state rdt_online;

    +void resctrl_cpu_detect(struct cpuinfo_x86 *c)
    +{
    + if (!cpu_has(c, X86_FEATURE_CQM_LLC)) {
    + c->x86_cache_max_rmid = -1;
    + c->x86_cache_occ_scale = -1;
    + return;
    + }
    +
    + /* will be overridden if occupancy monitoring exists */
    + c->x86_cache_max_rmid = cpuid_ebx(0xf);
    +
    + 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)) {
    + u32 eax, ebx, ecx, edx;
    +
    + /* QoS sub-leaf, EAX=0Fh, ECX=1 */
    + cpuid_count(0xf, 1, &eax, &ebx, &ecx, &edx);
    +
    + c->x86_cache_max_rmid = ecx;
    + c->x86_cache_occ_scale = ebx;
    + }
    +}
    +
    static int __init resctrl_late_init(void)
    {
    struct rdt_resource *r;
    --
    2.25.1
    \
     
     \ /
      Last update: 2020-06-29 23:49    [W:5.574 / U:0.572 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site