From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751136AbcGNChQ (ORCPT ); Wed, 13 Jul 2016 22:37:16 -0400 Received: from szxga01-in.huawei.com ([58.251.152.64]:14700 "EHLO szxga01-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750887AbcGNChK (ORCPT ); Wed, 13 Jul 2016 22:37:10 -0400 Message-ID: <5786F81B.1070502@huawei.com> Date: Thu, 14 Jul 2016 10:25:31 +0800 From: Xishi Qiu User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20120428 Thunderbird/12.0.1 MIME-Version: 1.0 To: Andrew Morton , Vlastimil Babka , Joonsoo Kim , Naoya Horiguchi , David Rientjes CC: Linux MM , LKML Subject: [PATCH] mem-hotplug: use GFP_HIGHUSER_MOVABLE and alloc from next node in alloc_migrate_target() Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7bit X-Originating-IP: [10.177.25.179] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A090203.5786F825.011C,ss=1,re=0.000,recu=0.000,reip=0.000,cl=1,cld=1,fgs=0, ip=0.0.0.0, so=2013-06-18 04:22:30, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: f44564d857782698f3e7f69383006cec Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org alloc_migrate_target() is called from migrate_pages(), and the page is always from user space, so we can add __GFP_HIGHMEM directly. Second, when we offline a node, the new page should alloced from other nodes instead of the current node, because re-migrate is a waste of time. Signed-off-by: Xishi Qiu --- mm/page_isolation.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/mm/page_isolation.c b/mm/page_isolation.c index 612122b..83848dc 100644 --- a/mm/page_isolation.c +++ b/mm/page_isolation.c @@ -282,20 +282,16 @@ int test_pages_isolated(unsigned long start_pfn, unsigned long end_pfn, struct page *alloc_migrate_target(struct page *page, unsigned long private, int **resultp) { - gfp_t gfp_mask = GFP_USER | __GFP_MOVABLE; - /* - * TODO: allocate a destination hugepage from a nearest neighbor node, + * TODO: allocate a destination page from a nearest neighbor node, * accordance with memory policy of the user process if possible. For * now as a simple work-around, we use the next node for destination. */ + int nid = next_node_in(page_to_nid(page), node_online_map); + if (PageHuge(page)) return alloc_huge_page_node(page_hstate(compound_head(page)), - next_node_in(page_to_nid(page), - node_online_map)); - - if (PageHighMem(page)) - gfp_mask |= __GFP_HIGHMEM; - - return alloc_page(gfp_mask); + nid); + else + return __alloc_pages_node(nid, GFP_HIGHUSER_MOVABLE, 0); } -- 1.8.3.1