From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752898AbbIZKqv (ORCPT ); Sat, 26 Sep 2015 06:46:51 -0400 Received: from mx2.parallels.com ([199.115.105.18]:56963 "EHLO mx2.parallels.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752732AbbIZKqX (ORCPT ); Sat, 26 Sep 2015 06:46:23 -0400 From: Vladimir Davydov To: Andrew Morton CC: Johannes Weiner , Michal Hocko , Tejun Heo , , Subject: [PATCH 4/5] mm: add __get_free_kmem_pages helper Date: Sat, 26 Sep 2015 13:45:56 +0300 Message-ID: X-Mailer: git-send-email 2.1.4 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain X-ClientProxiedBy: US-EXCH2.sw.swsoft.com (10.255.249.46) To US-EXCH2.sw.swsoft.com (10.255.249.46) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Works exactly as __get_free_pages except it also tries to charge newly allocated pages to kmemcg. It will be used by the next patch. Signed-off-by: Vladimir Davydov --- include/linux/gfp.h | 1 + mm/page_alloc.c | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/include/linux/gfp.h b/include/linux/gfp.h index b46147c45966..34dc0db54b59 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h @@ -362,6 +362,7 @@ extern struct page *alloc_kmem_pages_node(int nid, gfp_t gfp_mask, unsigned int order); extern unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order); +extern unsigned long __get_free_kmem_pages(gfp_t gfp_mask, unsigned int order); extern unsigned long get_zeroed_page(gfp_t gfp_mask); void *alloc_pages_exact(size_t size, gfp_t gfp_mask); diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 88d85367c81e..e4a3a7aa8e42 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -3296,6 +3296,18 @@ unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order) } EXPORT_SYMBOL(__get_free_pages); +unsigned long __get_free_kmem_pages(gfp_t gfp_mask, unsigned int order) +{ + struct page *page; + + VM_BUG_ON((gfp_mask & __GFP_HIGHMEM) != 0); + + page = alloc_kmem_pages(gfp_mask, order); + if (!page) + return 0; + return (unsigned long) page_address(page); +} + unsigned long get_zeroed_page(gfp_t gfp_mask) { return __get_free_pages(gfp_mask | __GFP_ZERO, 0); -- 2.1.4