]> www.infradead.org Git - nvme.git/commitdiff
mm/hugetlb_cgroup: switch to the new cftypes
authorXiu Jianfeng <xiujianfeng@huawei.com>
Wed, 12 Jun 2024 09:24:09 +0000 (09:24 +0000)
committerAndrew Morton <akpm@linux-foundation.org>
Thu, 4 Jul 2024 02:30:10 +0000 (19:30 -0700)
The previous patch has already reconstructed the cftype attributes based
on the templates and saved them in dfl_cftypes and legacy_cftypes.  then
remove the old procedure and switch to the new cftypes.

Link: https://lkml.kernel.org/r/20240612092409.2027592-4-xiujianfeng@huawei.com
Signed-off-by: Xiu Jianfeng <xiujianfeng@huawei.com>
Cc: Muchun Song <muchun.song@linux.dev>
Cc: Oscar Salvador <osalvador@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
include/linux/hugetlb.h
mm/hugetlb_cgroup.c

index 279aca379b950c28ae408ba5499d65cf8cdc39c7..a951c0d0606131f63c8f0dd51a5118b152e0bde9 100644 (file)
@@ -686,11 +686,6 @@ struct hstate {
        unsigned int nr_huge_pages_node[MAX_NUMNODES];
        unsigned int free_huge_pages_node[MAX_NUMNODES];
        unsigned int surplus_huge_pages_node[MAX_NUMNODES];
-#ifdef CONFIG_CGROUP_HUGETLB
-       /* cgroup control files */
-       struct cftype cgroup_files_dfl[8];
-       struct cftype cgroup_files_legacy[10];
-#endif
        char name[HSTATE_NAME_LEN];
 };
 
index a4506569841944539bb0faee1714173bd14c6f7f..4ff238ba12503eacb255c9c4fef03ad0f571ce70 100644 (file)
@@ -841,164 +841,26 @@ hugetlb_cgroup_cfttypes_init(struct hstate *h, struct cftype *cft,
        }
 }
 
-static void __init __hugetlb_cgroup_file_dfl_init(int idx)
+static void __init __hugetlb_cgroup_file_dfl_init(struct hstate *h)
 {
-       char buf[32];
-       struct cftype *cft;
-       struct hstate *h = &hstates[idx];
+       int idx = hstate_index(h);
 
        hugetlb_cgroup_cfttypes_init(h, dfl_files + idx * DFL_TMPL_SIZE,
                                     hugetlb_dfl_tmpl, DFL_TMPL_SIZE);
-
-       /* format the size */
-       mem_fmt(buf, sizeof(buf), huge_page_size(h));
-
-       /* Add the limit file */
-       cft = &h->cgroup_files_dfl[0];
-       snprintf(cft->name, MAX_CFTYPE_NAME, "%s.max", buf);
-       cft->private = MEMFILE_PRIVATE(idx, RES_LIMIT);
-       cft->seq_show = hugetlb_cgroup_read_u64_max;
-       cft->write = hugetlb_cgroup_write_dfl;
-       cft->flags = CFTYPE_NOT_ON_ROOT;
-
-       /* Add the reservation limit file */
-       cft = &h->cgroup_files_dfl[1];
-       snprintf(cft->name, MAX_CFTYPE_NAME, "%s.rsvd.max", buf);
-       cft->private = MEMFILE_PRIVATE(idx, RES_RSVD_LIMIT);
-       cft->seq_show = hugetlb_cgroup_read_u64_max;
-       cft->write = hugetlb_cgroup_write_dfl;
-       cft->flags = CFTYPE_NOT_ON_ROOT;
-
-       /* Add the current usage file */
-       cft = &h->cgroup_files_dfl[2];
-       snprintf(cft->name, MAX_CFTYPE_NAME, "%s.current", buf);
-       cft->private = MEMFILE_PRIVATE(idx, RES_USAGE);
-       cft->seq_show = hugetlb_cgroup_read_u64_max;
-       cft->flags = CFTYPE_NOT_ON_ROOT;
-
-       /* Add the current reservation usage file */
-       cft = &h->cgroup_files_dfl[3];
-       snprintf(cft->name, MAX_CFTYPE_NAME, "%s.rsvd.current", buf);
-       cft->private = MEMFILE_PRIVATE(idx, RES_RSVD_USAGE);
-       cft->seq_show = hugetlb_cgroup_read_u64_max;
-       cft->flags = CFTYPE_NOT_ON_ROOT;
-
-       /* Add the events file */
-       cft = &h->cgroup_files_dfl[4];
-       snprintf(cft->name, MAX_CFTYPE_NAME, "%s.events", buf);
-       cft->private = MEMFILE_PRIVATE(idx, 0);
-       cft->seq_show = hugetlb_events_show;
-       cft->file_offset = offsetof(struct hugetlb_cgroup, events_file[idx]);
-       cft->flags = CFTYPE_NOT_ON_ROOT;
-
-       /* Add the events.local file */
-       cft = &h->cgroup_files_dfl[5];
-       snprintf(cft->name, MAX_CFTYPE_NAME, "%s.events.local", buf);
-       cft->private = MEMFILE_PRIVATE(idx, 0);
-       cft->seq_show = hugetlb_events_local_show;
-       cft->file_offset = offsetof(struct hugetlb_cgroup,
-                                   events_local_file[idx]);
-       cft->flags = CFTYPE_NOT_ON_ROOT;
-
-       /* Add the numa stat file */
-       cft = &h->cgroup_files_dfl[6];
-       snprintf(cft->name, MAX_CFTYPE_NAME, "%s.numa_stat", buf);
-       cft->private = MEMFILE_PRIVATE(idx, 0);
-       cft->seq_show = hugetlb_cgroup_read_numa_stat;
-       cft->flags = CFTYPE_NOT_ON_ROOT;
-
-       /* NULL terminate the last cft */
-       cft = &h->cgroup_files_dfl[7];
-       memset(cft, 0, sizeof(*cft));
-
-       WARN_ON(cgroup_add_dfl_cftypes(&hugetlb_cgrp_subsys,
-                                      h->cgroup_files_dfl));
 }
 
-static void __init __hugetlb_cgroup_file_legacy_init(int idx)
+static void __init __hugetlb_cgroup_file_legacy_init(struct hstate *h)
 {
-       char buf[32];
-       struct cftype *cft;
-       struct hstate *h = &hstates[idx];
+       int idx = hstate_index(h);
 
        hugetlb_cgroup_cfttypes_init(h, legacy_files + idx * LEGACY_TMPL_SIZE,
                                     hugetlb_legacy_tmpl, LEGACY_TMPL_SIZE);
-
-       /* format the size */
-       mem_fmt(buf, sizeof(buf), huge_page_size(h));
-
-       /* Add the limit file */
-       cft = &h->cgroup_files_legacy[0];
-       snprintf(cft->name, MAX_CFTYPE_NAME, "%s.limit_in_bytes", buf);
-       cft->private = MEMFILE_PRIVATE(idx, RES_LIMIT);
-       cft->read_u64 = hugetlb_cgroup_read_u64;
-       cft->write = hugetlb_cgroup_write_legacy;
-
-       /* Add the reservation limit file */
-       cft = &h->cgroup_files_legacy[1];
-       snprintf(cft->name, MAX_CFTYPE_NAME, "%s.rsvd.limit_in_bytes", buf);
-       cft->private = MEMFILE_PRIVATE(idx, RES_RSVD_LIMIT);
-       cft->read_u64 = hugetlb_cgroup_read_u64;
-       cft->write = hugetlb_cgroup_write_legacy;
-
-       /* Add the usage file */
-       cft = &h->cgroup_files_legacy[2];
-       snprintf(cft->name, MAX_CFTYPE_NAME, "%s.usage_in_bytes", buf);
-       cft->private = MEMFILE_PRIVATE(idx, RES_USAGE);
-       cft->read_u64 = hugetlb_cgroup_read_u64;
-
-       /* Add the reservation usage file */
-       cft = &h->cgroup_files_legacy[3];
-       snprintf(cft->name, MAX_CFTYPE_NAME, "%s.rsvd.usage_in_bytes", buf);
-       cft->private = MEMFILE_PRIVATE(idx, RES_RSVD_USAGE);
-       cft->read_u64 = hugetlb_cgroup_read_u64;
-
-       /* Add the MAX usage file */
-       cft = &h->cgroup_files_legacy[4];
-       snprintf(cft->name, MAX_CFTYPE_NAME, "%s.max_usage_in_bytes", buf);
-       cft->private = MEMFILE_PRIVATE(idx, RES_MAX_USAGE);
-       cft->write = hugetlb_cgroup_reset;
-       cft->read_u64 = hugetlb_cgroup_read_u64;
-
-       /* Add the MAX reservation usage file */
-       cft = &h->cgroup_files_legacy[5];
-       snprintf(cft->name, MAX_CFTYPE_NAME, "%s.rsvd.max_usage_in_bytes", buf);
-       cft->private = MEMFILE_PRIVATE(idx, RES_RSVD_MAX_USAGE);
-       cft->write = hugetlb_cgroup_reset;
-       cft->read_u64 = hugetlb_cgroup_read_u64;
-
-       /* Add the failcntfile */
-       cft = &h->cgroup_files_legacy[6];
-       snprintf(cft->name, MAX_CFTYPE_NAME, "%s.failcnt", buf);
-       cft->private = MEMFILE_PRIVATE(idx, RES_FAILCNT);
-       cft->write = hugetlb_cgroup_reset;
-       cft->read_u64 = hugetlb_cgroup_read_u64;
-
-       /* Add the reservation failcntfile */
-       cft = &h->cgroup_files_legacy[7];
-       snprintf(cft->name, MAX_CFTYPE_NAME, "%s.rsvd.failcnt", buf);
-       cft->private = MEMFILE_PRIVATE(idx, RES_RSVD_FAILCNT);
-       cft->write = hugetlb_cgroup_reset;
-       cft->read_u64 = hugetlb_cgroup_read_u64;
-
-       /* Add the numa stat file */
-       cft = &h->cgroup_files_legacy[8];
-       snprintf(cft->name, MAX_CFTYPE_NAME, "%s.numa_stat", buf);
-       cft->private = MEMFILE_PRIVATE(idx, 0);
-       cft->seq_show = hugetlb_cgroup_read_numa_stat;
-
-       /* NULL terminate the last cft */
-       cft = &h->cgroup_files_legacy[9];
-       memset(cft, 0, sizeof(*cft));
-
-       WARN_ON(cgroup_add_legacy_cftypes(&hugetlb_cgrp_subsys,
-                                         h->cgroup_files_legacy));
 }
 
-static void __init __hugetlb_cgroup_file_init(int idx)
+static void __init __hugetlb_cgroup_file_init(struct hstate *h)
 {
-       __hugetlb_cgroup_file_dfl_init(idx);
-       __hugetlb_cgroup_file_legacy_init(idx);
+       __hugetlb_cgroup_file_dfl_init(h);
+       __hugetlb_cgroup_file_legacy_init(h);
 }
 
 static void __init __hugetlb_cgroup_file_pre_init(void)
@@ -1013,13 +875,22 @@ static void __init __hugetlb_cgroup_file_pre_init(void)
        BUG_ON(!legacy_files);
 }
 
+static void __init __hugetlb_cgroup_file_post_init(void)
+{
+       WARN_ON(cgroup_add_dfl_cftypes(&hugetlb_cgrp_subsys,
+                                      dfl_files));
+       WARN_ON(cgroup_add_legacy_cftypes(&hugetlb_cgrp_subsys,
+                                         legacy_files));
+}
+
 void __init hugetlb_cgroup_file_init(void)
 {
        struct hstate *h;
 
        __hugetlb_cgroup_file_pre_init();
        for_each_hstate(h)
-               __hugetlb_cgroup_file_init(hstate_index(h));
+               __hugetlb_cgroup_file_init(h);
+       __hugetlb_cgroup_file_post_init();
 }
 
 /*