Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp3893944pxb; Mon, 8 Feb 2021 02:52:06 -0800 (PST) X-Google-Smtp-Source: ABdhPJykp7GqyGAoXsBKtrVZq8OWzoCaqvyAwlWYaIbZTUYt0oT3oL0x+Jpu4e0/BSY/LOJQkh4r X-Received: by 2002:a05:6402:1914:: with SMTP id e20mr16511079edz.89.1612781526230; Mon, 08 Feb 2021 02:52:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612781526; cv=none; d=google.com; s=arc-20160816; b=nPld4YTd78nrQVEH3Fs+ecpWf3PXKJ955FcNb9N6RO+rq4TCiZhzthX91BjYgHGOzR a63uxwlvJlvwCiIAmP8xFWxpR3d4C6x/CNSu5nsUUHF5BPxTp2+LcAIDr77JY9Dxx7kz wdKjHc+NTRhTv/aFm3+1st/IbWlAd5tInzTXOSEtBlpSizrvzvgrOSdowDeh1/NqxMt7 LMlvdxyZYnJCQqFrotm1p0hskpSLMkhF5xAaC89yoLnWrWf4VmIBHbn5/oEjz9Xw6IAp ZGZtDX+7wlXyddd+hjaRpsPJImTX834G2eItSPnK/qOxg3Y65haTLn7YbayxK+9GmB0X akCg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from; bh=4thwZMN060TvLGCY0eu3A3NRm0xfU9Z4pCsQz/YUT7Y=; b=O62h1KCvGhxlKflWXRmpr1NsjBOJTIIICpZmU/WndtbmMBGyylj//I/7SBBOkMyBnL yATwg0z59pXbDdYPclIIv7+CVY56AdJvJgehutCdi6S0GcnNX6+EuGkmj70FYrewUh6Z B23pA1luuQgo/+oKp8dd8kbVkzAd2P5U56ZneF0raN2S6oFQhG1izA5P/s7yhEYJObPI 0yeTuGwQRRiJWDI6WW5cMEs5/dmjt3xy5EQjMomqO9SMWJK0BuFkZyaHKmFoZh3DuuVa kOx6UXjLySgHnO7t6KGuu5PX0D8xGpj3xqld4UCjxkewdgKMrcOQXHXgnFJwQv6B7unG 8Tsg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id e6si3681037edv.518.2021.02.08.02.51.41; Mon, 08 Feb 2021 02:52:06 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229615AbhBHKsg (ORCPT + 99 others); Mon, 8 Feb 2021 05:48:36 -0500 Received: from mx2.suse.de ([195.135.220.15]:57590 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232313AbhBHKi6 (ORCPT ); Mon, 8 Feb 2021 05:38:58 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id A85BBB039; Mon, 8 Feb 2021 10:38:15 +0000 (UTC) From: Oscar Salvador To: Mike Kravetz Cc: David Hildenbrand , Muchun Song , Michal Hocko , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Oscar Salvador Subject: [RFC PATCH 1/2] mm,page_alloc: Make alloc_contig_range handle in-use hugetlb pages Date: Mon, 8 Feb 2021 11:38:11 +0100 Message-Id: <20210208103812.32056-2-osalvador@suse.de> X-Mailer: git-send-email 2.13.7 In-Reply-To: <20210208103812.32056-1-osalvador@suse.de> References: <20210208103812.32056-1-osalvador@suse.de> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org alloc_contig_range is not prepared to handle hugetlb pages and will fail if it ever sees one, but since they can be migrated as any other page (LRU and Movable), it makes sense to also handle them. For now, do it only when coming from alloc_contig_range. Signed-off-by: Oscar Salvador --- mm/compaction.c | 17 +++++++++++++++++ mm/vmscan.c | 5 +++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/mm/compaction.c b/mm/compaction.c index e5acb9714436..89cd2e60da29 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -940,6 +940,22 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn, goto isolate_fail; } + /* + * Handle hugetlb pages only when coming from alloc_contig + */ + if (PageHuge(page) && cc->alloc_contig) { + if (page_count(page)) { + /* + * Hugetlb page in-use. Isolate and migrate. + */ + if (isolate_huge_page(page, &cc->migratepages)) { + low_pfn += compound_nr(page) - 1; + goto isolate_success_no_list; + } + } + goto isolate_fail; + } + /* * Check may be lockless but that's ok as we recheck later. * It's possible to migrate LRU and non-lru movable pages. @@ -1041,6 +1057,7 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn, isolate_success: list_add(&page->lru, &cc->migratepages); +isolate_success_no_list: cc->nr_migratepages += compound_nr(page); nr_isolated += compound_nr(page); diff --git a/mm/vmscan.c b/mm/vmscan.c index b1b574ad199d..0803adca4469 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -1506,8 +1506,9 @@ unsigned int reclaim_clean_pages_from_list(struct zone *zone, LIST_HEAD(clean_pages); list_for_each_entry_safe(page, next, page_list, lru) { - if (page_is_file_lru(page) && !PageDirty(page) && - !__PageMovable(page) && !PageUnevictable(page)) { + if (!PageHuge(page) && page_is_file_lru(page) && + !PageDirty(page) && !__PageMovable(page) && + !PageUnevictable(page)) { ClearPageActive(page); list_move(&page->lru, &clean_pages); } -- 2.16.3