From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D78B7823DE for ; Sun, 28 Jun 2026 02:31:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782613895; cv=none; b=TBjAhi1S9zJSV8P3N1ZEFWmIARIK+23OntBYfvP39DK5lA4I9eSh2TuK1Bng7wskqyv+gIHXK7yASX581aIYI5Bk9VfYZijp3XhtxrO6t4xXti6OaUq+lhwJiEJFuUkJq8Kpofl76dxGKhljdohTFyDvpdhuU08Z3h7RIoStBU0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782613895; c=relaxed/simple; bh=0z17b9Vy9mDiZXMt0EmmirCaZLuLnT1xFF6zzz2nbeU=; h=Date:To:From:Subject:Message-Id; b=GS3gtMPluxtpiwdH9dGGbZ59wCW0/0f8AHlGDH8zg+hj2ztjA7D63CBd0sipOdDPVVIuW3hP0ejEXf3cZCc25I5arFjZFcpvGN39OJaOANKa2ej3HmzY0n+wK7LMuLFwKt7+rQZdf2lyE3+PtS5ch1X8x4rRMRPFz22js2IGHZU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux-foundation.org header.i=@linux-foundation.org header.b=XFqyxfvv; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux-foundation.org header.i=@linux-foundation.org header.b="XFqyxfvv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3B6C31F000E9; Sun, 28 Jun 2026 02:31:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux-foundation.org; s=korg; t=1782613893; bh=DXUbFMxA60nnOwe0H0VLvHWks2g3TCVH80vgEBT4RPM=; h=Date:To:From:Subject; b=XFqyxfvvA/VJoRiLRRU6qByygQJWgyHcL4mlk0pg8etZtDZdmnLWVq/EuxndwCgeQ EbV1Av/50pV3VOVvWUVJB3rxL/bAqsmFOTzNkYUWnIe8IbJIM+mnpJUpkWZlaH8o/e s72c7JyEWuuJn1couXyQIAnv9ARvAdwJyi7YbfJU= Date: Sat, 27 Jun 2026 19:31:32 -0700 To: mm-commits@vger.kernel.org,ye.liu@linux.dev,akpm@linux-foundation.org From: Andrew Morton Subject: [to-be-updated] mm-page_owner-extract-skip_buddy_pages-helper-to-unify-buddy-page-skipping.patch removed from -mm tree Message-Id: <20260628023133.3B6C31F000E9@smtp.kernel.org> Precedence: bulk X-Mailing-List: mm-commits@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: The quilt patch titled Subject: mm/page_owner: extract skip_buddy_pages() helper to unify buddy page skipping has been removed from the -mm tree. Its filename was mm-page_owner-extract-skip_buddy_pages-helper-to-unify-buddy-page-skipping.patch This patch was dropped because an updated version will be issued ------------------------------------------------------ From: Ye Liu Subject: mm/page_owner: extract skip_buddy_pages() helper to unify buddy page skipping Date: Tue, 23 Jun 2026 14:52:26 +0800 Three places in page_owner.c duplicate the same pattern: check if a page is PageBuddy, read its order via buddy_order_unsafe(), advance the pfn past the buddy block if the order is valid, and continue. Consolidate them into a single inline helper skip_buddy_pages(). The function returns true (skip) for any buddy page and advances @pfn past the block when the order is valid; returns false if the page is not a buddy page and should be processed normally. The old init_pages_in_zone() variant used "order > 0" as an extra guard before advancing pfn, but the continue was unconditional and (1UL << 0) - 1 == 0, so the behaviour is identical. The comment about zone->lock is preserved in the helper's kernel-doc. No functional change. Link: https://lore.kernel.org/20260623065234.31866-2-ye.liu@linux.dev Signed-off-by: Ye Liu Cc: Brendan Jackman Cc: Johannes Weiner Cc: Michal Hocko Cc: Suren Baghdasaryan Cc: Vlastimil Babka Cc: Zi Yan Signed-off-by: Andrew Morton --- mm/page_owner.c | 52 +++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 26 deletions(-) --- a/mm/page_owner.c~mm-page_owner-extract-skip_buddy_pages-helper-to-unify-buddy-page-skipping +++ a/mm/page_owner.c @@ -422,6 +422,29 @@ void __folio_copy_owner(struct folio *ne rcu_read_unlock(); } +/* + * Check if a page is a buddy page and advance @pfn past the entire buddy block. + * This safely reads the buddy order without the zone lock, which may cause us + * to skip less than the full buddy block, but that is acceptable for page owner + * iteration purposes. + * + * Return: true if the page was skipped (caller should continue its loop), + * false if the page is not a buddy page and should be processed normally. + */ +static inline bool skip_buddy_pages(unsigned long *pfn, struct page *page) +{ + unsigned long order; + + if (!PageBuddy(page)) + return false; + + order = buddy_order_unsafe(page); + if (order <= MAX_PAGE_ORDER) + *pfn += (1UL << order) - 1; + + return true; +} + void pagetypeinfo_showmixedcount_print(struct seq_file *m, pg_data_t *pgdat, struct zone *zone) { @@ -461,14 +484,8 @@ void pagetypeinfo_showmixedcount_print(s if (page_zone(page) != zone) continue; - if (PageBuddy(page)) { - unsigned long freepage_order; - - freepage_order = buddy_order_unsafe(page); - if (freepage_order <= MAX_PAGE_ORDER) - pfn += (1UL << freepage_order) - 1; + if (skip_buddy_pages(&pfn, page)) continue; - } if (PageReserved(page)) continue; @@ -697,13 +714,8 @@ read_page_owner(struct file *file, char } page = pfn_to_page(pfn); - if (PageBuddy(page)) { - unsigned long freepage_order = buddy_order_unsafe(page); - - if (freepage_order <= MAX_PAGE_ORDER) - pfn += (1UL << freepage_order) - 1; + if (skip_buddy_pages(&pfn, page)) continue; - } page_ext = page_ext_get(page); if (unlikely(!page_ext)) @@ -798,20 +810,8 @@ static void init_pages_in_zone(struct zo if (page_zone(page) != zone) continue; - /* - * To avoid having to grab zone->lock, be a little - * careful when reading buddy page order. The only - * danger is that we skip too much and potentially miss - * some early allocated pages, which is better than - * heavy lock contention. - */ - if (PageBuddy(page)) { - unsigned long order = buddy_order_unsafe(page); - - if (order > 0 && order <= MAX_PAGE_ORDER) - pfn += (1UL << order) - 1; + if (skip_buddy_pages(&pfn, page)) continue; - } if (PageReserved(page)) continue; _ Patches currently in -mm which might be from ye.liu@linux.dev are a.patch mm-page_owner-use-migrate_reason_none-instead-of-1-for-last_migrate_reason.patch mm-page_owner-hoist-config_memcg-to-function-level-for-print_page_owner_memcg.patch mm-page_owner-add-missing-newline-to-count_threshold-format-string.patch mm-page_owner-move-free_ts_nsec-output-to-free-section-in-__dump_page_owner.patch mm-page_owner-drop-redundant-page_owner-prefix-from-static-symbols.patch mm-page_owner-clamp-skip_buddy_pages-pfn-advance-at-max_order_nr_pages-boundary.patch mm-page_owner-use-memcg_data-snapshot-instead-of-pagememcgkmem-to-avoid-toctou-vm_bug_on.patch