mm: Some cleanups for page allocator APIs
| From: | Brendan Jackman <jackmanb-AT-google.com> | |
| To: | Andrew Morton <akpm-AT-linux-foundation.org>, Vlastimil Babka <vbabka-AT-kernel.org>, Suren Baghdasaryan <surenb-AT-google.com>, Michal Hocko <mhocko-AT-suse.com>, Johannes Weiner <hannes-AT-cmpxchg.org>, Zi Yan <ziy-AT-nvidia.com>, Muchun Song <muchun.song-AT-linux.dev>, Oscar Salvador <osalvador-AT-suse.de>, David Hildenbrand <david-AT-kernel.org>, Lorenzo Stoakes <ljs-AT-kernel.org>, "Liam R. Howlett" <liam-AT-infradead.org>, Mike Rapoport <rppt-AT-kernel.org>, Matthew Brost <matthew.brost-AT-intel.com>, Joshua Hahn <joshua.hahnjy-AT-gmail.com>, Rakie Kim <rakie.kim-AT-sk.com>, Byungchul Park <byungchul-AT-sk.com>, Ying Huang <ying.huang-AT-linux.alibaba.com>, Alistair Popple <apopple-AT-nvidia.com>, Hao Li <hao.li-AT-linux.dev>, Christoph Lameter <cl-AT-gentwo.org>, David Rientjes <rientjes-AT-google.com>, Roman Gushchin <roman.gushchin-AT-linux.dev>, Sebastian Andrzej Siewior <bigeasy-AT-linutronix.de>, Clark Williams <clrkwllms-AT-kernel.org>, Steven Rostedt <rostedt-AT-goodmis.org> | |
| Subject: | [PATCH v3 00/16] mm: Some cleanups for page allocator APIs | |
| Date: | Mon, 29 Jun 2026 13:11:49 +0000 | |
| Message-ID: | <20260629-alloc-trylock-v3-0-57bef0eadbc2@google.com> | |
| Cc: | "Harry Yoo (Oracle)" <harry-AT-kernel.org>, Gregory Price <gourry-AT-gourry.net>, Johannes Weiner <hannes-AT-cmpxchg.org>, Alexei Starovoitov <ast-AT-kernel.org>, Matthew Wilcox <willy-AT-infradead.org>, Hao Ge <hao.ge-AT-linux.dev>, linux-mm-AT-kvack.org, linux-kernel-AT-vger.kernel.org, linux-rt-devel-AT-lists.linux.dev, Brendan Jackman <jackmanb-AT-google.com>, Peter Zijlstra <peterz-AT-infradead.org>, Ingo Molnar <mingo-AT-redhat.com>, Arnaldo Carvalho de Melo <acme-AT-kernel.org>, Namhyung Kim <namhyung-AT-kernel.org>, Mark Rutland <mark.rutland-AT-arm.com>, Alexander Shishkin <alexander.shishkin-AT-linux.intel.com>, Jiri Olsa <jolsa-AT-kernel.org>, Ian Rogers <irogers-AT-google.com>, Adrian Hunter <adrian.hunter-AT-intel.com>, James Clark <james.clark-AT-linaro.org>, Sean Christopherson <seanjc-AT-google.com>, Paolo Bonzini <pbonzini-AT-redhat.com>, kvm-AT-vger.kernel.org, Thomas Gleixner <tglx-AT-kernel.org>, Borislav Petkov <bp-AT-alien8.de>, Dave Hansen <dave.hansen-AT-linux.intel.com>, x86-AT-kernel.org, "H. Peter Anvin" <hpa-AT-zytor.com>, Robin Holt <robinmholt-AT-gmail.com>, Steve Wahl <steve.wahl-AT-hpe.com>, Arnd Bergmann <arnd-AT-arndb.de>, Greg Kroah-Hartman <gregkh-AT-linuxfoundation.org>, Dimitris Michailidis <dmichail-AT-fungible.com>, Andrew Lunn <andrew+netdev-AT-lunn.ch>, "David S. Miller" <davem-AT-davemloft.net>, Eric Dumazet <edumazet-AT-google.com>, Jakub Kicinski <kuba-AT-kernel.org>, Paolo Abeni <pabeni-AT-redhat.com> | |
| Archive-link: | Article |
This is based on mm-new, it depends on moving alloc_tag to mm/ [0]. [0] https://lore.kernel.org/all/aj5QBtJcphPElczI@lucifer/ Some tweaks and cleanups for page allocator entrypoint and flags. This is motivated by preparation for __GFP_UNMAPPED [1] (which will probably become ALLOC_UNMAPPED in its next iteration), but all this is supposed to be an improvement to the codebase in its own right: unifying code paths, reducing API surface, and removing GFP flags. [1] https://lore.kernel.org/all/20260320-page_alloc-unmapped-... This started with unifying __alloc_frozen_pages[_nolock]_noprof() and expanded from there. Unifying the nolock allocator entrypoint with the normal allocator entrypoint means adding an alloc_flags argument to the later (only exposed within mm/). This presents an opportunity to take advantage of that arg to remove some GFP flags, if we add that alloc_flags arg a bit more broadly to allocator entrypoints. To distinguish between mm-internal and "public" allocator entrypoints, it makes sense to use the __ prefix. There are already some public APIs with that prefix. For *alloc_pages*, just removing those variants seems like a nice cleanup anyway, so do that. For get_free_pages, the "__" variant is the _only_ variant and it's very widely used, so it doesn't seem worthwhile to modify that. Therefore, scope this "__" change specifically to the *alloc_pages* API, which means we leave the *folio_alloc* API untouched too, even though that could probably be cleaned up if so desired. Tested: - KVM, mm, and BPF selftests in a QEMU VM - kunit.py on x86_64 - For the ALLOC_NO_CODETAG bits I just booted a VM and read /proc/allocinfo. I confirmed that if I remove ALLOC_NO_CODETAG, the kernel crashes in early boot, so I was at least booting code that depends on this logic. I used Google's internal version of Antigravity (AI coding harness) to do the repetitive bits, those commits are marked with Assisted-by, the rest is manual. Signed-off-by: Brendan Jackman <jackmanb@google.com> --- Changes in v3: - Created mm/page_alloc.h - Fixed EXPORT_SYMBOL() issues - Reworded commit messages per Sashiko's pointers - Dropped rename of alloc_flags arg in prepare_alloc_pages() (Suren) - Renamed gfp_to_alloc_flags_nonblocking() too after rebasing onto: https://lore.kernel.org/all/20260623004600.113347-1-jp.ko... - Link to v2: https://patch.msgid.link/20260622-alloc-trylock-v2-0-31f3... Changes in v2: - Fixed up whitespace in nolock unification patch - Introduced ALLOC_DEFAULT to replace literal 0 for alloc_flags - All other patches are new - Link to v1: https://patch.msgid.link/20260617-alloc-trylock-v1-1-83fd... --- Brendan Jackman (16): mm/page_alloc: rename ALLOC_TRYLOCK -> ALLOC_NOLOCK mm/page_alloc: some renames to clarify alloc_flags scopes mm: name some args in a function declaration mm: Split out internal page_alloc.h mm/page_alloc: unify __alloc_frozen_pages[_nolock]_noprof() mm/page_alloc: relax GFP WARN in nolock allocs mm: move some stuff to mm/page_alloc.h perf/x86/intel: Use higher-level allocator API KVM: VMX: Use higher-level allocator API x86/virt: Use higher-level allocator API sgi-xp: Use higher-level allocator API net/funeth: Switch to higher-level allocator API mm: Remove __alloc_pages_node() mm: Move __alloc_pages() to mm/page_alloc.h mm: replace __GFP_NO_CODETAG with ALLOC_NO_CODETAG mm: remove the __GFP_NO_OBJ_EXT flag Documentation/admin-guide/cgroup-v1/cpusets.rst | 2 +- Documentation/admin-guide/mm/transhuge.rst | 2 +- MAINTAINERS | 1 + arch/x86/events/intel/ds.c | 6 +- arch/x86/kvm/vmx/vmx.c | 2 +- arch/x86/virt/hw.c | 2 +- drivers/misc/sgi-xp/xpc_uv.c | 2 +- drivers/net/ethernet/fungible/funeth/funeth_rx.c | 2 +- include/linux/gfp.h | 54 +--- mm/alloc_tag.c | 22 +- mm/compaction.c | 5 +- mm/hugetlb.c | 4 +- mm/internal.h | 253 ------------------ mm/khugepaged.c | 1 + mm/memory-failure.c | 1 + mm/memory_hotplug.c | 1 + mm/mempolicy.c | 11 +- mm/mm_init.c | 1 + mm/page_alloc.c | 259 ++++++++++--------- mm/page_alloc.h | 316 +++++++++++++++++++++++ mm/page_frag_cache.c | 6 +- mm/page_isolation.c | 1 + mm/page_owner.c | 2 +- mm/show_mem.c | 1 + mm/slub.c | 7 +- mm/swap.c | 1 + mm/vmscan.c | 1 + mm/vmstat.c | 1 + tools/include/linux/gfp_types.h | 7 - 29 files changed, 506 insertions(+), 468 deletions(-) --- base-commit: ec005628e9dbcef26b761fa860f264fe6e5fd690 change-id: 20260617-alloc-trylock-14ad37dab337 Best regards, -- Brendan Jackman <jackmanb@google.com>
