mm: preparatory patches for PMD level swap entries
Subsystems (16)
Usama Arif
reviewercover mm: preparatory patches for PMD level swap entries
This is the preparatory part of the PMD page table swapin work. The full PMD swap entry series has been split into two parts:
1. this preparatory series, which contains the first 6 patches. Zi [1] and Lance [2] suggested to separate this out from the core series.
2. the PMD swap entry core series, which depends on this one. I will send this once the preparatory series is merged in mm-new as v3 as the combined is currently at v2 [1].
I have not marked this prep series as v3, as its not really adding support for PMD swap entries.
This series does not introduce PMD swap entries and does not install any new page-table entry type. It only cleans up existing PMD softleaf helpers and call sites so the follow-up PMD swap entry series can be smaller and easier to review.
It should be safe to merge independently. The patches are either helper additions, refactors of existing open-coded logic, defensive checks that preserve current migration/device-private behavior, or a mechanical rename of the PMD softleaf Kconfig gate. The follow-up series depends on these helpers, but this series does not depend on the follow-up series.
Patch breakdown:
1. mm: add softleaf_to_pmd() and convert existing callers Add the PMD counterpart to softleaf_to_pte() and convert existing swp_entry_to_pmd() users that are constructing PMD softleaf entries.
2. mm: extract mm_prepare_for_swap_entries() helper Hoist the "register mm with swapoff" double-checked-locking pattern out of try_to_unmap_one() and copy_nonpresent_pte() so future PMD-level users do not need another open-coded copy.
3. fs/proc: use softleaf_has_pfn() in pagemap PMD walker Avoid assuming every non-present PMD softleaf entry encodes a PFN. Existing migration/device-private behavior is preserved.
4. mm/huge_memory: move softleaf_to_folio() inside migration branch Keep the folio lookup in change_non_present_huge_pmd() scoped to the migration-entry branch that actually needs it.
5. mm/migrate_device: move softleaf_to_folio() inside device-private branch
Apply the same ordering cleanup to migrate_vma_collect_pmd(): only derive a folio after confirming the PMD entry is device-private.
6. mm: rename ARCH_ENABLE_THP_MIGRATION to ARCH_SUPPORTS_PMD_SOFTLEAF Rename the architecture gate to describe what it actually enables:
PMD softleaf entries. Migration remains the only current user in this series; the follow-up series adds PMD swap entries.
The patches are based on akpm/mm-new as of 29 June (git hash: 15654b0268cd65b4e673510c0377774e61b86397)
[1] https://lore.kernel.org/all/[email protected]/
[2] https://lore.kernel.org/all/[email protected]/#t
[3] https://lore.kernel.org/all/[email protected]/
Usama Arif (6):
mm: add softleaf_to_pmd() and convert existing callers
mm: extract mm_prepare_for_swap_entries() helper fs/proc: use softleaf_has_pfn() in pagemap PMD walker mm/huge_memory: move softleaf_to_folio() inside migration branch mm/migrate_device: move softleaf_to_folio() inside device-private
branch
mm: rename ARCH_ENABLE_THP_MIGRATION to ARCH_SUPPORTS_PMD_SOFTLEAF
arch/arm64/Kconfig | 2 +- arch/arm64/include/asm/pgtable.h | 4 +-- arch/loongarch/Kconfig | 2 +- arch/powerpc/include/asm/book3s/64/pgtable.h | 2 +- arch/powerpc/platforms/Kconfig.cputype | 2 +- arch/riscv/Kconfig | 2 +- arch/riscv/include/asm/pgtable.h | 8 +++--- arch/s390/Kconfig | 2 +- arch/s390/include/asm/pgtable.h | 2 +- arch/x86/Kconfig | 2 +- arch/x86/include/asm/pgtable.h | 2 +- fs/proc/task_mmu.c | 3 ++- include/linux/huge_mm.h | 2 +- include/linux/leafops.h | 28 +++++++++++++++++--- include/linux/pgtable.h | 2 +- include/linux/swapops.h | 6 ++--- mm/Kconfig | 2 +- mm/debug_vm_pgtable.c | 12 ++++----- mm/hmm.c | 4 +-- mm/huge_memory.c | 17 ++++++------ mm/internal.h | 13 +++++++++ mm/memory.c | 9 +------ mm/migrate.c | 4 +-- mm/migrate_device.c | 19 +++++++------ mm/rmap.c | 9 ++----- 25 files changed, 93 insertions(+), 67 deletions(-)
Signature · 1 line
2.53.0-Meta
Usama Arif
reviewerPATCH 1/6 mm: add softleaf_to_pmd() and convert existing callers
Add softleaf_to_pmd() as the PMD counterpart to softleaf_to_pte(), completing the symmetry of the softleaf abstraction for page table leaf entries.
The upcoming PMD swap entry support needs to construct PMD entries from swap entries. Converting existing swp_entry_to_pmd() callers to softleaf_to_pmd() in a prep patch keeps the feature patches focused on new functionality rather than mixing refactoring with new code.
--- include/linux/leafops.h | 20 ++++++++++++++++++++ mm/debug_vm_pgtable.c | 4 ++-- mm/huge_memory.c | 12 ++++++------ mm/migrate_device.c | 2 +- 4 files changed, 29 insertions(+), 9 deletions(-)
include/linux/leafops.h +20 -0
@@ -108,6 +108,21 @@ static inline softleaf_t softleaf_from_pmd(pmd_t pmd) return swp_entry(__swp_type(arch_entry), __swp_offset(arch_entry)); } +/** +* softleaf_to_pmd() - Obtain a PMD entry from a leaf entry. +* @entry: Leaf entry. +* +* This generates an architecture-specific PMD entry that can be utilised to +* encode the metadata the leaf entry encodes. +* +* Returns: Architecture-specific PMD entry encoding leaf entry. +*/ +static inline pmd_t softleaf_to_pmd (softleaf_t entry) +{ +/* Temporary until swp_entry_t eliminated. */ +return swp_entry_to_pmd (entry); +} +#else static inline softleaf_t softleaf_from_pmd (pmd_t pmd)
@@ -115,6 +130,11 @@ static inline softleaf_t softleaf_from_pmd(pmd_t pmd) return softleaf_mk_none(); } +static inline pmd_t softleaf_to_pmd (softleaf_t entry) +{ +return __pmd (0 ); +} +#endif /**
mm/debug_vm_pgtable.c +2 -2
@@ -758,7 +758,7 @@ static void __init pmd_leaf_soft_dirty_tests(struct pgtable_debug_args *args)return ;pr_debug ("Validating PMD swap soft dirty\n" ); - pmd =swp_entry_to_pmd (args->leaf_entry); + pmd =softleaf_to_pmd (args->leaf_entry);WARN_ON (!pmd_is_huge (pmd));WARN_ON (!pmd_is_valid_softleaf (pmd));
@@ -829,7 +829,7 @@ static void __init pmd_softleaf_tests(struct pgtable_debug_args *args)return ;pr_debug ("Validating PMD swap\n" ); - pmd1 =swp_entry_to_pmd (args->leaf_entry); + pmd1 =softleaf_to_pmd (args->leaf_entry);WARN_ON (!pmd_is_huge (pmd1));WARN_ON (!pmd_is_valid_softleaf (pmd1));
mm/huge_memory.c +6 -6
@@ -1819,7 +1819,7 @@ static void copy_huge_non_present_pmd(if (softleaf_is_migration_write (entry) ||softleaf_is_migration_read_exclusive (entry)) { entry =make_readable_migration_entry (swp_offset (entry)); - pmd =swp_entry_to_pmd (entry); + pmd =softleaf_to_pmd (entry);if (pmd_swp_soft_dirty (*src_pmd)) pmd =pmd_swp_mksoft_dirty (pmd);if (pmd_swp_uffd_wp (*src_pmd))
@@ -1832,7 +1832,7 @@ static void copy_huge_non_present_pmd(*/ if (softleaf_is_device_private_write (entry)) { entry =make_readable_device_private_entry (swp_offset (entry)); - pmd =swp_entry_to_pmd (entry); + pmd =softleaf_to_pmd (entry);if (pmd_swp_soft_dirty (*src_pmd)) pmd =pmd_swp_mksoft_dirty (pmd);
@@ -2570,12 +2570,12 @@ static void change_non_present_huge_pmd(struct mm_struct *mm, entry =make_readable_exclusive_migration_entry (swp_offset (entry)); else entry =make_readable_migration_entry (swp_offset (entry)); - newpmd =swp_entry_to_pmd (entry); + newpmd =softleaf_to_pmd (entry);if (pmd_swp_soft_dirty (*pmd)) newpmd =pmd_swp_mksoft_dirty (newpmd); }else if (softleaf_is_device_private_write (entry)) { entry =make_readable_device_private_entry (swp_offset (entry)); - newpmd =swp_entry_to_pmd (entry); + newpmd =softleaf_to_pmd (entry);if (pmd_swp_uffd_wp (*pmd)) newpmd =pmd_swp_mkuffd_wp (newpmd); }else {
@@ -4923,7 +4923,7 @@ int set_pmd_migration_entry(struct page_vma_mapped_walk *pvmw, }/* Set PMD. */ - pmdswp =swp_entry_to_pmd (entry); + pmdswp =softleaf_to_pmd (entry);if (softdirty) pmdswp =pmd_swp_mksoft_dirty (pmdswp);if (uffd_wp)
@@ -4976,7 +4976,7 @@ void remove_migration_pmd(struct page_vma_mapped_walk *pvmw, struct page *new)else entry =make_readable_device_private_entry (page_to_pfn (new)); - pmde =swp_entry_to_pmd (entry); + pmde =softleaf_to_pmd (entry);if (pmd_swp_soft_dirty (*pvmw->pmd)) pmde =pmd_swp_mksoft_dirty (pmde);
mm/migrate_device.c +1 -1
@@ -835,7 +835,7 @@ static int migrate_vma_insert_huge_pmd_page(struct migrate_vma *migrate,else swp_entry =make_readable_device_private_entry (page_to_pfn (page)); - entry =swp_entry_to_pmd (swp_entry); + entry =softleaf_to_pmd (swp_entry); }else {if (folio_is_zone_device (folio) && !folio_is_device_coherent (folio)) {
Signature · 1 line
2.53.0-Meta
Re: [PATCH 1/6] mm: add softleaf_to_pmd() and convert existing callers
Quoted 10 lines · Usama Arif
Add
softleaf_to_pmd()as the PMD counterpart tosoftleaf_to_pte(), completing the symmetry of the softleaf abstraction for page table leaf entries.The upcoming PMD swap entry support needs to construct PMD entries from swap entries. Converting existing
swp_entry_to_pmd()callers tosoftleaf_to_pmd()in a prep patch keeps the feature patches focused on new functionality rather than mixing refactoring with new code.
Quoted 4 lines
Reviewed-by Zi Yan <[email protected]>Signed-off-by Usama Arif <[email protected]>---
LGTM. Feel free to add:
Usama Arif
reviewerPATCH 2/6 mm: extract mm_prepare_for_swap_entries() helper
In reply to Usama ArifWhen a swap entry is installed in a page table, the mm must be added to init_mm.mmlist so that swapoff can find and unuse its swap entries. This double-checked locking pattern is currently open-coded in try_to_unmap_one() and copy_nonpresent_pte().
Move it into mm_prepare_for_swap_entries() in mm/internal.h and convert both callers so it can be reused by upcoming PMD-level swap entry code paths that also need to register the mm with swapoff.
copy_nonpresent_pte() previously inserted into &src_mm->mmlist rather than &init_mm.mmlist, but the insertion point is irrelevant, mmlist is a circular list and swapoff walks it entirely from init_mm.mmlist, so only membership matters, not position.
--- mm/internal.h | 13 +++++++++++++ mm/memory.c | 9 +-------- mm/rmap.c | 7 +------ 3 files changed, 15 insertions(+), 14 deletions(-)
mm/internal.h +13 -0
@@ -1956,4 +1956,17 @@ static inline int get_sysctl_max_map_count(void)bool may_expand_vm (struct mm_struct *mm,const vma_flags_t *vma_flags,unsigned long npages); +/* +* Ensure @mm is on the init_mm.mmlist so swapoff can find it. +*/ +static inline void mm_prepare_for_swap_entries (struct mm_struct *mm) +{ +if (list_empty (&mm->mmlist)) { +spin_lock (&mmlist_lock); +if (list_empty (&mm->mmlist)) +list_add (&mm->mmlist, &init_mm.mmlist); +spin_unlock (&mmlist_lock); + } +} +#endif /* __MM_INTERNAL_H */
mm/memory.c +1 -8
@@ -953,14 +953,7 @@ copy_nonpresent_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,if (swap_dup_entry_direct (entry) <0 )return -EIO ; -/* make sure dst_mm is on swapoff's mmlist. */ -if (unlikely (list_empty (&dst_mm->mmlist))) { -spin_lock (&mmlist_lock); -if (list_empty (&dst_mm->mmlist)) -list_add (&dst_mm->mmlist, - &src_mm->mmlist); -spin_unlock (&mmlist_lock); - } +mm_prepare_for_swap_entries (dst_mm);/* Mark the swap entry as shared. */ if (pte_swp_exclusive (orig_pte)) { pte =pte_swp_clear_exclusive (orig_pte);
mm/rmap.c +1 -6
@@ -2304,12 +2304,7 @@ static bool try_to_unmap_one(struct folio *folio, struct vm_area_struct *vma,set_pte_at (mm, address, pvmw.pte, pteval); goto walk_abort; } -if (list_empty (&mm->mmlist)) { -spin_lock (&mmlist_lock); -if (list_empty (&mm->mmlist)) -list_add (&mm->mmlist, &init_mm.mmlist); -spin_unlock (&mmlist_lock); - } +mm_prepare_for_swap_entries (mm);dec_mm_counter (mm,MM_ANONPAGES );inc_mm_counter (mm,MM_SWAPENTS ); swp_pte =swp_entry_to_pte (entry);
Signature · 1 line
2.53.0-Meta
Re: [PATCH 2/6] mm: extract mm_prepare_for_swap_entries() helper
Quoted 28 lines · Usama Arif
When a swap entry is installed in a page table, the mm must be added to init_mm.mmlist so that swapoff can find and unuse its swap entries. This double-checked locking pattern is currently open-coded in
try_to_unmap_one()andcopy_nonpresent_pte().Move it into
mm_prepare_for_swap_entries()inmm/internal.hand convert both callers so it can be reused by upcoming PMD-level swap entry code paths that also need to register the mm with swapoff.
copy_nonpresent_pte()previously inserted into&src_mm->mmlistrather than &init_mm.mmlist, but the insertion point is irrelevant, mmlist is a circular list and swapoff walks it entirely from init_mm.mmlist, so only membership matters, not position.Reviewed-by Dev Jain <[email protected]>Reviewed-by Zi Yan <[email protected]>Signed-off-by Usama Arif <[email protected]>--- mm/internal.h | 13 +++++++++++++ mm/memory.c | 9 +-------- mm/rmap.c | 7 +------ 3 files changed, 15 insertions(+), 14 deletions(-)mm/internal.h +0
-0
mm/internal.h static inline int get_sysctl_max_map_count(void) · line 1961
Quoted 6 lines
mm/internal.h +3
-0@@ -1956,4 +1956,17 @@ static inline int get_sysctl_max_map_count(void)bool may_expand_vm (struct mm_struct *mm,const vma_flags_t *vma_flags,unsigned long npages); +/* +* Ensure @mm is on the init_mm.mmlist so swapoff can find it. +*/
Comment fits into a single line and I don't think we need it (function name is self-explaining enough).
mm/internal.h static inline int get_sysctl_max_map_count(void) · line 1971
Quoted 10 lines
mm/internal.h +10
-0+static inline void mm_prepare_for_swap_entries (struct mm_struct *mm) +{ +if (list_empty (&mm->mmlist)) { +spin_lock (&mmlist_lock); +if (list_empty (&mm->mmlist)) +list_add (&mm->mmlist, &init_mm.mmlist); +spin_unlock (&mmlist_lock); + } +} +
Signature · 3 lines
Cheers, David
Usama Arif
reviewerPATCH 3/6 fs/proc: use softleaf_has_pfn() in pagemap PMD walker
In reply to Usama Arifpagemap_pmd_range_thp() assumes that every non-present PMD is a migration entry and unconditionally calls softleaf_to_page(). This will crash on any non-present PMD type that does not encode a PFN, such as the upcoming PMD-level swap entries.
Guard the page lookup with softleaf_has_pfn(), matching how pte_to_pagemap_entry() already handles non-present PTEs.
--- fs/proc/task_mmu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/proc/task_mmu.c +2 -1
@@ -2129,7 +2129,8 @@ static int pagemap_pmd_range_thp(pmd_t *pmdp, unsigned long addr, flags |=PM_SOFT_DIRTY ;if (pmd_swp_uffd_wp (pmd)) flags |=PM_UFFD_WP ; - page =softleaf_to_page (entry); +if (softleaf_has_pfn (entry)) + page =softleaf_to_page (entry); }if (page) {
Signature · 1 line
2.53.0-Meta
Usama Arif
reviewerPATCH 4/6 mm/huge_memory: move softleaf_to_folio() inside migration branch
In reply to Usama Arifchange_non_present_huge_pmd() calls softleaf_to_folio() unconditionally at the top of the function. softleaf_to_folio() extracts a PFN from the entry and converts it to a folio pointer, which is only meaningful for migration and device_private entries that encode a real PFN.
A swap entry encodes a swap offset instead, so softleaf_to_folio() would produce a bogus pointer and crash on mprotect() when a PMD swap entry is present.
Move the call into the migration_write branch where the folio is actually used, so the function is safe for any non-present PMD type.
--- mm/huge_memory.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
mm/huge_memory.c +2 -1
@@ -2557,11 +2557,12 @@ static void change_non_present_huge_pmd(struct mm_struct *mm, bool uffd_wp_resolve) {softleaf_t entry =softleaf_from_pmd (*pmd); -const struct folio *folio =softleaf_to_folio (entry);pmd_t newpmd;VM_WARN_ON (!pmd_is_valid_softleaf (*pmd));if (softleaf_is_migration_write (entry)) { +const struct folio *folio =softleaf_to_folio (entry); +/* * A protection check is difficult so * just be safe and disable write
Signature · 1 line
2.53.0-Meta
Usama Arif
reviewerPATCH 5/6 mm/migrate_device: move softleaf_to_folio() inside device-private branch
In reply to Usama Arifmigrate_vma_collect_pmd() calls softleaf_to_folio() on a non-present PMD before checking the entry's type. softleaf_to_folio() converts the entry's offset to a PFN, which is only meaningful for migration or device-private entries.
A PMD swap entry's offset is a swap offset, not a PFN, so the lookup would either return a bogus folio pointer or trip pfn_to_page validation on a debug kernel. In the non-device-private path the returned folio is then unused (the OR short-circuits to migrate_vma_collect_skip()), but the lookup itself is already unsafe.
Move the softleaf_to_folio() call inside the device-private branch where the folio is actually needed, mirroring the equivalent change_non_present_huge_pmd() fix.
--- mm/migrate_device.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
mm/migrate_device.c +7 -4
@@ -166,11 +166,14 @@ static int migrate_vma_collect_huge_pmd(pmd_t *pmdp, unsigned long start, }else if (!pmd_present (*pmdp)) {const softleaf_t entry =softleaf_from_pmd (*pmdp); - folio =softleaf_to_folio (entry); -if (!softleaf_is_device_private (entry) || - !(migrate->flags &MIGRATE_VMA_SELECT_DEVICE_PRIVATE ) || - (folio->pgmap->owner != migrate->pgmap_owner)) { + !(migrate->flags &MIGRATE_VMA_SELECT_DEVICE_PRIVATE )) { +spin_unlock (ptl); +return migrate_vma_collect_skip (start, end, walk); + } + + folio =softleaf_to_folio (entry); +if (folio->pgmap->owner != migrate->pgmap_owner) {spin_unlock (ptl);return migrate_vma_collect_skip (start, end, walk); }
Signature · 1 line
2.53.0-Meta
Re: [PATCH 5/6] mm/migrate_device: move softleaf_to_folio() inside device-private branch
Quoted 35 lines · Usama Arif
migrate_vma_collect_pmd()callssoftleaf_to_folio()on a non-present PMD before checking the entry's type.softleaf_to_folio()converts the entry's offset to a PFN, which is only meaningful for migration or device-private entries.A PMD swap entry's offset is a swap offset, not a PFN, so the lookup would either return a bogus folio pointer or trip
pfn_to_pagevalidation on a debug kernel. In the non-device-private path the returned folio is then unused (the OR short-circuits tomigrate_vma_collect_skip()), but the lookup itself is already unsafe.Move the
softleaf_to_folio()call inside the device-private branch where the folio is actually needed, mirroring the equivalentchange_non_present_huge_pmd()fix.Reviewed-by Zi Yan <[email protected]>Signed-off-by Usama Arif <[email protected]>--- mm/migrate_device.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)mm/migrate_device.c +0
-4@@ -166,11 +166,14 @@ static int migrate_vma_collect_huge_pmd(pmd_t *pmdp, unsigned long start, }else if (!pmd_present (*pmdp)) {const softleaf_t entry =softleaf_from_pmd (*pmdp); - folio =softleaf_to_folio (entry); - if (!softleaf_is_device_private(entry) || - !(migrate->flags &MIGRATE_VMA_SELECT_DEVICE_PRIVATE ) || - (folio->pgmap->owner != migrate->pgmap_owner)) {
mm/migrate_device.c static int migrate_vma_collect_huge_pmd(pmd_t *pmdp, unsigned long start, · line 179
Quoted 10 lines
mm/migrate_device.c +7
-0+ !(migrate->flags & MIGRATE_VMA_SELECT_DEVICE_PRIVATE)) { +spin_unlock (ptl); +return migrate_vma_collect_skip (start, end, walk); + } + + folio =softleaf_to_folio (entry); +if (folio->pgmap->owner != migrate->pgmap_owner) {spin_unlock (ptl);return migrate_vma_collect_skip (start, end, walk); }
LGTM
Signature · 3 lines
Cheers, David
Usama Arif
reviewerPATCH 6/6 mm: rename ARCH_ENABLE_THP_MIGRATION to ARCH_SUPPORTS_PMD_SOFTLEAF
In reply to Usama ArifCONFIG_ARCH_ENABLE_THP_MIGRATION started life gating just PMD-level migration entries, but has grown to gate the entire PMD-level softleaf
machinery: migration entries, device-private entries, and soon swap entries.
Rename CONFIG_ARCH_ENABLE_THP_MIGRATION to CONFIG_ARCH_SUPPORTS_PMD _SOFTLEAF to make this clear. This is a pure rename: the set of selecting architectures (x86, arm64, s390, riscv, loongarch, and powerpc on PPC_BOOK3S_64) and the gating semantics are unchanged.
No functional change intended.
--- arch/arm64/Kconfig | 2 +- arch/arm64/include/asm/pgtable.h | 4 ++-- arch/loongarch/Kconfig | 2 +- arch/powerpc/include/asm/book3s/64/pgtable.h | 2 +- arch/powerpc/platforms/Kconfig.cputype | 2 +- arch/riscv/Kconfig | 2 +- arch/riscv/include/asm/pgtable.h | 8 ++++---- arch/s390/Kconfig | 2 +- arch/s390/include/asm/pgtable.h | 2 +- arch/x86/Kconfig | 2 +- arch/x86/include/asm/pgtable.h | 2 +- include/linux/huge_mm.h | 2 +- include/linux/leafops.h | 8 ++++---- include/linux/pgtable.h | 2 +- include/linux/swapops.h | 6 +++--- mm/Kconfig | 2 +- mm/debug_vm_pgtable.c | 8 ++++---- mm/hmm.c | 4 ++-- mm/huge_memory.c | 2 +- mm/migrate.c | 4 ++-- mm/migrate_device.c | 6 +++--- mm/rmap.c | 2 +- 22 files changed, 38 insertions(+), 38 deletions(-)
arch/arm64/Kconfig +1 -1
@@ -17,7 +17,7 @@ config ARM64 select ARCH_ENABLE_HUGEPAGE_MIGRATION if HUGETLB_PAGE && MIGRATION select ARCH_ENABLE_MEMORY_HOTPLUG select ARCH_ENABLE_SPLIT_PMD_PTLOCK if PGTABLE_LEVELS > 2 - select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE + select ARCH_SUPPORTS_PMD_SOFTLEAF if TRANSPARENT_HUGEPAGE select ARCH_HAS_CACHE_LINE_SIZE select ARCH_HAS_CC_PLATFORM select ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION
arch/arm64/include/asm/pgtable.h +2 -2
@@ -1534,10 +1534,10 @@ static inline pmd_t pmdp_establish(struct vm_area_struct *vma,#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (swp) ((pte_t) { (swp).val }) -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF #define __pmd_to_swp_entry (pmd) ((swp_entry_t) { pmd_val(pmd) })#define __swp_entry_to_pmd (swp) __pmd((swp).val) -#endif /* CONFIG_ARCH_ENABLE_THP_MIGRATION */ +#endif /* CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF */ /* * Ensure that there are not more swap files than can be encoded in the kernel
arch/loongarch/Kconfig +1 -1
@@ -12,7 +12,7 @@ config LOONGARCH select ARCH_NEEDS_DEFER_KASAN select ARCH_DISABLE_KASAN_INLINE select ARCH_ENABLE_MEMORY_HOTPLUG - select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE + select ARCH_SUPPORTS_PMD_SOFTLEAF if TRANSPARENT_HUGEPAGE select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI select ARCH_HAS_CPU_FINALIZE_INIT select ARCH_HAS_CURRENT_STACK_POINTER
arch/powerpc/include/asm/book3s/64/pgtable.h +1 -1
@@ -1060,7 +1060,7 @@ static inline pte_t *pmdp_ptep(pmd_t *pmd)#define pmd_mksoft_dirty (pmd) pte_pmd(pte_mksoft_dirty(pmd_pte(pmd)))#define pmd_clear_soft_dirty (pmd) pte_pmd(pte_clear_soft_dirty(pmd_pte(pmd))) -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF #define pmd_swp_mksoft_dirty (pmd) pte_pmd(pte_swp_mksoft_dirty(pmd_pte(pmd)))#define pmd_swp_soft_dirty (pmd) pte_swp_soft_dirty(pmd_pte(pmd))#define pmd_swp_clear_soft_dirty (pmd) pte_pmd(pte_swp_clear_soft_dirty(pmd_pte(pmd)))
arch/powerpc/platforms/Kconfig.cputype +1 -1
@@ -112,7 +112,7 @@ config PPC_THP depends on PPC_RADIX_MMU || (PPC_64S_HASH_MMU && PAGE_SIZE_64KB) select HAVE_ARCH_TRANSPARENT_HUGEPAGE select HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD - select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE + select ARCH_SUPPORTS_PMD_SOFTLEAF if TRANSPARENT_HUGEPAGE choice prompt "CPU selection"
arch/riscv/Kconfig +1 -1
@@ -22,7 +22,7 @@ config RISCV select ARCH_ENABLE_HUGEPAGE_MIGRATION if HUGETLB_PAGE && MIGRATION select ARCH_ENABLE_MEMORY_HOTPLUG if SPARSEMEM_VMEMMAP select ARCH_ENABLE_SPLIT_PMD_PTLOCK if PGTABLE_LEVELS > 2 - select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE + select ARCH_SUPPORTS_PMD_SOFTLEAF if TRANSPARENT_HUGEPAGE select ARCH_HAS_BINFMT_FLAT select ARCH_HAS_CC_CAN_LINK select ARCH_HAS_CURRENT_STACK_POINTER
arch/riscv/include/asm/pgtable.h +4 -4
@@ -946,7 +946,7 @@ static inline pmd_t pmd_clear_soft_dirty(pmd_t pmd)return pte_pmd (pte_clear_soft_dirty (pmd_pte (pmd))); } -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF static inline bool pmd_swp_soft_dirty (pmd_t pmd) {return pte_swp_soft_dirty (pmd_pte (pmd));
@@ -961,7 +961,7 @@ static inline pmd_t pmd_swp_clear_soft_dirty(pmd_t pmd) {return pte_pmd (pte_swp_clear_soft_dirty (pmd_pte (pmd))); } -#endif /* CONFIG_ARCH_ENABLE_THP_MIGRATION */ +#endif /* CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF */ #endif /* CONFIG_HAVE_ARCH_SOFT_DIRTY */ static inline void set_pmd_at(struct mm_struct *mm, unsigned long addr,
@@ -1208,10 +1208,10 @@ static inline pte_t pte_swp_clear_exclusive(pte_t pte)return __pte (pte_val (pte) & ~_PAGE_SWP_EXCLUSIVE); } -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF #define __pmd_to_swp_entry (pmd) ((swp_entry_t) { pmd_val(pmd) })#define __swp_entry_to_pmd (swp) __pmd((swp).val) -#endif /* CONFIG_ARCH_ENABLE_THP_MIGRATION */ +#endif /* CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF */ /* * In the RV64 Linux scheme, we give the user half of the virtual-address space
arch/s390/Kconfig +1 -1
@@ -82,7 +82,7 @@ config S390 select ARCH_CORRECT_STACKTRACE_ON_KRETPROBE select ARCH_ENABLE_MEMORY_HOTPLUG if SPARSEMEM select ARCH_ENABLE_SPLIT_PMD_PTLOCK if PGTABLE_LEVELS > 2 - select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE + select ARCH_SUPPORTS_PMD_SOFTLEAF if TRANSPARENT_HUGEPAGE select ARCH_HAS_CC_CAN_LINK select ARCH_HAS_CPU_FINALIZE_INIT select ARCH_HAS_CURRENT_STACK_POINTER
arch/s390/include/asm/pgtable.h +1 -1
@@ -903,7 +903,7 @@ static inline pmd_t pmd_clear_soft_dirty(pmd_t pmd)return clear_pmd_bit (pmd,__pgprot (_SEGMENT_ENTRY_SOFT_DIRTY)); } -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF #define pmd_swp_soft_dirty (pmd) pmd_soft_dirty(pmd)#define pmd_swp_mksoft_dirty (pmd) pmd_mksoft_dirty(pmd)#define pmd_swp_clear_soft_dirty (pmd) pmd_clear_soft_dirty(pmd)
arch/x86/Kconfig +1 -1
@@ -70,7 +70,7 @@ config X86 select ARCH_ENABLE_HUGEPAGE_MIGRATION if X86_64 && HUGETLB_PAGE && MIGRATION select ARCH_ENABLE_MEMORY_HOTPLUG if X86_64 select ARCH_ENABLE_SPLIT_PMD_PTLOCK if (PGTABLE_LEVELS > 2) && (X86_64 || X86_PAE) - select ARCH_ENABLE_THP_MIGRATION if X86_64 && TRANSPARENT_HUGEPAGE + select ARCH_SUPPORTS_PMD_SOFTLEAF if X86_64 && TRANSPARENT_HUGEPAGE select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI select ARCH_HAS_CPU_ATTACK_VECTORS if CPU_MITIGATIONS select ARCH_HAS_CACHE_LINE_SIZE
arch/x86/include/asm/pgtable.h +1 -1
@@ -1545,7 +1545,7 @@ static inline pte_t pte_swp_clear_soft_dirty(pte_t pte)return pte_clear_flags (pte, _PAGE_SWP_SOFT_DIRTY); } -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF static inline pmd_t pmd_swp_mksoft_dirty (pmd_t pmd) {return pmd_set_flags (pmd, _PAGE_SWP_SOFT_DIRTY);
include/linux/huge_mm.h +1 -1
@@ -567,7 +567,7 @@ static inline struct folio *get_persistent_huge_zero_folio(void)static inline bool thp_migration_supported (void ) { -return IS_ENABLED (CONFIG_ARCH_ENABLE_THP_MIGRATION ); +return IS_ENABLED (CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF ); } void split_huge_pmd_locked(struct vm_area_struct *vma, unsigned long address,
include/linux/leafops.h +4 -4
@@ -81,7 +81,7 @@ static inline pte_t softleaf_to_pte(softleaf_t entry)return swp_entry_to_pte (entry); } -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF /** * softleaf_from_pmd() - Obtain a leaf entry from a PMD entry. * @pmd: PMD entry.
@@ -587,7 +587,7 @@ static inline bool pte_is_uffd_marker(pte_t pte)return false; } -#if defined(CONFIG_ZONE_DEVICE ) && defined(CONFIG_ARCH_ENABLE_THP_MIGRATION ) +#if defined(CONFIG_ZONE_DEVICE ) && defined(CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF )/** * pmd_is_device_private_entry() - Check if PMD contains a device private swap
@@ -606,14 +606,14 @@ static inline bool pmd_is_device_private_entry(pmd_t pmd) return softleaf_is_device_private(softleaf_from_pmd(pmd)); } -#else /* CONFIG_ZONE_DEVICE && CONFIG_ARCH_ENABLE_THP_MIGRATION */ +#else /* CONFIG_ZONE_DEVICE && CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF */ static inline bool pmd_is_device_private_entry (pmd_t pmd) {return false; } -#endif /* CONFIG_ZONE_DEVICE && CONFIG_ARCH_ENABLE_THP_MIGRATION */ +#endif /* CONFIG_ZONE_DEVICE && CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF */ /** * pmd_is_migration_entry() - Does this PMD entry encode a migration entry?
include/linux/pgtable.h +1 -1
@@ -1839,7 +1839,7 @@ static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)#endif #ifdef CONFIG_HAVE_ARCH_SOFT_DIRTY -#ifndef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifndef CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF static inline pmd_t pmd_swp_mksoft_dirty(pmd_t pmd) { return pmd;
include/linux/swapops.h +3 -3
@@ -321,7 +321,7 @@ static inline swp_entry_t make_guard_swp_entry(void)struct page_vma_mapped_walk ; -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF extern int set_pmd_migration_entry (struct page_vma_mapped_walk *pvmw,struct page *page);
@@ -338,7 +338,7 @@ static inline pmd_t swp_entry_to_pmd(swp_entry_t entry) return __swp_entry_to_pmd(arch_entry); } -#else /* CONFIG_ARCH_ENABLE_THP_MIGRATION */ +#else /* CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF */ static inline int set_pmd_migration_entry (struct page_vma_mapped_walk *pvmw,struct page *page) {
@@ -358,7 +358,7 @@ static inline pmd_t swp_entry_to_pmd(swp_entry_t entry)return __pmd (0 ); } -#endif /* CONFIG_ARCH_ENABLE_THP_MIGRATION */ +#endif /* CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF */ #endif /* CONFIG_MMU */ #endif /* _LINUX_SWAPOPS_H */
mm/Kconfig +1 -1
@@ -703,7 +703,7 @@ config DEVICE_MIGRATION config ARCH_ENABLE_HUGEPAGE_MIGRATION bool -config ARCH_ENABLE_THP_MIGRATION +config ARCH_SUPPORTS_PMD_SOFTLEAF bool config HUGETLB_PAGE_SIZE_VARIABLE
mm/debug_vm_pgtable.c +4 -4
@@ -751,7 +751,7 @@ static void __init pmd_leaf_soft_dirty_tests(struct pgtable_debug_args *args)pmd_t pmd;if (!pgtable_supports_soft_dirty () || - !IS_ENABLED (CONFIG_ARCH_ENABLE_THP_MIGRATION )) + !IS_ENABLED (CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF ))return ;if (!has_transparent_hugepage ())
@@ -819,7 +819,7 @@ static void __init pte_swap_tests(struct pgtable_debug_args *args)WARN_ON (memcmp (&pte1, &pte2,sizeof (pte1))); } -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF static void __init pmd_softleaf_tests (struct pgtable_debug_args *args) {swp_entry_t arch_entry;
@@ -837,9 +837,9 @@ static void __init pmd_softleaf_tests(struct pgtable_debug_args *args) pmd2 =__swp_entry_to_pmd (arch_entry); WARN_ON(memcmp(&pmd1, &pmd2, sizeof(pmd1))); } -#else /* !CONFIG_ARCH_ENABLE_THP_MIGRATION */ +#else /* !CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF */ static void __init pmd_softleaf_tests (struct pgtable_debug_args *args) { } -#endif /* CONFIG_ARCH_ENABLE_THP_MIGRATION */ +#endif /* CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF */ static void __init swap_migration_tests (struct pgtable_debug_args *args) {
mm/hmm.c +2 -2
@@ -331,7 +331,7 @@ static int hmm_vma_handle_pte(struct mm_walk *walk, unsigned long addr,return hmm_vma_fault (addr, end, required_fault, walk); } -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF static int hmm_vma_handle_absent_pmd (struct mm_walk *walk,unsigned long start,unsigned long end,unsigned long *hmm_pfns,pmd_t pmd)
@@ -391,7 +391,7 @@ static int hmm_vma_handle_absent_pmd(struct mm_walk *walk, unsigned long start,return -EFAULT ;return hmm_pfns_fill (start, end, range,HMM_PFN_ERROR ); } -#endif /* CONFIG_ARCH_ENABLE_THP_MIGRATION */ +#endif /* CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF */ static int hmm_vma_walk_pmd(pmd_t *pmdp, unsigned long start,
mm/huge_memory.c +1 -1
@@ -4864,7 +4864,7 @@ static int __init split_huge_pages_debugfs(void)late_initcall (split_huge_pages_debugfs);#endif -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF int set_pmd_migration_entry (struct page_vma_mapped_walk *pvmw,struct page *page) {
mm/migrate.c +2 -2
@@ -362,7 +362,7 @@ static bool remove_migration_pte(struct folio *folio, idx =linear_page_index (vma, pvmw.address) - pvmw.pgoff; new =folio_page (folio, idx); -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF /* PMD-mapped THP migration entry */ if (!pvmw.pte) { VM_BUG_ON_FOLIO(folio_test_hugetlb(folio) ||
@@ -545,7 +545,7 @@ void migration_entry_wait_huge(struct vm_area_struct *vma, unsigned long addr, p }#endif -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF void pmd_migration_entry_wait (struct mm_struct *mm,pmd_t *pmd) {spinlock_t *ptl;
mm/migrate_device.c +3 -3
@@ -771,7 +771,7 @@ int migrate_vma_setup(struct migrate_vma *args) }EXPORT_SYMBOL (migrate_vma_setup); -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF /** * migrate_vma_insert_huge_pmd_page: Insert a huge folio into @migrate->vma->vm_mm * at @addr. folio is already allocated as a part of the migration process with
@@ -926,7 +926,7 @@ static int migrate_vma_split_unmapped_folio(struct migrate_vma *migrate, migrate->src[i+idx] =migrate_pfn (pfn + i) | flags;return ret; } -#else /* !CONFIG_ARCH_ENABLE_THP_MIGRATION */ +#else /* !CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF */ static int migrate_vma_insert_huge_pmd_page(struct migrate_vma *migrate, unsigned long addr, struct page *page,
@@ -947,7 +947,7 @@ static int migrate_vma_split_unmapped_folio(struct migrate_vma *migrate,static unsigned long migrate_vma_nr_pages (unsigned long *src) {unsigned long nr =1 ; -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF if (*src &MIGRATE_PFN_COMPOUND ) nr =HPAGE_PMD_NR ;#else
mm/rmap.c +1 -1
@@ -2472,7 +2472,7 @@ static bool try_to_migrate_one(struct folio *folio, struct vm_area_struct *vma,page_vma_mapped_walk_restart (&pvmw);continue ; } -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_SUPPORTS_PMD_SOFTLEAF pmdval =pmdp_get (pvmw.pmd);if (likely (pmd_present (pmdval))) pfn =pmd_pfn (pmdval);
Signature · 1 line
2.53.0-Meta
David Hildenbrand (Arm)
maintainerRe: [PATCH 6/6] mm: rename ARCH_ENABLE_THP_MIGRATION to ARCH_SUPPORTS_PMD_SOFTLEAF
Quoted 4 lines · Usama Arif
CONFIG_ARCH_ENABLE_THP_MIGRATIONstarted life gating just PMD-level migration entries, but has grown to gate the entire PMD-level softleaf
machinery: migration entries, device-private entries, and soon swap entries.
device-private really relies on migration support.
See do_huge_pmd_device_private() where we migrate back to CPU memory.
The whole concept is pased on migration. So that's why it currently makes sense.
So "has grown to" is not quite accurate. It's a different story with swap entries (that can exist even without migration support).
Quoted 4 lines
Rename
CONFIG_ARCH_ENABLE_THP_MIGRATIONtoCONFIG_ARCH_SUPPORTS_PMD_SOFTLEAFto make this clear. This is a pure rename: the set of selecting architectures (x86, arm64, s390, riscv, loongarch, and powerpc onPPC_BOOK3S_64) and the gating semantics are unchanged.
Hm, that makes me wonder what it would take to make this all just be implicitly supported by CONFIG_TRANSPARENT_HUGEPAGE.
Looks like someone would have the courage to touch stuff like arc, mips and sparc64 (+arm and x86, but that's less of a concern :) ).
So yeah, renaming the config option makes sense. The config space is the wild west.
We have
PGTABLE_HAS_HUGE_LEAVES
and stuff like
HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD
HAVE_ARCH_SOFT_DIRTY
ARCH_HAS_GIGANTIC_PAGE
ARCH_HAS_PTE_SPECIAL
We do have a limited number of "SUPPORTS" (which is longer than HAS), but I would either use
ARCH_HAS_PMD_SOFTLEAVES
or
HAVE_ARCH_PMD_SOFTLEAVES
Apart from that LGTM.
Signature · 3 lines
Cheers, David
Zi Yan
reviewerRe: [PATCH 6/6] mm: rename ARCH_ENABLE_THP_MIGRATION to ARCH_SUPPORTS_PMD_SOFTLEAF
Quoted 21 lines · David Hildenbrand (Arm)
Quoted 4 lines · Usama Arif
CONFIG_ARCH_ENABLE_THP_MIGRATIONstarted life gating just PMD-level migration entries, but has grown to gate the entire PMD-level softleaf
machinery: migration entries, device-private entries, and soon swap entries.device-private really relies on migration support.
See
do_huge_pmd_device_private()where we migrate back to CPU memory.The whole concept is pased on migration. So that's why it currently makes sense.
So "has grown to" is not quite accurate. It's a different story with swap entries (that can exist even without migration support).
Quoted 4 lines
Rename
CONFIG_ARCH_ENABLE_THP_MIGRATIONtoCONFIG_ARCH_SUPPORTS_PMD_SOFTLEAFto make this clear. This is a pure rename: the set of selecting architectures (x86, arm64, s390, riscv, loongarch, and powerpc onPPC_BOOK3S_64) and the gating semantics are unchanged.
Quoted 5 lines
Hm, that makes me wonder what it would take to make this all just be implicitly supported by
CONFIG_TRANSPARENT_HUGEPAGE.Looks like someone would have the courage to touch stuff like arc, mips and sparc64 (+arm and x86, but that's less of a concern :) ).
You mean me back in 2018[1]? ;)
At least I got a no go for s390.
[1] https://lore.kernel.org/linux-mm/[email protected]/
Best Regards,
Yan, Zi
David Hildenbrand (Arm)
maintainerRe: [PATCH 6/6] mm: rename ARCH_ENABLE_THP_MIGRATION to ARCH_SUPPORTS_PMD_SOFTLEAF
Quoted 26 lines · Zi Yan
Quoted 24 lines · David Hildenbrand (Arm)
Quoted 4 lines · Usama Arif
CONFIG_ARCH_ENABLE_THP_MIGRATIONstarted life gating just PMD-level migration entries, but has grown to gate the entire PMD-level softleaf
machinery: migration entries, device-private entries, and soon swap entries.device-private really relies on migration support.
See
do_huge_pmd_device_private()where we migrate back to CPU memory.The whole concept is pased on migration. So that's why it currently makes sense.
So "has grown to" is not quite accurate. It's a different story with swap entries (that can exist even without migration support).
Quoted 4 lines
Rename
CONFIG_ARCH_ENABLE_THP_MIGRATIONtoCONFIG_ARCH_SUPPORTS_PMD_SOFTLEAFto make this clear. This is a pure rename: the set of selecting architectures (x86, arm64, s390, riscv, loongarch, and powerpc onPPC_BOOK3S_64) and the gating semantics are unchanged.Hm, that makes me wonder what it would take to make this all just be implicitly supported by
CONFIG_TRANSPARENT_HUGEPAGE.
Quoted 6 lines
Quoted 2 lines
Looks like someone would have the courage to touch stuff like arc, mips and sparc64 (+arm and x86, but that's less of a concern :) ).
You mean me back in 2018[1]? ;)
At least I got a no go for s390.
hah! and 8 years later it seems to exist upstream :)
commit 10dd5a0009898ba35eafeb6087e5c83b84742ff1
Author: Gerald Schaefer <[email protected]> Date: Tue Jul 29 13:16:19 2025 +0200
s390/mm: Enable THP_SWAP and THP_MIGRATION
After hugetlbfs PTE_MARKER support for s390 introduced region-third and segment table swap entries, it is now possible to also enable THP_SWAP and THP_MIGRATION for s390.
So, with that out of the way, could you revive your patchset?
Signature · 3 lines
Cheers, David
Zi Yan
reviewerRe: [PATCH 6/6] mm: rename ARCH_ENABLE_THP_MIGRATION to ARCH_SUPPORTS_PMD_SOFTLEAF
Quoted 40 lines · David Hildenbrand (Arm)
Quoted 26 lines · Zi Yan
Quoted 24 lines · David Hildenbrand (Arm)
Quoted 4 lines · Usama Arif
CONFIG_ARCH_ENABLE_THP_MIGRATIONstarted life gating just PMD-level migration entries, but has grown to gate the entire PMD-level softleaf
machinery: migration entries, device-private entries, and soon swap entries.device-private really relies on migration support.
See
do_huge_pmd_device_private()where we migrate back to CPU memory.The whole concept is pased on migration. So that's why it currently makes sense.
So "has grown to" is not quite accurate. It's a different story with swap entries (that can exist even without migration support).
Quoted 4 lines
Rename
CONFIG_ARCH_ENABLE_THP_MIGRATIONtoCONFIG_ARCH_SUPPORTS_PMD_SOFTLEAFto make this clear. This is a pure rename: the set of selecting architectures (x86, arm64, s390, riscv, loongarch, and powerpc onPPC_BOOK3S_64) and the gating semantics are unchanged.Hm, that makes me wonder what it would take to make this all just be implicitly supported by
CONFIG_TRANSPARENT_HUGEPAGE.Quoted 6 lines
Quoted 2 lines
Looks like someone would have the courage to touch stuff like arc, mips and sparc64 (+arm and x86, but that's less of a concern :) ).
You mean me back in 2018[1]? ;)
At least I got a no go for s390.
hah! and 8 years later it seems to exist upstream :)
commit
10dd5a0009898ba35eafeb6087e5c83b84742ff1Author: Gerald Schaefer <[email protected]> Date: Tue Jul 29 13:16:19 2025 +0200
Quoted 8 lines
s390/mm: Enable
THP_SWAPandTHP_MIGRATIONAfter hugetlbfs
PTE_MARKERsupport for s390 introduced region-third and segment table swap entries, it is now possible to also enableTHP_SWAPandTHP_MIGRATIONfor s390.So, with that out of the way, could you revive your patchset?
Sure. Will put that on my TODO list.
Best Regards,
Yan, Zi
Lorenzo Stoakes
maintainerRe: [PATCH 6/6] mm: rename ARCH_ENABLE_THP_MIGRATION to ARCH_SUPPORTS_PMD_SOFTLEAF
In reply to David Hildenbrand (Arm)Quoted 44 lines · David Hildenbrand (Arm)
Quoted 4 lines · Usama Arif
CONFIG_ARCH_ENABLE_THP_MIGRATIONstarted life gating just PMD-level migration entries, but has grown to gate the entire PMD-level softleaf
machinery: migration entries, device-private entries, and soon swap entries.device-private really relies on migration support.
See
do_huge_pmd_device_private()where we migrate back to CPU memory.The whole concept is pased on migration. So that's why it currently makes sense.
So "has grown to" is not quite accurate. It's a different story with swap entries (that can exist even without migration support).
Quoted 4 lines
Rename
CONFIG_ARCH_ENABLE_THP_MIGRATIONtoCONFIG_ARCH_SUPPORTS_PMD_SOFTLEAFto make this clear. This is a pure rename: the set of selecting architectures (x86, arm64, s390, riscv, loongarch, and powerpc onPPC_BOOK3S_64) and the gating semantics are unchanged.Hm, that makes me wonder what it would take to make this all just be implicitly supported by
CONFIG_TRANSPARENT_HUGEPAGE.Looks like someone would have the courage to touch stuff like arc, mips and sparc64 (+arm and x86, but that's less of a concern :) ).
So yeah, renaming the config option makes sense. The config space is the wild west.
We have
PGTABLE_HAS_HUGE_LEAVESand stuff like
HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD
HAVE_ARCH_SOFT_DIRTY
ARCH_HAS_GIGANTIC_PAGE
ARCH_HAS_PTE_SPECIALWe do have a limited number of "SUPPORTS" (which is longer than HAS), but I would either use
Quoted 5 lines
ARCH_HAS_PMD_SOFTLEAVESor
HAVE_ARCH_PMD_SOFTLEAVES
Yeah it'd be GREAT to simplify all this!
Quoted 3 lines
Apart from that LGTM.
Can I just say I love this patch in general though? Softleaf all the things :))
Quoted 5 lines
--
Cheers,David
Cheers, Lorenzo
Andrew Morton
maintainerQuoted 1 line · On Tue, 30 Jun 2026 09:34:37 -0700 Usama Arif <[email protected]> wrote:
This is the preparatory part of the PMD page table swapin work.
Thanks.
This comes reasonably reviewed, so I'll queue it in mm-new.
Why?
- Human review coverage and AI review make me believe this isn't the final version at all, but I do believe this is something we want in 7.2, and getting it under test early will help to push it along.
- Getting it in there early means that others will base their work on material which will probably be upstreamed this cycle, so this gives them a more accurate base against which to work.
Sashiko did find a lot to talk about, some of it pre-existing so can people who work on this code please take a look at
https://sashiko.dev/#/patchset/[email protected]
Lorenzo Stoakes
maintainerQuoted 14 lines · Andrew Morton
Quoted 1 line · On Tue, 30 Jun 2026 09:34:37 -0700 Usama Arif <[email protected]> wrote:
This is the preparatory part of the PMD page table swapin work.
Thanks.
This comes reasonably reviewed, so I'll queue it in mm-new.
Why?
- Human review coverage and AI review make me believe this isn't the final version at all, but I do believe this is something we want in 7.2, and getting it under test early will help to push it along.
Quoted 10 lines
- Getting it in there early means that others will base their work on material which will probably be upstreamed this cycle, so this gives them a more accurate base against which to work.
Sashiko did find a lot to talk about, some of it pre-existing so can people who work on this code please take a look at
https://sashiko.dev/#/patchset/[email protected]
Hm, my understanding was that mm-new is where we take everything submitted for early testing?
Did something change?
Generally anything submitted early in the cycle is expected to land in the cycle unless there's significant adverse review or other reasons it can't be taken.
Thanks, Lorenzo
Andrew Morton
maintainerQuoted 22 lines · On Wed, 1 Jul 2026 09:04:33 +0100 Lorenzo Stoakes <[email protected]> wrote:
Quoted 21 lines · Andrew Morton
Quoted 1 line · On Tue, 30 Jun 2026 09:34:37 -0700 Usama Arif <[email protected]> wrote:
This is the preparatory part of the PMD page table swapin work.
Thanks.
This comes reasonably reviewed, so I'll queue it in mm-new.
Why?
- Human review coverage and AI review make me believe this isn't the final version at all, but I do believe this is something we want in 7.2, and getting it under test early will help to push it along.
- Getting it in there early means that others will base their work on material which will probably be upstreamed this cycle, so this gives them a more accurate base against which to work.
Sashiko did find a lot to talk about, some of it pre-existing so can people who work on this code please take a look at
Quoted 8 lines
Quoted 3 lines
https://sashiko.dev/#/patchset/[email protected]Hm, my understanding was that mm-new is where we take everything submitted for early testing?
Did something change?
mm-new has always been a few day front-end to mm-unstable. To protect linux-next from brand new material. It serves no other purpose.
Almost. I'll very occasionally use it for short-term not-for-upstream playthings.
Quoted 2 lines
Generally anything submitted early in the cycle is expected to land in the cycle unless there's significant adverse review or other reasons it can't be taken.
Yup. Don't want anything in mm.git which isn't expected to be upstreamed in the next merge window.
Nowadays I'm reluctant to add anything which hasn't had a decent scan from reviewers. If it's something I'd particularly like to get upstreamed I'll very occasionally add it early, to help push it along.
Lorenzo Stoakes
maintainer+cc Mike re: CI.
Quoted 28 lines · Andrew Morton
Quoted 26 lines · On Wed, 1 Jul 2026 09:04:33 +0100 Lorenzo Stoakes <[email protected]> wrote:
Quoted 24 lines · Andrew Morton
Quoted 1 line · On Tue, 30 Jun 2026 09:34:37 -0700 Usama Arif <[email protected]> wrote:
This is the preparatory part of the PMD page table swapin work.
Thanks.
This comes reasonably reviewed, so I'll queue it in mm-new.
Why?
- Human review coverage and AI review make me believe this isn't the final version at all, but I do believe this is something we want in 7.2, and getting it under test early will help to push it along.
- Getting it in there early means that others will base their work on material which will probably be upstreamed this cycle, so this gives them a more accurate base against which to work.
Sashiko did find a lot to talk about, some of it pre-existing so can people who work on this code please take a look at
https://sashiko.dev/#/patchset/[email protected]
Quoted 7 lines
Quoted 4 lines
Hm, my understanding was that mm-new is where we take everything submitted for early testing?
Did something change?
mm-new has always been a few day front-end to mm-unstable. To protect linux-next from brand new material. It serves no other purpose.
Well it only serves a purpose if it gives us better testing.
We have a CI running tests now though, Mike - is that predicated on material being in mm-new or does it just grab the email?
If the CI is just grabbing email I wonder whether there's much purpose in the mm-new branch at all.
Quoted 7 lines
Almost. I'll very occasionally use it for short-term not-for-upstream playthings.
Quoted 2 lines
Generally anything submitted early in the cycle is expected to land in the cycle unless there's significant adverse review or other reasons it can't be taken.
Quoted 6 lines
Yup. Don't want anything in mm.git which isn't expected to be upstreamed in the next merge window.
Nowadays I'm reluctant to add anything which hasn't had a decent scan from reviewers. If it's something I'd particularly like to get upstreamed I'll very occasionally add it early, to help push it along.
Well the question is what is considered to be a decent scan from reviewers?
Is it tags on all patches? As a glance at mm-new suggests otherwise.
I guess moving forwards with mm-next we can figure out the rules specifically on this kind of thing.
Maintainer signoff is the key indicator of something being acceptable for the cycle.
But I think probably if we have a topic branch of stuff we're considering for upstream (but not the stable branch which should require maintainer signoff), a good proportion of tags (and review from everybody matters and is important) maybe should be the metric.
I am wondering about my series(es) in general though as I'm likely to cause some significant merge conflict pain for people if that's delayed too much. But sure we can wait for more review coverage on that I guess.
Thanks, Lorenzo
Mike Rapoport
reviewerQuoted 36 lines · Lorenzo Stoakes
+cc Mike re: CI.
Quoted 33 lines · Andrew Morton
Quoted 30 lines · On Wed, 1 Jul 2026 09:04:33 +0100 Lorenzo Stoakes <[email protected]> wrote:
Quoted 14 lines · Andrew Morton
Quoted 1 line · On Tue, 30 Jun 2026 09:34:37 -0700 Usama Arif <[email protected]> wrote:
This is the preparatory part of the PMD page table swapin work.
Thanks.
This comes reasonably reviewed, so I'll queue it in mm-new.
Why?
- Human review coverage and AI review make me believe this isn't the final version at all, but I do believe this is something we want in 7.2, and getting it under test early will help to push it along.
Quoted 10 lines
- Getting it in there early means that others will base their work on material which will probably be upstreamed this cycle, so this gives them a more accurate base against which to work.
Sashiko did find a lot to talk about, some of it pre-existing so can people who work on this code please take a look at
https://sashiko.dev/#/patchset/[email protected]Hm, my understanding was that mm-new is where we take everything submitted for early testing?
Did something change?
Quoted 7 lines
Quoted 2 lines
mm-new has always been a few day front-end to mm-unstable. To protect linux-next from brand new material. It serves no other purpose.
Well it only serves a purpose if it gives us better testing.
We have a CI running tests now though, Mike - is that predicated on material being in mm-new or does it just grab the email?
CI grabs patches from patchwork and tries to apply them to one of the three
bases: mm-unstable, mm-new or the latest Linus' commit merged into mm.git.
If patches apply, the other bases are not checked.
This patches applied cleanly to mm-unstable and successfully passed (at least once :) )
https://github.com/linux-mm/linux-mm/actions/runs/28544575927/
Quoted 2 lines
If the CI is just grabbing email I wonder whether there's much purpose in the mm-new branch at all.
I can't say that CI I run has a great coverage. I don't know what coverage mm-new has though.
Quoted 1 line
Thanks, Lorenzo
Signature · 2 lines
Sincerely yours, Mike.
Lorenzo Stoakes
maintainer+cc Mark
Quoted 5 lines · Mike Rapoport
Quoted 4 lines · Lorenzo Stoakes
+cc Mike re: CI.
Quoted 1 line · Andrew Morton
On Wed, 1 Jul 2026 09:04:33 +0100 Lorenzo Stoakes <[email protected]> wrote:
...
Quoted 22 lines
Quoted 5 lines
Quoted 5 lines
Quoted 4 lines
Hm, my understanding was that mm-new is where we take everything submitted for early testing?
Did something change?
Quoted 7 lines
Quoted 2 lines
mm-new has always been a few day front-end to mm-unstable. To protect linux-next from brand new material. It serves no other purpose.
Well it only serves a purpose if it gives us better testing.
We have a CI running tests now though, Mike - is that predicated on material being in mm-new or does it just grab the email?
CI grabs patches from patchwork and tries to apply them to one of the three
bases: mm-unstable, mm-new or the latest Linus' commit merged into mm.git.If patches apply, the other bases are not checked.
This patches applied cleanly to mm-unstable and successfully passed (at least once :) )
https://github.com/linux-mm/linux-mm/actions/runs/28544575927/
Quoted 5 lines
Quoted 2 lines
If the CI is just grabbing email I wonder whether there's much purpose in the mm-new branch at all.
I can't say that CI I run has a great coverage. I don't know what coverage mm-new has though
Well we're very grateful for what coverage it has :) and that's nice to have it work with email like that also, makes life simpler.
Mark - are you running tests based on mm-new? I'm not sure where things stand on that?
Quoted 6 lines
Quoted 2 lines
Thanks, Lorenzo
--
Sincerely yours,
Mike.
Thanks, Lorenzo
Quoted 10 lines · Lorenzo Stoakes
Quoted 2 lines · Mike Rapoport
I can't say that CI I run has a great coverage. I don't know what coverage mm-new has though
Well we're very grateful for what coverage it has :) and that's nice to have it work with email like that also, makes life simpler.
Mark - are you running tests based on mm-new? I'm not sure where things stand on that?
I currently test -next, mainline and stable plus my own stuff.
Lorenzo Stoakes
maintainerQuoted 6 lines · Mark Brown
Quoted 4 lines · Lorenzo Stoakes
Quoted 2 lines · Mike Rapoport
I can't say that CI I run has a great coverage. I don't know what coverage mm-new has though
Quoted 7 lines
Quoted 5 lines
Well we're very grateful for what coverage it has :) and that's nice to have it work with email like that also, makes life simpler.
Mark - are you running tests based on mm-new? I'm not sure where things stand on that?
I currently test -next, mainline and stable plus my own stuff.
Ack thanks!
I guess in the long run then we can figure out a way to not necessarily even require mm-new at all, and instead let our CI try to handle as much as it can before -> linux-next :)
As that'd be the nicest way and help reduce confusion about branches for mm-next.
Cheers, Lorenzo
David Hildenbrand (Arm)
maintainerQuoted 12 lines · Lorenzo Stoakes
Quoted 10 lines · Mark Brown
Quoted 5 lines · Lorenzo Stoakes
Well we're very grateful for what coverage it has :) and that's nice to have it work with email like that also, makes life simpler.
Mark - are you running tests based on mm-new? I'm not sure where things stand on that?
I currently test -next, mainline and stable plus my own stuff.
Quoted 8 lines
Ack thanks!
I guess in the long run then we can figure out a way to not necessarily even require mm-new at all, and instead let our CI try to handle as much as it can before -> linux-next :)
As that'd be the nicest way and help reduce confusion about branches for mm-next.
If we go the for-test route, we'd still have a branch where people/bots/tools can do more elaborate tests when throwing stuff together. I still consider that reasonable, but we'll have to see if we really need that.
Signature · 3 lines
Cheers, David
Lorenzo Stoakes
maintainerQuoted 19 lines · David Hildenbrand (Arm)
Quoted 18 lines · Lorenzo Stoakes
Quoted 10 lines · Mark Brown
Quoted 5 lines · Lorenzo Stoakes
Well we're very grateful for what coverage it has :) and that's nice to have it work with email like that also, makes life simpler.
Mark - are you running tests based on mm-new? I'm not sure where things stand on that?
I currently test -next, mainline and stable plus my own stuff.
Ack thanks!
I guess in the long run then we can figure out a way to not necessarily even require mm-new at all, and instead let our CI try to handle as much as it can before -> linux-next :)
Quoted 6 lines
Quoted 2 lines
As that'd be the nicest way and help reduce confusion about branches for mm-next.
If we go the for-test route, we'd still have a branch where people/bots/tools can do more elaborate tests when throwing stuff together. I still consider that reasonable, but we'll have to see if we really need that.
Ah fair point :) I mean we can have both of course!
Quoted 5 lines
--
Cheers,David
Cheers, Lorenzo
Quoted 45 lines · On Thu, 2 Jul 2026 16:08:03 +0300 Mike Rapoport <[email protected]> wrote:
Quoted 36 lines · Lorenzo Stoakes
+cc Mike re: CI.
Quoted 33 lines · Andrew Morton
Quoted 30 lines · On Wed, 1 Jul 2026 09:04:33 +0100 Lorenzo Stoakes <[email protected]> wrote:
Quoted 14 lines · Andrew Morton
Quoted 1 line · On Tue, 30 Jun 2026 09:34:37 -0700 Usama Arif <[email protected]> wrote:
This is the preparatory part of the PMD page table swapin work.
Thanks.
This comes reasonably reviewed, so I'll queue it in mm-new.
Why?
- Human review coverage and AI review make me believe this isn't the final version at all, but I do believe this is something we want in 7.2, and getting it under test early will help to push it along.
Quoted 10 lines
- Getting it in there early means that others will base their work on material which will probably be upstreamed this cycle, so this gives them a more accurate base against which to work.
Sashiko did find a lot to talk about, some of it pre-existing so can people who work on this code please take a look at
https://sashiko.dev/#/patchset/[email protected]Hm, my understanding was that mm-new is where we take everything submitted for early testing?
Did something change?
Quoted 7 lines
Quoted 2 lines
mm-new has always been a few day front-end to mm-unstable. To protect linux-next from brand new material. It serves no other purpose.
Well it only serves a purpose if it gives us better testing.
We have a CI running tests now though, Mike - is that predicated on material being in mm-new or does it just grab the email?
Quoted 8 lines
CI grabs patches from patchwork and tries to apply them to one of the three
bases: mm-unstable, mm-new or the latest Linus' commit merged into mm.git.If patches apply, the other bases are not checked.
This patches applied cleanly to mm-unstable and successfully passed (at least once :) )
https://github.com/linux-mm/linux-mm/actions/runs/28544575927/
Awesome!
I found the CI script (mm-ci) on the GitHub organization. Is the repo open to contributions? If so, between GitHub PR and patches to linux-mm@ what is more preferred? Seems it is not running DAMON specific tests, and I want to add DAMON kunit test to the test set as a first step (DAMO selftest is bit flaky on some systems), if people don't mind.
I or someone else may also want to add more tests like Cc list checking [1] in future.
[1] https://lore.kernel.org/[email protected]
Thanks,
SJ
[...]
Mike Rapoport
reviewerHi SJ,
Quoted 7 lines · SJ Park
Quoted 6 lines · On Thu, 2 Jul 2026 16:08:03 +0300 Mike Rapoport <[email protected]> wrote:
CI grabs patches from patchwork and tries to apply them to one of the three
bases: mm-unstable, mm-new or the latest Linus' commit merged into mm.git.If patches apply, the other bases are not checked.
Quoted 8 lines
Quoted 3 lines
This patches applied cleanly to mm-unstable and successfully passed (at least once :) )
https://github.com/linux-mm/linux-mm/actions/runs/28544575927/Awesome!
I found the CI script (mm-ci) on the GitHub organization. Is the repo open to contributions?
Yes :)
Quoted 2 lines
If so, between GitHub PR and patches to linux-mm@ what is more preferred?
The way it works, all testing update should go to mm-ci. There is a bot that takes them from there and generates PRs inn linux-mm that include patches and the CI files.
Quoted 3 lines
Seems it is not running DAMON specific tests, and I want to add DAMON kunit test to the test set as a first step (DAMO selftest is bit flaky on some systems), if people don't mind.
Patches are welcome :)
If DAMON selftest is flaky let's keep it out for now please, otherwise it would cause too much noise.
Quoted 4 lines
I or someone else may also want to add more tests like Cc list checking [1] in future.
Yeah, I think it would be helpful.
Quoted 2 lines
Thanks,
SJ
Signature · 2 lines
Sincerely yours, Mike.
Quoted 19 lines · On Sat, 4 Jul 2026 13:04:02 +0300 Mike Rapoport <[email protected]> wrote:
Hi SJ,
Quoted 7 lines · SJ Park
Quoted 6 lines · On Thu, 2 Jul 2026 16:08:03 +0300 Mike Rapoport <[email protected]> wrote:
CI grabs patches from patchwork and tries to apply them to one of the three
bases: mm-unstable, mm-new or the latest Linus' commit merged into mm.git.If patches apply, the other bases are not checked.
Quoted 8 lines
Quoted 3 lines
This patches applied cleanly to mm-unstable and successfully passed (at least once :) )
https://github.com/linux-mm/linux-mm/actions/runs/28544575927/Awesome!
I found the CI script (mm-ci) on the GitHub organization. Is the repo open to contributions?
Quoted 8 lines
Yes :)
Quoted 2 lines
If so, between GitHub PR and patches to linux-mm@ what is more preferred?
The way it works, all testing update should go to mm-ci. There is a bot that takes them from there and generates PRs inn linux-mm that include patches and the CI files.
Thank you for sharing the detail!
Quoted 9 lines
Quoted 4 lines
Seems it is not running DAMON specific tests, and I want to add DAMON kunit test to the test set as a first step (DAMO selftest is bit flaky on some systems), if people don't mind.
Patches are welcome :)
If DAMON selftest is flaky let's keep it out for now please, otherwise it would cause too much noise.
Yes, surely agreed. There is nothing to rush :)
Quoted 7 lines
Quoted 5 lines
I or someone else may also want to add more tests like Cc list checking [1] in future.
Yeah, I think it would be helpful.
Cool, I'll try to take time to understand it more, and make some contributions.
Thanks,
SJ
[...]
Usama Arif
reviewerQuoted 14 lines · Andrew Morton
Quoted 1 line · On Tue, 30 Jun 2026 09:34:37 -0700 Usama Arif <[email protected]> wrote:
This is the preparatory part of the PMD page table swapin work.
Thanks.
This comes reasonably reviewed, so I'll queue it in mm-new.
Why?
- Human review coverage and AI review make me believe this isn't the final version at all, but I do believe this is something we want in 7.2, and getting it under test early will help to push it along.
Quoted 10 lines
- Getting it in there early means that others will base their work on material which will probably be upstreamed this cycle, so this gives them a more accurate base against which to work.
Sashiko did find a lot to talk about, some of it pre-existing so can people who work on this code please take a look at
https://sashiko.dev/#/patchset/[email protected]
Thanks Andrew! I think most of the stuff sashiko pointed to is not introduced by this series or can be ignored.
I will wait a few days and then send the PMD core series on latest mm-new.
Usama Arif
reviewerQuoted 14 lines · Andrew Morton
Quoted 1 line · On Tue, 30 Jun 2026 09:34:37 -0700 Usama Arif <[email protected]> wrote:
This is the preparatory part of the PMD page table swapin work.
Thanks.
This comes reasonably reviewed, so I'll queue it in mm-new.
Why?
- Human review coverage and AI review make me believe this isn't the final version at all, but I do believe this is something we want in 7.2, and getting it under test early will help to push it along.
Quoted 10 lines
- Getting it in there early means that others will base their work on material which will probably be upstreamed this cycle, so this gives them a more accurate base against which to work.
Sashiko did find a lot to talk about, some of it pre-existing so can people who work on this code please take a look at
https://sashiko.dev/#/patchset/[email protected]
There is one pre-existing bug pointed by sashiko that is not related to my series that I think needs to be fixed. I have sent it in
https://lore.kernel.org/all/[email protected]/
David Hildenbrand (Arm)
maintainerQuoted 11 lines · Usama Arif
This is the preparatory part of the PMD page table swapin work. The full PMD swap entry series has been split into two parts:
1. this preparatory series, which contains the first 6 patches. Zi [1] and Lance [2] suggested to separate this out from the core series.
2. the PMD swap entry core series, which depends on this one. I will send this once the preparatory series is merged in mm-new as v3 as the combined is currently at v2 [1].
I have not marked this prep series as v3, as its not really adding support for PMD swap entries.
Quoted 6 lines
This series does not introduce PMD swap entries and does not install any new page-table entry type. It only cleans up existing PMD softleaf helpers and call sites so the follow-up PMD swap entry series can be smaller and easier to review.
It should be safe to merge independently.
Agreed, thanks for working on this and splitting this part out!
Signature · 3 lines
Cheers, David
Usama Arif
reviewerQuoted 11 lines · On Tue, 30 Jun 2026 09:34:37 -0700 Usama Arif <[email protected]> wrote:
This is the preparatory part of the PMD page table swapin work. The full PMD swap entry series has been split into two parts:
1. this preparatory series, which contains the first 6 patches. Zi [1] and Lance [2] suggested to separate this out from the core series.
2. the PMD swap entry core series, which depends on this one. I will send this once the preparatory series is merged in mm-new as v3 as the combined is currently at v2 [1].
I have not marked this prep series as v3, as its not really adding support for PMD swap entries.
Quoted 5 lines
This series does not introduce PMD swap entries and does not install any new page-table entry type. It only cleans up existing PMD softleaf helpers and call sites so the follow-up PMD swap entry series can be smaller and easier to review.
Hi Andrew,
The series only needs 2 small changes:
Removing a comment:
https://lore.kernel.org/all/[email protected]/
and s/CONFIG_ARCH_SUPPORTS_PMD/CONFIG_ARCH_HAS_PMD_SOFTLEAVES/ in the last patch:
https://lore.kernel.org/all/[email protected]/
I am always torn between sending a fixlet on the existing series or a new revision.
Just wanted to check what is easiest for you and your preference in situations like above?
Thanks!
Usama
Andrew Morton
maintainerQuoted 26 lines · On Fri, 3 Jul 2026 10:48:31 -0700 Usama Arif <[email protected]> wrote:
Quoted 11 lines · On Tue, 30 Jun 2026 09:34:37 -0700 Usama Arif <[email protected]> wrote:
This is the preparatory part of the PMD page table swapin work. The full PMD swap entry series has been split into two parts:
1. this preparatory series, which contains the first 6 patches. Zi [1] and Lance [2] suggested to separate this out from the core series.
2. the PMD swap entry core series, which depends on this one. I will send this once the preparatory series is merged in mm-new as v3 as the combined is currently at v2 [1].
I have not marked this prep series as v3, as its not really adding support for PMD swap entries.Quoted 5 lines
This series does not introduce PMD swap entries and does not install any new page-table entry type. It only cleans up existing PMD softleaf helpers and call sites so the follow-up PMD swap entry series can be smaller and easier to review.
Hi Andrew,
The series only needs 2 small changes:
Removing a comment:
https://lore.kernel.org/all/[email protected]/
Quoted 8 lines
and s/CONFIG_ARCH_SUPPORTS_PMD/CONFIG_ARCH_HAS_PMD_SOFTLEAVES/ in the last patch:
https://lore.kernel.org/all/[email protected]/I am always torn between sending a fixlet on the existing series or a new revision.
Just wanted to check what is easiest for you and your preference in situations like above?
Oh boy.
Historically my preference was for little fixups - so I and every one else could see what changed. Mainly to avoid invalidating prior review efforts. It's comforting to have the thing stabilized, unaltered and to see the little fixies getting smaller and less frequent.
But this process tended to make people's heads spin - mainly, I suspect, those who hadn't reviewed the earlier versions!
So nowadays if I receive a wholesale replacement I handle all this by dropping v6, adding v7 then replying with a heres-what-you-changed diff. For the earlier reviewers and for author to double-check that they really meant to do that. I have yet to receive feedback about this, of either polarity.
In this particular case, whatever you prefer. If it's to be a full replacement, please do include the v0->v1 summary below the --- separator.