diff options
| -rw-r--r-- | include/linux/hugetlb_cgroup.h | 5 | ||||
| -rw-r--r-- | mm/hugetlb.c | 11 | ||||
| -rw-r--r-- | mm/hugetlb_cgroup.c | 19 |
3 files changed, 20 insertions, 15 deletions
diff --git a/include/linux/hugetlb_cgroup.h b/include/linux/hugetlb_cgroup.h index d73878c694b3..ce8217f7b5c2 100644 --- a/include/linux/hugetlb_cgroup.h +++ b/include/linux/hugetlb_cgroup.h | |||
| @@ -62,7 +62,7 @@ extern void hugetlb_cgroup_uncharge_page(int idx, unsigned long nr_pages, | |||
| 62 | struct page *page); | 62 | struct page *page); |
| 63 | extern void hugetlb_cgroup_uncharge_cgroup(int idx, unsigned long nr_pages, | 63 | extern void hugetlb_cgroup_uncharge_cgroup(int idx, unsigned long nr_pages, |
| 64 | struct hugetlb_cgroup *h_cg); | 64 | struct hugetlb_cgroup *h_cg); |
| 65 | extern int hugetlb_cgroup_file_init(int idx) __init; | 65 | extern void hugetlb_cgroup_file_init(void) __init; |
| 66 | extern void hugetlb_cgroup_migrate(struct page *oldhpage, | 66 | extern void hugetlb_cgroup_migrate(struct page *oldhpage, |
| 67 | struct page *newhpage); | 67 | struct page *newhpage); |
| 68 | 68 | ||
| @@ -111,9 +111,8 @@ hugetlb_cgroup_uncharge_cgroup(int idx, unsigned long nr_pages, | |||
| 111 | return; | 111 | return; |
| 112 | } | 112 | } |
| 113 | 113 | ||
| 114 | static inline int __init hugetlb_cgroup_file_init(int idx) | 114 | static inline void hugetlb_cgroup_file_init(void) |
| 115 | { | 115 | { |
| 116 | return 0; | ||
| 117 | } | 116 | } |
| 118 | 117 | ||
| 119 | static inline void hugetlb_cgroup_migrate(struct page *oldhpage, | 118 | static inline void hugetlb_cgroup_migrate(struct page *oldhpage, |
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index e5318c7793ae..4f3ea0b1e57c 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
| @@ -1906,14 +1906,12 @@ static int __init hugetlb_init(void) | |||
| 1906 | default_hstate.max_huge_pages = default_hstate_max_huge_pages; | 1906 | default_hstate.max_huge_pages = default_hstate_max_huge_pages; |
| 1907 | 1907 | ||
| 1908 | hugetlb_init_hstates(); | 1908 | hugetlb_init_hstates(); |
| 1909 | |||
| 1910 | gather_bootmem_prealloc(); | 1909 | gather_bootmem_prealloc(); |
| 1911 | |||
| 1912 | report_hugepages(); | 1910 | report_hugepages(); |
| 1913 | 1911 | ||
| 1914 | hugetlb_sysfs_init(); | 1912 | hugetlb_sysfs_init(); |
| 1915 | |||
| 1916 | hugetlb_register_all_nodes(); | 1913 | hugetlb_register_all_nodes(); |
| 1914 | hugetlb_cgroup_file_init(); | ||
| 1917 | 1915 | ||
| 1918 | return 0; | 1916 | return 0; |
| 1919 | } | 1917 | } |
| @@ -1943,13 +1941,6 @@ void __init hugetlb_add_hstate(unsigned order) | |||
| 1943 | h->next_nid_to_free = first_node(node_states[N_MEMORY]); | 1941 | h->next_nid_to_free = first_node(node_states[N_MEMORY]); |
| 1944 | snprintf(h->name, HSTATE_NAME_LEN, "hugepages-%lukB", | 1942 | snprintf(h->name, HSTATE_NAME_LEN, "hugepages-%lukB", |
| 1945 | huge_page_size(h)/1024); | 1943 | huge_page_size(h)/1024); |
| 1946 | /* | ||
| 1947 | * Add cgroup control files only if the huge page consists | ||
| 1948 | * of more than two normal pages. This is because we use | ||
| 1949 | * page[2].lru.next for storing cgoup details. | ||
| 1950 | */ | ||
| 1951 | if (order >= HUGETLB_CGROUP_MIN_ORDER) | ||
| 1952 | hugetlb_cgroup_file_init(hugetlb_max_hstate - 1); | ||
| 1953 | 1944 | ||
| 1954 | parsed_hstate = h; | 1945 | parsed_hstate = h; |
| 1955 | } | 1946 | } |
diff --git a/mm/hugetlb_cgroup.c b/mm/hugetlb_cgroup.c index b5bde7a5c017..9cea7de22ffb 100644 --- a/mm/hugetlb_cgroup.c +++ b/mm/hugetlb_cgroup.c | |||
| @@ -333,7 +333,7 @@ static char *mem_fmt(char *buf, int size, unsigned long hsize) | |||
| 333 | return buf; | 333 | return buf; |
| 334 | } | 334 | } |
| 335 | 335 | ||
| 336 | int __init hugetlb_cgroup_file_init(int idx) | 336 | static void __init __hugetlb_cgroup_file_init(int idx) |
| 337 | { | 337 | { |
| 338 | char buf[32]; | 338 | char buf[32]; |
| 339 | struct cftype *cft; | 339 | struct cftype *cft; |
| @@ -375,7 +375,22 @@ int __init hugetlb_cgroup_file_init(int idx) | |||
| 375 | 375 | ||
| 376 | WARN_ON(cgroup_add_cftypes(&hugetlb_subsys, h->cgroup_files)); | 376 | WARN_ON(cgroup_add_cftypes(&hugetlb_subsys, h->cgroup_files)); |
| 377 | 377 | ||
| 378 | return 0; | 378 | return; |
| 379 | } | ||
| 380 | |||
| 381 | void __init hugetlb_cgroup_file_init(void) | ||
| 382 | { | ||
| 383 | struct hstate *h; | ||
| 384 | |||
| 385 | for_each_hstate(h) { | ||
| 386 | /* | ||
| 387 | * Add cgroup control files only if the huge page consists | ||
| 388 | * of more than two normal pages. This is because we use | ||
| 389 | * page[2].lru.next for storing cgroup details. | ||
| 390 | */ | ||
| 391 | if (huge_page_order(h) >= HUGETLB_CGROUP_MIN_ORDER) | ||
| 392 | __hugetlb_cgroup_file_init(hstate_index(h)); | ||
| 393 | } | ||
| 379 | } | 394 | } |
| 380 | 395 | ||
| 381 | /* | 396 | /* |
