lkml.org 
[lkml]   [2024]   [Mar]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v1 10/31] x86/resctrl: Move monitor init work to a resctrl init call
    Date
    rdt_get_mon_l3_config() is called from the architecture's
    resctrl_arch_late_init(), and initialises both architecture specific
    fields, such as hw_res->mon_scale and resctrl filesystem fields
    by calling dom_data_init().

    To separate the filesystem and architecture parts of resctrl, this
    function needs splitting up.

    Add resctrl_mon_resource_init() to do the filesystem specific work,
    and call it from resctrl_init(). This runs later, but is still before
    the filesystem is mounted and the rmid_ptrs[] array can be used.

    Signed-off-by: James Morse <james.morse@arm.com>
    ---
    arch/x86/kernel/cpu/resctrl/internal.h | 1 +
    arch/x86/kernel/cpu/resctrl/monitor.c | 24 +++++++++++++++++-------
    arch/x86/kernel/cpu/resctrl/rdtgroup.c | 4 ++++
    3 files changed, 22 insertions(+), 7 deletions(-)

    diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h
    index 031948322eab..7a0c74779c53 100644
    --- a/arch/x86/kernel/cpu/resctrl/internal.h
    +++ b/arch/x86/kernel/cpu/resctrl/internal.h
    @@ -540,6 +540,7 @@ int rdtgroup_mondata_show(struct seq_file *m, void *arg);
    void mon_event_read(struct rmid_read *rr, struct rdt_resource *r,
    struct rdt_domain *d, struct rdtgroup *rdtgrp,
    int evtid, int first);
    +int resctrl_mon_resource_init(void);
    void mbm_setup_overflow_handler(struct rdt_domain *dom,
    unsigned long delay_ms,
    int exclude_cpu);
    diff --git a/arch/x86/kernel/cpu/resctrl/monitor.c b/arch/x86/kernel/cpu/resctrl/monitor.c
    index 06565153ceb2..929ec1430b45 100644
    --- a/arch/x86/kernel/cpu/resctrl/monitor.c
    +++ b/arch/x86/kernel/cpu/resctrl/monitor.c
    @@ -1003,12 +1003,28 @@ static void l3_mon_evt_init(struct rdt_resource *r)
    list_add_tail(&mbm_local_event.list, &r->evt_list);
    }

    +int resctrl_mon_resource_init(void)
    +{
    + struct rdt_resource *r = resctrl_arch_get_resource(RDT_RESOURCE_L3);
    + int ret;
    +
    + if (!r->mon_capable)
    + return 0;
    +
    + ret = dom_data_init(r);
    + if (ret)
    + return ret;
    +
    + l3_mon_evt_init(r);
    +
    + return 0;
    +}
    +
    int __init rdt_get_mon_l3_config(struct rdt_resource *r)
    {
    unsigned int mbm_offset = boot_cpu_data.x86_cache_mbm_width_offset;
    struct rdt_hw_resource *hw_res = resctrl_to_arch_res(r);
    unsigned int threshold;
    - int ret;

    resctrl_rmid_realloc_limit = boot_cpu_data.x86_cache_size * 1024;
    hw_res->mon_scale = boot_cpu_data.x86_cache_occ_scale;
    @@ -1036,10 +1052,6 @@ 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);
    - if (ret)
    - return ret;
    -
    if (rdt_cpu_has(X86_FEATURE_BMEC)) {
    u32 eax, ebx, ecx, edx;

    @@ -1057,8 +1069,6 @@ int __init rdt_get_mon_l3_config(struct rdt_resource *r)
    }
    }

    - l3_mon_evt_init(r);
    -
    r->mon_capable = true;

    return 0;
    diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
    index 13c24cb18d76..7a9696f53f2b 100644
    --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c
    +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
    @@ -4138,6 +4138,10 @@ int __init resctrl_init(void)

    rdtgroup_setup_default();

    + ret = resctrl_mon_resource_init();
    + if (ret)
    + return ret;
    +
    ret = sysfs_create_mount_point(fs_kobj, "resctrl");
    if (ret)
    return ret;
    --
    2.39.2

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