mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-09-21 12:11:49 +08: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 nr_huge_pages_node[MAX_NUMNODES];
|
||||||
unsigned int free_huge_pages_node[MAX_NUMNODES];
|
unsigned int free_huge_pages_node[MAX_NUMNODES];
|
||||||
unsigned int surplus_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];
|
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];
|
int idx = hstate_index(h);
|
||||||
struct cftype *cft;
|
|
||||||
struct hstate *h = &hstates[idx];
|
|
||||||
|
|
||||||
hugetlb_cgroup_cfttypes_init(h, dfl_files + idx * DFL_TMPL_SIZE,
|
hugetlb_cgroup_cfttypes_init(h, dfl_files + idx * DFL_TMPL_SIZE,
|
||||||
hugetlb_dfl_tmpl, 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];
|
int idx = hstate_index(h);
|
||||||
struct cftype *cft;
|
|
||||||
struct hstate *h = &hstates[idx];
|
|
||||||
|
|
||||||
hugetlb_cgroup_cfttypes_init(h, legacy_files + idx * LEGACY_TMPL_SIZE,
|
hugetlb_cgroup_cfttypes_init(h, legacy_files + idx * LEGACY_TMPL_SIZE,
|
||||||
hugetlb_legacy_tmpl, 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_dfl_init(h);
|
||||||
__hugetlb_cgroup_file_legacy_init(idx);
|
__hugetlb_cgroup_file_legacy_init(h);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init __hugetlb_cgroup_file_pre_init(void)
|
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);
|
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)
|
void __init hugetlb_cgroup_file_init(void)
|
||||||
{
|
{
|
||||||
struct hstate *h;
|
struct hstate *h;
|
||||||
|
|
||||||
__hugetlb_cgroup_file_pre_init();
|
__hugetlb_cgroup_file_pre_init();
|
||||||
for_each_hstate(h)
|
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