mm/page_alloc: use get_pfnblock_migratetype to avoid extra page_to_pfn
authorKemeng Shi <shikemeng@huaweicloud.com>
Fri, 11 Aug 2023 11:59:45 +0000 (19:59 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 21 Aug 2023 20:37:51 +0000 (13:37 -0700)
We have get_pageblock_migratetype and get_pfnblock_migratetype to get
migratetype of page.  get_pfnblock_migratetype accepts both page and pfn
from caller while get_pageblock_migratetype only accept page and get pfn
with page_to_pfn from page.

In case we already record pfn of page, we can simply call
get_pfnblock_migratetype to avoid a page_to_pfn.

Link: https://lkml.kernel.org/r/20230811115945.3423894-3-shikemeng@huaweicloud.com
Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
Acked-by: Mel Gorman <mgorman@techsingularity.net>
Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/page_alloc.c

index 5e67fe9..986b56d 100644 (file)
@@ -813,7 +813,7 @@ static inline void __free_one_page(struct page *page,
                         * pageblock isolation could cause incorrect freepage or CMA
                         * accounting or HIGHATOMIC accounting.
                         */
-                       int buddy_mt = get_pageblock_migratetype(buddy);
+                       int buddy_mt = get_pfnblock_migratetype(buddy, buddy_pfn);
 
                        if (migratetype != buddy_mt
                                        && (!migratetype_is_mergeable(migratetype) ||
@@ -889,7 +889,7 @@ int split_free_page(struct page *free_page,
                goto out;
        }
 
-       mt = get_pageblock_migratetype(free_page);
+       mt = get_pfnblock_migratetype(free_page, free_page_pfn);
        if (likely(!is_migrate_isolate(mt)))
                __mod_zone_freepage_state(zone, -(1UL << order), mt);