Commit ed3b875bea55 for kernel

commit ed3b875bea55a3ec4837113356df2ead11115af9
Merge: 7f063b2f17ea 08745c623501
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Thu Aug 20 18:17:08 2026 -0700

    Merge tag 'mm-stable-2026-08-18-18-39' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm

    Pull MM updates from Andrew Morton:

     - "mm: drop "sub" prefix from various places" (Dev Jain)

       page->folio conversion and a naming cleanup

     - "mm/kasan: remove redundant initialization for kasan_flag_write_only"
       (Igor Putko)

       KASAN cleanup work

     - "mm/filemap: reduce unnecessary xarray lookups" (Chi Zhiling)

       Small speedup in the pagecaache read code

     - "mm/percpu: Fix possible NOFS/NOIO reclaim recursion" (Kaitao Cheng)

       Improve the vmalloc code - mainly the avoidance of GFP_KERNEL
       allocations when the caller asked for GFP_NOFS or GFP_NOIO

     - "mm/kmemleak: avoid soft lockup when scanning task stacks" (Breno
       Leitao)

       Avoid a soft lockup watchdog trigger from the kmemleak scanning code
       in extreme situations

     - "mm/page_owner: misc cleanups" (Ye Liu)

       Cleanups to the page_owner code. For some reason lots of people have
       been working on the page_owner code this cycle.

     - "mm: convert to walk_page_range_vma() to eliminate find_vma()"
       (Kefeng Wang)

       Simplify and accelerate the page walking library function

     - "mm/migrate: preparatory cleanups for batch copy and offload"
       (Shivank Garg)

       Cleanups in the migration code

     - "mm/page_owner: add per-fd filter infrastructure for print_mode and
       NUMA filtering" (Zhen Ni)

       Per-fd filtering to page_owner in order to reduce the sometimes vast
       amount of output it can produce

     - "mm: Refactor bootmem gigantic hugepage allocation" (Muchun Song)

       Fixes and preparatory cleanups around bootmem HugeTLB handling,
       sparse initialization ordering, and related vmemmap setup

     - "mm/zsmalloc: reduce lock contention in zs_free()" (Wenchao Hao)

       Reduce lock contention in zs_free(), which dominates the unmap path
       under memory pressure on Android (LMK kills) and on x86 servers
       running zswap-heavy workloads.

       Up to 1.83x improvement in microbenchmarking.

     - "move alloc_tag.c file under mm/" (Suren Baghdasaryan)

     - "samples/damon: handle damon_{start,stop}() failures" (SJ Park)

       Fix improper handling of damon_start(), damon_stop(), and
       damon_call() failures across DAMON sample modules to prevent
       potential memory leaks, operation disruptions and use-after-free
       bugs

     - "mm/damon/sysfs: kobject_del() directories that users can
       create/remove" (SJ Park)

       Fix delayed sysfs directory removal under DEBUG_KOBJECT_RELEASE
       causeing creation failures due to duplicate directory names by adding
       missing kobject_del() calls before creating new directories

     - "mm: cleanup clear_not_present_full_ptes()" (David Hildenbrand)

       Clean up the core pte handling code

     - "selftests/damon: misc fixes for test bugs" (Kunwu Chan)

       Fix several bugs in the DAMON selftests

     - "selftests/damon: fix memcg_path staging handling" (Cheng Nie)

       Fix a bug in _damon_sysfs.py for damos_filter memcg_path setup, and
       add a test case for it in sysfs.py.

     - "selftests/damon: test kdamond refresh_ms" (Ruslan Valiyev)

       Selftest coverage for DAMON's refresh_ms sysfs feature by updating
       the test control module and verifying that scheme stats update
       automatically without manual intervention

     - "mm/damon: five misc fixups" (Akinobu Mita)

       Miscellaneous DAMON fixups.

     - "mm/damon/core: detect internal variation above max_nr_regions/2"
       (Jiayuan Chen)

       Fix DAMON's region splitting behavior when region counts exceed half
       the maximum budget by dynamically scaling down the split fraction as
       the limit approaches, preventing large regions from staying un-split,
       and add corresponding KUnit test coverage

     - "mm: preparatory patches for PMD level swap entries" (Usama Arif)

       Refactor and clean up PMD softleaf helpers, call sites, and
       architecture flags to lay the groundwork for a follow-up series that
       introduces PMD page table swap entries

     - "mm/damon: update, optimize, and clean up doc, tests, and code" (SJ
       Park)

       Update DAMON design and ABI documentation, expands unit and selftest
       coverage, optimize damon_commit_target_regions(), and clean up
       recently added sysfs interface code for better readability

     - "mm/vmpressure: reduce CPU, memory and code overhead on cgroup v2"
       (Usama Arif)

       Optimize vmpressure() by skipping unnecessary work on cgroup v2 for
       userspace event notifications and refactor v1-only eventfd handling
       into mm/memcontrol-v1.c to reduce memory overhead and code complexity

     - "selftests/mm: refactor pkey helpers and fix mmap error handling"
       (Hongfu Li)

       Refactor pkeys shared tracing and assertion helpers into a common
       file, unify protection key selftests to use consistent diagnostic
       logging and assertions, and enforce standardized MAP_FAILED return
       checks for mmap() calls across the tests

     - "mm/damon: optimize out nr_accesses_bp" (SJ Park)

       Replace the error-prone, continuously updated nr_accesses_bp field in
       damon_region with an on-demand moving sum function, reducing
       structure memory overhead and avoiding state corruption bugs

     - "Open HugeTLB allocation routine for more generic use" (Ackerley Tng)

       Decouple HugeTLB folio allocation from VMA dependencies by
       introducing hugetlb_alloc_folio(), enabling subsystems like
       guest_memfd to allocate HugeTLB folios without standard VMA
       reservations or pseudo-VMAs

     - "mm/damon: provide pseudo moving sum probe_hits" (SJ Park)

       Integrate DAMON's probe_hits attribute counter into the pseudo moving
       sum infrastructure, enabling real-time, online monitoring without
       waiting for full aggregation intervals

     - "mm: Some cleanups for page allocator APIs" (Brendan Jackman)

       Simplify and refactor the page allocator entry points and flags by
       unifying allocation paths, adding internal alloc_flags arguments, and
       eliminating redundant __ prefixed alloc_pages variants.

     - "Fix incorrect access of hugetlb pte entries" (Dev Jain)

       Enforce the consistent use of huge_ptep_get() instead of ptep_get()
       for HugeTLB entries and fixes an unaligned address issue in arm64's
       huge_ptep_get() implementation

     - "mm/damon: validate all parameters in the core" (SJ Park)

       Consolidate parameter validation into the DAMON core specifically
       within damon_start() and damon_commit_ctx() to centralize error
       checking, eliminate caller-side redundant checks and to improve
       maintenance efficiency

     - "tools/mm/page_owner_sort: fix filtering and cleanup issues" (Yichong
       Chen)

       Rename is_need() to filter_record() for clearer return semantics, fix
       per-record allocation memory leaks and bound output copies in
       search_pattern() to address an existing buffer issue

     - "memcg: bail out reclaim when memcg is dying" (Jiayuan Chen)

       Mitigate a system-wide stall which occurs when a cgroup is removed
       while one of its memory control files is doing synchronous reclaim

     - "mm/memory-failure: add panic option for unrecoverable pages" (Breno
       Leitao)

       Introduce an opt-in vm.panic_on_unrecoverable_memory_failure sysctl
       that immediately panics the kernel on unrecoverable memory errors in
       kernel-owned pages to preserve error context and prevent delayed,
       silent data corruption

     - "mm/damon: refactor damon_{start,stop,commit}() for simple error
       handling" (SJ Park)

       Refactor the DAMON core API functions to guarantee that all contexts
       are fully stopped when damon_start(), damon_stop(), or damon_commit()
       fail, eliminating the need for complex and error-prone caller-side
       cleanup code

     - "Keep tail page private zero at free and folio split" (Zi Yan)

       Add checks to ensure tail_page->private is zero when freeing compound
       or high-order pages and when promoting tail pages during large folio
       splits. By validating these fields at free and split time, it allows
       the removal of redundant private field clearing inside
       prep_compound_tail()

     - "mm: drop redundant lru_add_drain in anon folio reuse paths" (Barry
       Song)

       Eliminate redundant lru_add_drain() calls in
       wp_can_reuse_anon_folio() and do_swap_page() to reduce LRU lock
       contention and system overhead

       By validating folio refcounts against the LRU cache before draining
       and removing unnecessary drains in the swap path, it achieves up to a
       30.5% reduction in drain calls during heavy swap workloads

     - "mm: clean up folio LRU and swap declarations" (Jianyue Wu)

       Reorganize folio LRU and swap code by relocating page-cluster state
       to mm/swap_state.c, renaming mm/swap.c to mm/folio.c, and moving
       MM-internal reclaim declarations into mm/internal.h.

     - "userfaultfd: working set tracking for VM guest memory" (Kiryl
       Shutsemau)

       Add userfaultfd support for tracking the working set of VM guest
       memory, so a VMM can identify hot pages and reclaim cold ones to
       tiered or remote storage

     - "mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE (Part 2)" (David
       Hildenbrand)

       Remove the remaining pieces of CONFIG_HAVE_BOOTMEM_INFO_NODE,
       performing some smaller cleanups around freeing of reserved vmemmap
       pages on the way.

     - "mm/damon: update probe hits for runtime parameter commits" (SJ Park)

       Ensure that DAMON's probe_hits attribute counter is properly updated
       when monitoring intervals are changed at runtime, matching the
       behavior of nr_accesses. To achieve this, it refactors and renames
       existing helper functions for shared use, applies the updates to
       probe_hits, and handles edge cases in damon_probe_hits_mvsum() to
       maintain measurement accuracy.

     - "KSM: performance optimizations for rmap_walk_ksm" (xu xin)

       Resolve a severe KSM reverse-mapping performance bottleneck where
       thousands of split VMAs sharing a single anon_vma cause extended lock
       contention.

       By adding an interval-filtering check during the rmap walk, it
       reduces worst-case anon_vma lock hold times from over 500ms down to
       under 2ms, preventing application freezes and latency spikes under
       memory pressure.

     - "mm: split a couple of headers from internal.h" (Mike Rapoport)

       Split declarations related to mm_init, memblock, vmalloc and sparse
       into new headers

     - "KSM: use linear_page_index in collect_procs_ksm()" (xu xin)

       Apply the interval tree optimization from rmap_walk_ksm() to
       collect_procs_ksm() to avoid iterating over non-matching VMAs during
       KSM memory error handling.

       It hoists loop-invariant address initialization and restricts the
       anon_vma_interval_tree_foreach walk to a targeted page offset range,
       reducing redundant checks and improving lookup efficiency.

     - "selftests/mm: avoid false failures in hugetlb and KSM tests" (Sayali
       Patil)

       Fix issues in the hugetlb and KSM MM selftest categories that can
       report failures when the prerequisites for the tests are not
       satisfied

     - "mm/damon: introduce data attributes only monitoring" (SJ Park)

       Introduce attribute-weighted region management in DAMON, allowing
       users to prioritize specific data attributes (such as page sizes or
       cgroups) over or instead of access monitoring.

       By assigning weights to attribute probes, DAMON can completely
       disable access tracking and adjust monitoring regions based on
       weighted probe-hit counters to optimize monitoring quality for
       attribute-focused workloads.

     - "mm/hmm: Add mmap lock-drop support for userfaultfd-backed mappings"
       (Stanislav Kinsburskii)

       Extend hmm_range_fault() to support userfaultfd-backed regions by
       allowing the mmap lock to be dropped during fault handling via a new
       hmm_range_fault_locked() helper.

       By accepting a locked pointer and signaling retry status when lock
       release occurs, it enables page fault resolution in userfaultfd
       regions while preserving backward compatibility for existing callers.

     - "mm: make VMA page offset handling more consistent" (Lorenzo Stoakes)

       Clean up and standardize how vma->vm_pgoff is accessed and
       manipulated across file-backed and anonymous mappings in the kernel

       It introduces dedicated helper functions such as vma_start_pgoff(),
       vma_end_pgoff(), vma_set_pgoff() and linear_page_delta() while
       renaming rmap interval tree helpers to better reflect their
       functionality.

       These changes establish a cleaner foundation for future work that
       will unify virtual page offset indexing for all anonymous and CoW'd
       folios.

     - "mm: handle device-private PMDs in walk callbacks" (Usama Arif)

       Address kernel panics and state corruption caused by MM walk
       callbacks reaching non-present device-private PMD swap entries
       created during HMM migrations

       It ensures that functions which acquire pmd_trans_huge_lock()
       properly recognize device-private PMDs instead of assuming a present
       THP or a standard migration entry.

     - "mm/rmap: Refactor try_to_unmap_one" (Dev Jain)

       Refactor try_to_unmap_one by modularizing Hugetlb,
       anonymous-lazyfree, and anonymous-swapbacked logic into dedicated
       functions, laying the structural groundwork for batched anonymous
       large folio unmapping.

     - "Docs/ABI/damon: sysfs ABI document fixes and additions" (Song Hu)

       Fix typos and fills in missing entries in the DAMON sysfs ABI
       document

     - "dax/kmem: atomic whole-device hotplug via sysfs" (Gregory Price)

       Introduce an atomic sysfs state attribute and supporting DAX/MM
       infrastructure to prevent userland races when offlining and removing
       entire memory regions

       By adding an unplugged state alongside standard online modes, it
       enables whole-device atomic hotplug control while preserving backward
       compatibility.

     - "mm: convert more vm_flags_t users to vma_flags_t" (Lorenzo Stoakes)

       Continue transitioning the kernel from the deprecated vm_flags_t type
       to vma_flags_t across core memory management infrastructure.

       It replaces legacy type usage in core functions such as do_mmap(),
       unmapped area allocation, mm->def_vma_flags, and VMA operations like
       mlock, mprotect, and mremap.

     - "Two small patches to clean up mm/mm_slot.h" (xu xin)

       Refactor mm_slot.h by introducing mm_slot_remove() to unify duplicate
       slot deletion sequences in khugepaged and KSM. It also adds code
       documentation explaining why mm_slot_lookup and mm_slot_insert must
       remain as preprocessor macros rather than static inline functions.

     - "mm/damon/core: hide core-private struct fields" (SJ Park)

       Clean up DAMON core structures by consistently marking internal-only
       fields with private: comment tags to prevent improper direct access
       from outer layers.

       It enforces encapsulation across core structures including
       damon_region, damon_target, and damon_ctx and updates DAMON_SYSFS to
       interact through approved access APIs instead of exposing raw struct
       members.

     - "mm/damon: unurgent fixes for infinite loop, NULL de-ref and races"
       (SJ Park)

       Address potential infinite loops, NULL dereferences, and race
       conditions identified in DAMON

       It fixes an infinite loop triggered by extreme user configurations, a
       NULL pointer dereference within unit tests and minor monitoring
       accuracy degradation caused by subtle runtime races.

     - "mm/page_alloc: fixes for free_pages_nolock() on RT/UP" (Brendan
       Jackman)

       Fix an NMI safety flaw in __free_frozen_pages() where freeing pages
       on non-SMP or PREEMPT_RT kernels can bypass can_spin_trylock() checks
       via non-PCP or isolated migration paths.

       It also resolves potential kernel crashes and privilege escalation
       risks triggered when BPF tracing runs in NMI context alongside memory
       hotplug or large allocation frees.

     - "mm/page_alloc: couple of followups for recent cleanups" (Brendan
       Jackman)

       Clean up and update page allocator nomenclature, documentation, and
       debug assertions.

       It aligns internal FPI_ flags with the public "nolock" naming
       convention, removes outdated internal implementation details from
       high-level page allocator comments, and eliminates obsolete
       VM_BUG_ON() assertions in allocation paths.

     - "mm/mseal: further cleanups" (Lorenzo Stoakes)

       Refactor and simplify the mseal implementation by clarifying API
       boundaries and removing unnecessary code complexity.

       It replaces generic do_mseal() usage outside the syscall with a
       dedicated mseal_mmap_page_zero() helper for MMAP_PAGE_ZERO,
       eliminates mm_struct parameters to enforce that sealing applies only
       to current->mm, and streamlines overall logic and comments with no
       functional changes intended.

     - "mm/vmscan: fix swappiness=max and clean up per-node proactive
       reclaim" (Ridong Chen)

       Resolve reclaim behavior bugs and clean up function parameters across
       memory reclaim paths

       It fixes swappiness=max in both standard reclaim and MGLRU so
       unswappable anonymous memory no longer falls back to evicting page
       cache, ensures reclaim_store() returns accurate error codes instead
       of collapsing all failures into -EAGAIN, and removes the obsolete
       gfp_mask parameter from __node_reclaim().

     - "mm: mincore: misc cleanups" (Kefeng Wang)

       Clean up and simplifies the mincore code. Most importantly, it
       removes the historical special behavior that always reports VM_PFNMAP
       pages as non-resident.

     - "mm/huge_memory: drop dead split helper variants" (Kiryl Shutsemau)

       Two trivial cleanups in the folio split API

     - "mm/damon: fix uninitialized DAMOS field and kunit exec expectation
       bugs" (SJ Park)

       Resolve minor operational and testing bugs in DAMON identified by
       Sashiko. It initializes the damos->last_applied field to prevent
       occasional efficiency degradation and fixes invalid memory accesses
       in DAMON KUnit tests during test failure handling.

     - "cleanup for stable_page_flags()" (Jinjiang Tu)

       Clean up and refactor stable_page_flags() used by /proc/kpageflags
       without altering functionality.

       It uses BIT_ULL() to prevent shift-overflow warnings on 64-bit flag
       bits, converts folio-specific flag checks to standard folio_test_*()
       helpers, and removes redundant CONFIG_PAGE_IDLE_FLAG handling.

     - "Batch unmap of uffd-wp file folios" (Dev Jain)

       Extend batched folio unmapping support to file folios within
       userfaultfd write-protect (uffd-wp) VMAs by adding batching
       capabilities to pte_install_uffd_wp_if_needed().

       This removes special-case restrictions on uffd-wp VMAs in
       try_to_unmap_one(), significantly simplifying the function's control
       flow and complexity.

     - "mm/early_ioremap: clarify and clean up early_ioremap_reset()"
       (Sang-Heon Jeon)

       Clarify and clean up the architecture-specific usage of
       __late_set_fixmap() and __late_clear_fixmap() after
       early_ioremap_reset()

       It adds explicit documentation regarding when early_ioremap_reset()
       must be called and removes redundant macro definitions and reset
       calls in the RISC-V and ARM64 architectures.

     - "mm: fix reclaim storms in defrag_mode" (Johannes Weiner)

       Address severe performance regressions, swap storms, and spurious
       OOMs caused by vm.defrag_mode=1 under high memory pressure in Meta
       production

       It updates the page allocator slowpath so non-movable allocation
       requests actively trigger direct reclaim and direct compaction at
       pageblock_order scale, allowing them to claim whole pageblocks rather
       than spinning unproductively.

     - "zram: lockmap tweaks" (Sebastian Siewior)

       Optimize and fix lockdep tracking for zram devices by consolidating
       per-entry lockmaps and isolate lock classes across multiple instances

       This reduces memory overhead by replacing per-entry lockdep_map
       instances with a single map per struct zram, and assigns a dynamic
       lock_class_key to each instance to prevent false deadlock reports
       when different zram devices are backed by distinct filesystems.

    * tag 'mm-stable-2026-08-18-18-39' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm: (501 commits)
      selftests/mm: thuge-gen: fix test_shmget() for PAGE_SIZE check
      selftests/mm: unpoison pages in memory-failure teardown
      mm/shmem: downgrade final i_blocks check in shmem_evict_inode() to pr_warn()
      mm/khugepaged: replace mutex_lock/mutex_unlock usage with guard macro
      mm/zsmalloc: fix release order of locks in zs_page_migrate()
      Documentation: zram: remove sections numbering
      ksm: stop iterating VMAs when ksm_test_exit returns true
      mm: fold userfaultfd_rwp() to false without CONFIG_ARCH_HAS_PTE_PROTNONE
      mm/migrate: report RCU-tasks quiescent states in migrate_pages_batch()
      zram: use a custom key for each zram object
      zram: move lockmap to be per-zram instead per table
      selftests/mm: fix gup_longterm EINVAL error message
      mm: page_alloc: fix non-movable reclaim storm in defrag_mode
      mm: page_alloc: move capture_control to the page allocator
      mm: compaction: support non-movable compaction for pageblock requests
      mm: page_alloc: __GFP_FS lockdep annotation for direct compaction
      hugetlb: evaluate subpool free state while locked
      mm/damon: remove trailing semicolons after function definitions
      mm/damon/ops-common: prevent migration fallback to non-target nodes
      mm/damon: update outdated comment about DAMOS filter handling
      ...

diff --cc arch/riscv/Kconfig
index bf2e81d258c4,7b9c373d82fa..f8e26c4bed2b
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@@ -22,8 -22,7 +22,8 @@@ config RISC
  	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_ACPI_TABLE_UPGRADE if ACPI
  	select ARCH_HAS_BINFMT_FLAT
  	select ARCH_HAS_CC_CAN_LINK
  	select ARCH_HAS_CURRENT_STACK_POINTER