mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-29 17:25:38 +00:00
mm/hugetlb_cgroup: switch to the new cftypes
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>
This commit is contained in:
parent
47179fe035
commit
b79d715c43
@ -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];
|
||||
};
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user