lkml.org 
[lkml]   [2023]   [Jul]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 08/34] sched: Enumerate CPU cgroup file types
    Date
    Rename cpu[_legacy]_files to cpu[_legacy]_cftypes for clarity and add
    cpu_cftype_id which enumerates every cgroup2 interface file type. This
    doesn't make any functional difference now. The enums will be used to access
    specific cftypes by a new BPF extensible sched_class to selectively show and
    hide CPU controller interface files depending on the capability of the
    currently loaded BPF scheduler progs.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Reviewed-by: David Vernet <dvernet@meta.com>
    Acked-by: Josh Don <joshdon@google.com>
    Acked-by: Hao Luo <haoluo@google.com>
    Acked-by: Barret Rhoden <brho@google.com>
    ---
    kernel/sched/core.c | 22 +++++++++++-----------
    kernel/sched/sched.h | 21 +++++++++++++++++++++
    2 files changed, 32 insertions(+), 11 deletions(-)

    diff --git a/kernel/sched/core.c b/kernel/sched/core.c
    index 6818ed1a7a42..f7e7a25a0fdf 100644
    --- a/kernel/sched/core.c
    +++ b/kernel/sched/core.c
    @@ -11160,7 +11160,7 @@ static int cpu_idle_write_s64(struct cgroup_subsys_state *css,
    }
    #endif

    -static struct cftype cpu_legacy_files[] = {
    +static struct cftype cpu_legacy_cftypes[] = {
    #ifdef CONFIG_FAIR_GROUP_SCHED
    {
    .name = "shares",
    @@ -11367,21 +11367,21 @@ static ssize_t cpu_max_write(struct kernfs_open_file *of,
    }
    #endif

    -static struct cftype cpu_files[] = {
    +struct cftype cpu_cftypes[CPU_CFTYPE_CNT + 1] = {
    #ifdef CONFIG_FAIR_GROUP_SCHED
    - {
    + [CPU_CFTYPE_WEIGHT] = {
    .name = "weight",
    .flags = CFTYPE_NOT_ON_ROOT,
    .read_u64 = cpu_weight_read_u64,
    .write_u64 = cpu_weight_write_u64,
    },
    - {
    + [CPU_CFTYPE_WEIGHT_NICE] = {
    .name = "weight.nice",
    .flags = CFTYPE_NOT_ON_ROOT,
    .read_s64 = cpu_weight_nice_read_s64,
    .write_s64 = cpu_weight_nice_write_s64,
    },
    - {
    + [CPU_CFTYPE_IDLE] = {
    .name = "idle",
    .flags = CFTYPE_NOT_ON_ROOT,
    .read_s64 = cpu_idle_read_s64,
    @@ -11389,13 +11389,13 @@ static struct cftype cpu_files[] = {
    },
    #endif
    #ifdef CONFIG_CFS_BANDWIDTH
    - {
    + [CPU_CFTYPE_MAX] = {
    .name = "max",
    .flags = CFTYPE_NOT_ON_ROOT,
    .seq_show = cpu_max_show,
    .write = cpu_max_write,
    },
    - {
    + [CPU_CFTYPE_MAX_BURST] = {
    .name = "max.burst",
    .flags = CFTYPE_NOT_ON_ROOT,
    .read_u64 = cpu_cfs_burst_read_u64,
    @@ -11403,13 +11403,13 @@ static struct cftype cpu_files[] = {
    },
    #endif
    #ifdef CONFIG_UCLAMP_TASK_GROUP
    - {
    + [CPU_CFTYPE_UCLAMP_MIN] = {
    .name = "uclamp.min",
    .flags = CFTYPE_NOT_ON_ROOT,
    .seq_show = cpu_uclamp_min_show,
    .write = cpu_uclamp_min_write,
    },
    - {
    + [CPU_CFTYPE_UCLAMP_MAX] = {
    .name = "uclamp.max",
    .flags = CFTYPE_NOT_ON_ROOT,
    .seq_show = cpu_uclamp_max_show,
    @@ -11429,8 +11429,8 @@ struct cgroup_subsys cpu_cgrp_subsys = {
    .can_attach = cpu_cgroup_can_attach,
    #endif
    .attach = cpu_cgroup_attach,
    - .legacy_cftypes = cpu_legacy_files,
    - .dfl_cftypes = cpu_files,
    + .legacy_cftypes = cpu_legacy_cftypes,
    + .dfl_cftypes = cpu_cftypes,
    .early_init = true,
    .threaded = true,
    };
    diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
    index 71343472e6b1..eddc3775cc92 100644
    --- a/kernel/sched/sched.h
    +++ b/kernel/sched/sched.h
    @@ -3519,4 +3519,25 @@ static inline void task_tick_mm_cid(struct rq *rq, struct task_struct *curr) { }
    static inline void init_sched_mm_cid(struct task_struct *t) { }
    #endif

    +#ifdef CONFIG_CGROUP_SCHED
    +enum cpu_cftype_id {
    +#ifdef CONFIG_FAIR_GROUP_SCHED
    + CPU_CFTYPE_WEIGHT,
    + CPU_CFTYPE_WEIGHT_NICE,
    + CPU_CFTYPE_IDLE,
    +#endif
    +#ifdef CONFIG_CFS_BANDWIDTH
    + CPU_CFTYPE_MAX,
    + CPU_CFTYPE_MAX_BURST,
    +#endif
    +#ifdef CONFIG_UCLAMP_TASK_GROUP
    + CPU_CFTYPE_UCLAMP_MIN,
    + CPU_CFTYPE_UCLAMP_MAX,
    +#endif
    + CPU_CFTYPE_CNT,
    +};
    +
    +extern struct cftype cpu_cftypes[CPU_CFTYPE_CNT + 1];
    +#endif /* CONFIG_CGROUP_SCHED */
    +
    #endif /* _KERNEL_SCHED_SCHED_H */
    --
    2.41.0
    \
     
     \ /
      Last update: 2023-07-11 03:15    [W:3.581 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site