Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755471AbbBBN0p (ORCPT ); Mon, 2 Feb 2015 08:26:45 -0500 Received: from mail-oi0-f50.google.com ([209.85.218.50]:40239 "EHLO mail-oi0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753790AbbBBN0o (ORCPT ); Mon, 2 Feb 2015 08:26:44 -0500 MIME-Version: 1.0 In-Reply-To: <54CF4A95.4090504@suse.cz> References: <1422861348-5117-1-git-send-email-iamjoonsoo.kim@lge.com> <1422861348-5117-2-git-send-email-iamjoonsoo.kim@lge.com> <54CF4A95.4090504@suse.cz> Date: Mon, 2 Feb 2015 22:26:43 +0900 Message-ID: Subject: Re: [RFC PATCH v3 2/3] mm/page_alloc: factor out fallback freepage checking From: Joonsoo Kim To: Vlastimil Babka Cc: Andrew Morton , Mel Gorman , David Rientjes , Rik van Riel , Linux Memory Management List , LKML , Zhang Yanfei , Joonsoo Kim Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4109 Lines: 113 2015-02-02 18:59 GMT+09:00 Vlastimil Babka : > On 02/02/2015 08:15 AM, Joonsoo Kim wrote: >> This is preparation step to use page allocator's anti fragmentation logic >> in compaction. This patch just separates fallback freepage checking part >> from fallback freepage management part. Therefore, there is no functional >> change. >> >> Signed-off-by: Joonsoo Kim >> --- >> mm/page_alloc.c | 128 +++++++++++++++++++++++++++++++++----------------------- >> 1 file changed, 76 insertions(+), 52 deletions(-) >> >> diff --git a/mm/page_alloc.c b/mm/page_alloc.c >> index e64b260..6cb18f8 100644 >> --- a/mm/page_alloc.c >> +++ b/mm/page_alloc.c >> @@ -1142,14 +1142,26 @@ static void change_pageblock_range(struct page *pageblock_page, >> * as fragmentation caused by those allocations polluting movable pageblocks >> * is worse than movable allocations stealing from unmovable and reclaimable >> * pageblocks. >> - * >> - * If we claim more than half of the pageblock, change pageblock's migratetype >> - * as well. >> */ >> -static void try_to_steal_freepages(struct zone *zone, struct page *page, >> - int start_type, int fallback_type) >> +static bool can_steal_fallback(unsigned int order, int start_mt) >> +{ >> + if (order >= pageblock_order) >> + return true; >> + >> + if (order >= pageblock_order / 2 || >> + start_mt == MIGRATE_RECLAIMABLE || >> + start_mt == MIGRATE_UNMOVABLE || >> + page_group_by_mobility_disabled) >> + return true; >> + >> + return false; >> +} >> + >> +static void steal_suitable_fallback(struct zone *zone, struct page *page, >> + int start_type) > > Some comment about the function please? Okay. >> { >> int current_order = page_order(page); >> + int pages; >> >> /* Take ownership for orders >= pageblock_order */ >> if (current_order >= pageblock_order) { >> @@ -1157,19 +1169,39 @@ static void try_to_steal_freepages(struct zone *zone, struct page *page, >> return; >> } >> >> - if (current_order >= pageblock_order / 2 || >> - start_type == MIGRATE_RECLAIMABLE || >> - start_type == MIGRATE_UNMOVABLE || >> - page_group_by_mobility_disabled) { >> - int pages; >> + pages = move_freepages_block(zone, page, start_type); >> >> - pages = move_freepages_block(zone, page, start_type); >> + /* Claim the whole block if over half of it is free */ >> + if (pages >= (1 << (pageblock_order-1)) || >> + page_group_by_mobility_disabled) >> + set_pageblock_migratetype(page, start_type); >> +} >> >> - /* Claim the whole block if over half of it is free */ >> - if (pages >= (1 << (pageblock_order-1)) || >> - page_group_by_mobility_disabled) >> - set_pageblock_migratetype(page, start_type); >> +static int find_suitable_fallback(struct free_area *area, unsigned int order, >> + int migratetype, bool *can_steal) > > Same here. Okay. >> +{ >> + int i; >> + int fallback_mt; >> + >> + if (area->nr_free == 0) >> + return -1; >> + >> + *can_steal = false; >> + for (i = 0;; i++) { >> + fallback_mt = fallbacks[migratetype][i]; >> + if (fallback_mt == MIGRATE_RESERVE) >> + break; >> + >> + if (list_empty(&area->free_list[fallback_mt])) >> + continue; >> + >> + if (can_steal_fallback(order, migratetype)) >> + *can_steal = true; >> + >> + return i; > > You want to return fallback_mt, not 'i', no? Yes. I will fix it. Thanks. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/