lkml.org 
[lkml]   [2024]   [Mar]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 04/10] x86/resctrl: Add pointer to enabled monitor resource
    Date
    Sub-NUMA cluster enabled systems do all monitoring using the SUBL3
    resource. Others use the regular L3 resource.

    Replace the hard-coded rdt_resources_all[RDT_RESOURCE_L3].r_resctrl
    references with a new pointer "rdt_l3_mon_resource".

    Signed-off-by: Tony Luck <tony.luck@intel.com>
    ---
    arch/x86/kernel/cpu/resctrl/internal.h | 1 +
    arch/x86/kernel/cpu/resctrl/core.c | 2 +-
    arch/x86/kernel/cpu/resctrl/monitor.c | 19 ++++++++++++-------
    arch/x86/kernel/cpu/resctrl/rdtgroup.c | 7 +++----
    4 files changed, 17 insertions(+), 12 deletions(-)

    diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h
    index 5fcff861e185..21d81f51838f 100644
    --- a/arch/x86/kernel/cpu/resctrl/internal.h
    +++ b/arch/x86/kernel/cpu/resctrl/internal.h
    @@ -464,6 +464,7 @@ int parse_bw(struct rdt_parse_data *data, struct resctrl_schema *s,
    extern struct mutex rdtgroup_mutex;

    extern struct rdt_hw_resource rdt_resources_all[];
    +extern struct rdt_resource *rdt_l3_mon_resource;
    extern struct rdtgroup rdtgroup_default;
    extern struct dentry *debugfs_resctrl;

    diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c
    index bfa179f20802..2fa04375da8c 100644
    --- a/arch/x86/kernel/cpu/resctrl/core.c
    +++ b/arch/x86/kernel/cpu/resctrl/core.c
    @@ -996,7 +996,7 @@ late_initcall(resctrl_late_init);

    static void __exit resctrl_exit(void)
    {
    - struct rdt_resource *r = &rdt_resources_all[RDT_RESOURCE_L3].r_resctrl;
    + struct rdt_resource *r = rdt_l3_mon_resource;

    cpuhp_remove_state(rdt_online);

    diff --git a/arch/x86/kernel/cpu/resctrl/monitor.c b/arch/x86/kernel/cpu/resctrl/monitor.c
    index 84a2056190c8..95455cb187eb 100644
    --- a/arch/x86/kernel/cpu/resctrl/monitor.c
    +++ b/arch/x86/kernel/cpu/resctrl/monitor.c
    @@ -78,6 +78,9 @@ static struct rmid_entry *rmid_ptrs;
    */
    bool rdt_mon_capable;

    +/* Resource (L3 or SUBL3) that is base for monitoring */
    +struct rdt_resource *rdt_l3_mon_resource;
    +
    /*
    * Global to indicate which monitoring events are enabled.
    */
    @@ -321,7 +324,7 @@ static void limbo_release_entry(struct rmid_entry *entry)
    */
    void __check_limbo(struct rdt_domain *d, bool force_free)
    {
    - struct rdt_resource *r = &rdt_resources_all[RDT_RESOURCE_L3].r_resctrl;
    + struct rdt_resource *r = rdt_l3_mon_resource;
    u32 idx_limit = resctrl_arch_system_num_rmid_idx();
    struct rmid_entry *entry;
    u32 idx, cur_idx = 1;
    @@ -467,7 +470,7 @@ int alloc_rmid(u32 closid)

    static void add_rmid_to_limbo(struct rmid_entry *entry)
    {
    - struct rdt_resource *r = &rdt_resources_all[RDT_RESOURCE_L3].r_resctrl;
    + struct rdt_resource *r = rdt_l3_mon_resource;
    struct rdt_domain *d;
    u32 idx;

    @@ -839,7 +842,7 @@ void mbm_handle_overflow(struct work_struct *work)
    if (!resctrl_mounted || !resctrl_arch_mon_capable())
    goto out_unlock;

    - r = &rdt_resources_all[RDT_RESOURCE_L3].r_resctrl;
    + r = rdt_l3_mon_resource;
    d = container_of(work, struct rdt_domain, mbm_over.work);

    list_for_each_entry(prgrp, &rdt_all_groups, rdtgroup_list) {
    @@ -1036,7 +1039,9 @@ int __init rdt_get_mon_l3_config(struct rdt_resource *r)
    */
    resctrl_rmid_realloc_threshold = resctrl_arch_round_mon_val(threshold);

    - ret = dom_data_init(r);
    + rdt_l3_mon_resource = r;
    +
    + ret = dom_data_init(rdt_l3_mon_resource);
    if (ret)
    return ret;

    @@ -1057,10 +1062,10 @@ int __init rdt_get_mon_l3_config(struct rdt_resource *r)
    }
    }

    - l3_mon_evt_init(r);
    + l3_mon_evt_init(rdt_l3_mon_resource);

    - r->mon_capable = true;
    - r->mon_enabled = true;
    + rdt_l3_mon_resource->mon_capable = true;
    + rdt_l3_mon_resource->mon_enabled = true;

    return 0;
    }
    diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
    index ffcafe567b25..a2ebd7e051bb 100644
    --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c
    +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
    @@ -2703,7 +2703,7 @@ static int rdt_get_tree(struct fs_context *fc)
    resctrl_mounted = true;

    if (is_mbm_enabled()) {
    - r = &rdt_resources_all[RDT_RESOURCE_L3].r_resctrl;
    + r = rdt_l3_mon_resource;
    list_for_each_entry(dom, &r->domains, list)
    mbm_setup_overflow_handler(dom, MBM_OVERFLOW_INTERVAL,
    RESCTRL_PICK_ANY_CPU);
    @@ -4062,7 +4062,6 @@ static void clear_childcpus(struct rdtgroup *r, unsigned int cpu)

    void resctrl_offline_cpu(unsigned int cpu)
    {
    - struct rdt_resource *l3 = &rdt_resources_all[RDT_RESOURCE_L3].r_resctrl;
    struct rdtgroup *rdtgrp;
    struct rdt_domain *d;

    @@ -4074,10 +4073,10 @@ void resctrl_offline_cpu(unsigned int cpu)
    }
    }

    - if (!l3->mon_enabled)
    + if (!rdt_l3_mon_resource->mon_enabled)
    goto out_unlock;

    - d = get_domain_from_cpu(cpu, l3);
    + d = get_domain_from_cpu(cpu, rdt_l3_mon_resource);
    if (d) {
    if (is_mbm_enabled() && cpu == d->mbm_work_cpu) {
    cancel_delayed_work(&d->mbm_over);
    --
    2.44.0

    \
     
     \ /
      Last update: 2024-05-27 16:12    [W:8.746 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site