From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ext-host0001.ascade.co.jp ([218.224.228.194]:61269 "EHLO ns.ascade.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750828AbeEREgU (ORCPT ); Fri, 18 May 2018 00:36:20 -0400 Subject: [PATCH v2 4/7] mm, sysctl: make charging surplus hugepages controllable To: Johannes Weiner , Michal Hocko , Vladimir Davydov , Jonathan Corbet , "Luis R. Rodriguez" , Kees Cook Cc: Andrew Morton , Roman Gushchin , David Rientjes , Mike Kravetz , "Aneesh Kumar K.V" , Naoya Horiguchi , Anshuman Khandual , Marc-Andre Lureau , Punit Agrawal , Dan Williams , Vlastimil Babka , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, cgroups@vger.kernel.org, tsukada@ascade.co.jp References: From: TSUKADA Koutaro Message-ID: Date: Fri, 18 May 2018 13:36:11 +0900 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-fsdevel-owner@vger.kernel.org List-ID: Make the default hugetlb surplus hugepage controlable by /proc/sys/vm/charge_surplus_hugepages. Signed-off-by: TSUKADA Koutaro --- include/linux/hugetlb.h | 2 ++ kernel/sysctl.c | 7 +++++++ mm/hugetlb.c | 21 +++++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 33fe5be..9314b07 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h @@ -80,6 +80,8 @@ struct hugepage_subpool *hugepage_new_subpool(struct hstate *h, long max_hpages, void reset_vma_resv_huge_pages(struct vm_area_struct *vma); int hugetlb_sysctl_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *); int hugetlb_overcommit_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *); +int hugetlb_charge_surplus_handler(struct ctl_table *, int, void __user *, + size_t *, loff_t *); int hugetlb_treat_movable_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *); #ifdef CONFIG_NUMA diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 6a78cf7..d562d64 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -1394,6 +1394,13 @@ static int sysrq_sysctl_handler(struct ctl_table *table, int write, .mode = 0644, .proc_handler = hugetlb_overcommit_handler, }, + { + .procname = "charge_surplus_hugepages", + .data = NULL, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = hugetlb_charge_surplus_handler, + }, #endif { .procname = "lowmem_reserve_ratio", diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 2e7b543..9a9549c 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -3069,6 +3069,27 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write, return ret; } +int hugetlb_charge_surplus_handler(struct ctl_table *table, int write, + void __user *buffer, size_t *length, loff_t *ppos) +{ + struct hstate *h = &default_hstate; + int tmp, ret; + + if (!hugepages_supported()) + return -EOPNOTSUPP; + + tmp = h->charge_surplus_huge_pages ? 1 : 0; + table->data = &tmp; + table->maxlen = sizeof(int); + ret = proc_dointvec_minmax(table, write, buffer, length, ppos); + if (ret) + goto out; + + if (write) + h->charge_surplus_huge_pages = tmp ? true : false; +out: + return ret; +} #endif /* CONFIG_SYSCTL */ void hugetlb_report_meminfo(struct seq_file *m) -- Tsukada