lkml.org 
[lkml]   [2024]   [Feb]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip: x86/cache] x86/resctrl: Create helper for RMID allocation and mondata dir creation
    The following commit has been merged into the x86/cache branch of tip:

    Commit-ID: b1de313979af99dc0f999656fc99bbcb52559a38
    Gitweb: https://git.kernel.org/tip/b1de313979af99dc0f999656fc99bbcb52559a38
    Author: James Morse <james.morse@arm.com>
    AuthorDate: Tue, 13 Feb 2024 18:44:17
    Committer: Borislav Petkov (AMD) <bp@alien8.de>
    CommitterDate: Fri, 16 Feb 2024 19:18:31 +01:00

    x86/resctrl: Create helper for RMID allocation and mondata dir creation

    When monitoring is supported, each monitor and control group is allocated an
    RMID. For control groups, rdtgroup_mkdir_ctrl_mon() later goes on to allocate
    the CLOSID.

    MPAM's equivalent of RMID are not an independent number, so can't be allocated
    until the CLOSID is known. An RMID allocation for one CLOSID may fail, whereas
    another may succeed depending on how many monitor groups a control group has.

    The RMID allocation needs to move to be after the CLOSID has been allocated.

    Move the RMID allocation and mondata dir creation to a helper.

    Signed-off-by: James Morse <james.morse@arm.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Shaopeng Tan <tan.shaopeng@fujitsu.com>
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
    Reviewed-by: Babu Moger <babu.moger@amd.com>
    Tested-by: Peter Newman <peternewman@google.com>
    Tested-by: Shaopeng Tan <tan.shaopeng@fujitsu.com>
    Tested-by: Babu Moger <babu.moger@amd.com>
    Tested-by: Carl Worth <carl@os.amperecomputing.com> # arm64
    Link: https://lore.kernel.org/r/20240213184438.16675-4-james.morse@arm.com
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    ---
    arch/x86/kernel/cpu/resctrl/rdtgroup.c | 42 ++++++++++++++++---------
    1 file changed, 27 insertions(+), 15 deletions(-)

    diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
    index aa24343..4ea5a87 100644
    --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c
    +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
    @@ -3288,6 +3288,30 @@ out:
    return ret;
    }

    +static int mkdir_rdt_prepare_rmid_alloc(struct rdtgroup *rdtgrp)
    +{
    + int ret;
    +
    + if (!rdt_mon_capable)
    + return 0;
    +
    + ret = alloc_rmid();
    + if (ret < 0) {
    + rdt_last_cmd_puts("Out of RMIDs\n");
    + return ret;
    + }
    + rdtgrp->mon.rmid = ret;
    +
    + ret = mkdir_mondata_all(rdtgrp->kn, rdtgrp, &rdtgrp->mon.mon_data_kn);
    + if (ret) {
    + rdt_last_cmd_puts("kernfs subdir error\n");
    + free_rmid(rdtgrp->mon.rmid);
    + return ret;
    + }
    +
    + return 0;
    +}
    +
    static int mkdir_rdt_prepare(struct kernfs_node *parent_kn,
    const char *name, umode_t mode,
    enum rdt_group_type rtype, struct rdtgroup **r)
    @@ -3360,20 +3384,10 @@ static int mkdir_rdt_prepare(struct kernfs_node *parent_kn,
    goto out_destroy;
    }

    - if (rdt_mon_capable) {
    - ret = alloc_rmid();
    - if (ret < 0) {
    - rdt_last_cmd_puts("Out of RMIDs\n");
    - goto out_destroy;
    - }
    - rdtgrp->mon.rmid = ret;
    + ret = mkdir_rdt_prepare_rmid_alloc(rdtgrp);
    + if (ret)
    + goto out_destroy;

    - ret = mkdir_mondata_all(kn, rdtgrp, &rdtgrp->mon.mon_data_kn);
    - if (ret) {
    - rdt_last_cmd_puts("kernfs subdir error\n");
    - goto out_idfree;
    - }
    - }
    kernfs_activate(kn);

    /*
    @@ -3381,8 +3395,6 @@ static int mkdir_rdt_prepare(struct kernfs_node *parent_kn,
    */
    return 0;

    -out_idfree:
    - free_rmid(rdtgrp->mon.rmid);
    out_destroy:
    kernfs_put(rdtgrp->kn);
    kernfs_remove(rdtgrp->kn);
    \
     
     \ /
      Last update: 2024-05-27 15:10    [W:7.889 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site