mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves.patch removed from -mm tree
The quilt patch titled
Subject: mm: rename ARCH_ENABLE_THP_MIGRATION to ARCH_HAS_PMD_SOFTLEAVES
has been removed from the -mm tree. Its filename was
mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves.patch
This patch was dropped because it was merged into the mm-stable branch of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
------------------------------------------------------
From: Usama Arif <[email protected]>
Subject: mm: rename ARCH_ENABLE_THP_MIGRATION to ARCH_HAS_PMD_SOFTLEAVES
Date: Mon, 6 Jul 2026 04:42:08 -0700
CONFIG_ARCH_ENABLE_THP_MIGRATION gates PMD-level migration entries. PMD-level device-private entries use the same migration mechanism and therefore require the same architecture support.
Upcoming PMD-level swap entries can use the same PMD softleaf helpers without depending on page migration, so rename the architecture gate to CONFIG_ARCH_HAS_PMD_SOFTLEAVES. This describes the PMD entry capability rather than one current user of it.
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/include/asm/pgtable.h renamed from arch/arm64/include/asm/pgtable.h~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +2 -2
@@ -1534,10 +1534,10 @@ static inline pmd_t pmdp_establish(struc#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_HAS_PMD_SOFTLEAVES #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_HAS_PMD_SOFTLEAVES */ /* * Ensure that there are not more swap files than can be encoded in the kernel
arch/arm64/Kconfig renamed from arch/arm64/Kconfig~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +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_HAS_PMD_SOFTLEAVES if TRANSPARENT_HUGEPAGE select ARCH_HAS_CACHE_LINE_SIZE select ARCH_HAS_CC_PLATFORM select ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION
arch/loongarch/Kconfig renamed from arch/loongarch/Kconfig~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +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_HAS_PMD_SOFTLEAVES 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 renamed from arch/powerpc/include/asm/book3s/64/pgtable.h~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +1 -1
@@ -1060,7 +1060,7 @@ static inline pte_t *pmdp_ptep(pmd_t *pm#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_HAS_PMD_SOFTLEAVES #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 renamed from arch/powerpc/platforms/Kconfig.cputype~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +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_HAS_PMD_SOFTLEAVES if TRANSPARENT_HUGEPAGE choice prompt "CPU selection"
arch/riscv/include/asm/pgtable.h renamed from arch/riscv/include/asm/pgtable.h~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +4 -4
@@ -946,7 +946,7 @@ static inline pmd_t pmd_clear_soft_dirtyreturn pte_pmd (pte_clear_soft_dirty (pmd_pte (pmd))); } -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_HAS_PMD_SOFTLEAVES 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_d {return pte_pmd (pte_swp_clear_soft_dirty (pmd_pte (pmd))); } -#endif /* CONFIG_ARCH_ENABLE_THP_MIGRATION */ +#endif /* CONFIG_ARCH_HAS_PMD_SOFTLEAVES */ #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_exclusreturn __pte (pte_val (pte) & ~_PAGE_SWP_EXCLUSIVE); } -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_HAS_PMD_SOFTLEAVES #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_HAS_PMD_SOFTLEAVES */ /* * In the RV64 Linux scheme, we give the user half of the virtual-address space
arch/riscv/Kconfig renamed from arch/riscv/Kconfig~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +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_HAS_PMD_SOFTLEAVES if TRANSPARENT_HUGEPAGE select ARCH_HAS_BINFMT_FLAT select ARCH_HAS_CC_CAN_LINK select ARCH_HAS_CURRENT_STACK_POINTER
arch/s390/include/asm/pgtable.h renamed from arch/s390/include/asm/pgtable.h~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +1 -1
@@ -903,7 +903,7 @@ static inline pmd_t pmd_clear_soft_dirtyreturn clear_pmd_bit (pmd,__pgprot (_SEGMENT_ENTRY_SOFT_DIRTY)); } -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_HAS_PMD_SOFTLEAVES #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/s390/Kconfig renamed from arch/s390/Kconfig~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +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_HAS_PMD_SOFTLEAVES if TRANSPARENT_HUGEPAGE select ARCH_HAS_CC_CAN_LINK select ARCH_HAS_CPU_FINALIZE_INIT select ARCH_HAS_CURRENT_STACK_POINTER
arch/x86/include/asm/pgtable.h renamed from arch/x86/include/asm/pgtable.h~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +1 -1
@@ -1545,7 +1545,7 @@ static inline pte_t pte_swp_clear_soft_dreturn pte_clear_flags (pte, _PAGE_SWP_SOFT_DIRTY); } -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_HAS_PMD_SOFTLEAVES static inline pmd_t pmd_swp_mksoft_dirty (pmd_t pmd) {return pmd_set_flags (pmd, _PAGE_SWP_SOFT_DIRTY);
arch/x86/Kconfig renamed from arch/x86/Kconfig~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +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_HAS_PMD_SOFTLEAVES 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
include/linux/huge_mm.h renamed from include/linux/huge_mm.h~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +1 -1
@@ -567,7 +567,7 @@ static inline struct folio *get_persistestatic inline bool thp_migration_supported (void ) { -return IS_ENABLED (CONFIG_ARCH_ENABLE_THP_MIGRATION ); +return IS_ENABLED (CONFIG_ARCH_HAS_PMD_SOFTLEAVES ); } void split_huge_pmd_locked(struct vm_area_struct *vma, unsigned long address,
include/linux/leafops.h renamed from include/linux/leafops.h~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +4 -4
@@ -81,7 +81,7 @@ static inline pte_t softleaf_to_pte(softreturn swp_entry_to_pte (entry); } -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_HAS_PMD_SOFTLEAVES /** * 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(ptreturn false; } -#if defined(CONFIG_ZONE_DEVICE ) && defined(CONFIG_ARCH_ENABLE_THP_MIGRATION ) +#if defined(CONFIG_ZONE_DEVICE ) && defined(CONFIG_ARCH_HAS_PMD_SOFTLEAVES )/** * pmd_is_device_private_entry() - Check if PMD contains a device private swap
@@ -606,14 +606,14 @@ static inline bool pmd_is_device_private return softleaf_is_device_private(softleaf_from_pmd(pmd)); } -#else /* CONFIG_ZONE_DEVICE && CONFIG_ARCH_ENABLE_THP_MIGRATION */ +#else /* CONFIG_ZONE_DEVICE && CONFIG_ARCH_HAS_PMD_SOFTLEAVES */ 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_HAS_PMD_SOFTLEAVES */ /** * pmd_is_migration_entry() - Does this PMD entry encode a migration entry?
include/linux/pgtable.h renamed from include/linux/pgtable.h~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +1 -1
@@ -1839,7 +1839,7 @@ static inline pgprot_t pgprot_modify(pgp#endif #ifdef CONFIG_HAVE_ARCH_SOFT_DIRTY -#ifndef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifndef CONFIG_ARCH_HAS_PMD_SOFTLEAVES static inline pmd_t pmd_swp_mksoft_dirty(pmd_t pmd) { return pmd;
include/linux/swapops.h renamed from include/linux/swapops.h~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +3 -3
@@ -321,7 +321,7 @@ static inline swp_entry_t make_guard_swpstruct page_vma_mapped_walk ; -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_HAS_PMD_SOFTLEAVES 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 return __swp_entry_to_pmd(arch_entry); } -#else /* CONFIG_ARCH_ENABLE_THP_MIGRATION */ +#else /* CONFIG_ARCH_HAS_PMD_SOFTLEAVES */ 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(swpreturn __pmd (0 ); } -#endif /* CONFIG_ARCH_ENABLE_THP_MIGRATION */ +#endif /* CONFIG_ARCH_HAS_PMD_SOFTLEAVES */ #endif /* CONFIG_MMU */ #endif /* _LINUX_SWAPOPS_H */
mm/debug_vm_pgtable.c renamed from mm/debug_vm_pgtable.c~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +4 -4
@@ -751,7 +751,7 @@ static void __init pmd_leaf_soft_dirty_tpmd_t pmd;if (!pgtable_supports_soft_dirty () || - !IS_ENABLED (CONFIG_ARCH_ENABLE_THP_MIGRATION )) + !IS_ENABLED (CONFIG_ARCH_HAS_PMD_SOFTLEAVES ))return ;if (!has_transparent_hugepage ())
@@ -819,7 +819,7 @@ static void __init pte_swap_tests(structWARN_ON (memcmp (&pte1, &pte2,sizeof (pte1))); } -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_HAS_PMD_SOFTLEAVES 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(st pmd2 =__swp_entry_to_pmd (arch_entry); WARN_ON(memcmp(&pmd1, &pmd2, sizeof(pmd1))); } -#else /* !CONFIG_ARCH_ENABLE_THP_MIGRATION */ +#else /* !CONFIG_ARCH_HAS_PMD_SOFTLEAVES */ static void __init pmd_softleaf_tests (struct pgtable_debug_args *args) { } -#endif /* CONFIG_ARCH_ENABLE_THP_MIGRATION */ +#endif /* CONFIG_ARCH_HAS_PMD_SOFTLEAVES */ static void __init swap_migration_tests (struct pgtable_debug_args *args) {
mm/hmm.c renamed from mm/hmm.c~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +2 -2
@@ -331,7 +331,7 @@ fault:return hmm_vma_fault (addr, end, required_fault, walk); } -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_HAS_PMD_SOFTLEAVES 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(strreturn -EFAULT ;return hmm_pfns_fill (start, end, range,HMM_PFN_ERROR ); } -#endif /* CONFIG_ARCH_ENABLE_THP_MIGRATION */ +#endif /* CONFIG_ARCH_HAS_PMD_SOFTLEAVES */ static int hmm_vma_walk_pmd(pmd_t *pmdp, unsigned long start,
mm/huge_memory.c renamed from mm/huge_memory.c~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +1 -1
@@ -4868,7 +4868,7 @@ static int __init split_huge_pages_debuglate_initcall (split_huge_pages_debugfs);#endif -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_HAS_PMD_SOFTLEAVES int set_pmd_migration_entry (struct page_vma_mapped_walk *pvmw,struct page *page) {
mm/Kconfig renamed from mm/Kconfig~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +1 -1
@@ -703,7 +703,7 @@ config DEVICE_MIGRATION config ARCH_ENABLE_HUGEPAGE_MIGRATION bool -config ARCH_ENABLE_THP_MIGRATION +config ARCH_HAS_PMD_SOFTLEAVES bool config HUGETLB_PAGE_SIZE_VARIABLE
mm/migrate.c renamed from mm/migrate.c~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +2 -2
@@ -362,7 +362,7 @@ static bool remove_migration_pte(struct idx =linear_page_index (vma, pvmw.address) - pvmw.pgoff; new =folio_page (folio, idx); -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_HAS_PMD_SOFTLEAVES /* PMD-mapped THP migration entry */ if (!pvmw.pte) { VM_BUG_ON_FOLIO(folio_test_hugetlb(folio) ||
@@ -545,7 +545,7 @@ fail: }#endif -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_HAS_PMD_SOFTLEAVES void pmd_migration_entry_wait (struct mm_struct *mm,pmd_t *pmd) {spinlock_t *ptl;
mm/migrate_device.c renamed from mm/migrate_device.c~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +3 -3
@@ -772,7 +772,7 @@ int migrate_vma_setup(struct migrate_vma }EXPORT_SYMBOL (migrate_vma_setup); -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_HAS_PMD_SOFTLEAVES /** * 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
@@ -927,7 +927,7 @@ static int migrate_vma_split_unmapped_fo migrate->src[i+idx] =migrate_pfn (pfn + i) | flags;return ret; } -#else /* !CONFIG_ARCH_ENABLE_THP_MIGRATION */ +#else /* !CONFIG_ARCH_HAS_PMD_SOFTLEAVES */ static int migrate_vma_insert_huge_pmd_page(struct migrate_vma *migrate, unsigned long addr, struct page *page,
@@ -948,7 +948,7 @@ static int migrate_vma_split_unmapped_fostatic unsigned long migrate_vma_nr_pages (unsigned long *src) {unsigned long nr =1 ; -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_HAS_PMD_SOFTLEAVES if (*src &MIGRATE_PFN_COMPOUND ) nr =HPAGE_PMD_NR ;#else
mm/rmap.c renamed from mm/rmap.c~mm-rename-arch_enable_thp_migration-to-arch_has_pmd_softleaves +1 -1
@@ -2472,7 +2472,7 @@ static bool try_to_migrate_one(struct fopage_vma_mapped_walk_restart (&pvmw);continue ; } -#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION +#ifdef CONFIG_ARCH_HAS_PMD_SOFTLEAVES pmdval =pmdp_get (pvmw.pmd);if (likely (pmd_present (pmdval))) pfn =pmd_pfn (pmdval);
_
Patches currently in -mm which might be from [email protected] are
mm-mempolicy-skip-non-present-pmds-when-queueing-folios.patch mm-madvise-skip-device-private-pmds-in-cold-and-pageout-walks.patch mm-huge_memory-skip-device-private-pmds-in-madvise_free_huge_pmd.patch mm-vmstat-mm-memcontrol-add-_monotonic-vmstat-readers.patch mm-vmscan-reduce-lru_lock-contention-via-vmstat-derived-scan-balance-cost.patch