Skip to content
  1. Apr 06, 2023
    • Suren Baghdasaryan's avatar
      kernel/fork: assert no VMA readers during its destruction · f2e13784
      Suren Baghdasaryan authored
      
      
      Assert there are no holders of VMA lock for reading when it is about to be
      destroyed.
      
      Link: https://lkml.kernel.org/r/20230227173632.3292573-21-surenb@google.com
      Signed-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      f2e13784
    • Suren Baghdasaryan's avatar
      mm: conditionally write-lock VMA in free_pgtables · 98e51a22
      Suren Baghdasaryan authored
      
      
      Normally free_pgtables needs to lock affected VMAs except for the case
      when VMAs were isolated under VMA write-lock.  munmap() does just that,
      isolating while holding appropriate locks and then downgrading mmap_lock
      and dropping per-VMA locks before freeing page tables.  Add a parameter to
      free_pgtables for such scenario.
      
      Link: https://lkml.kernel.org/r/20230227173632.3292573-20-surenb@google.com
      Signed-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      98e51a22
    • Suren Baghdasaryan's avatar
      mm: write-lock VMAs before removing them from VMA tree · 73046fd0
      Suren Baghdasaryan authored
      
      
      Write-locking VMAs before isolating them ensures that page fault handlers
      don't operate on isolated VMAs.
      
      [surenb@google.com: mm/nommu: remove unnecessary VMA locking]
        Link: https://lkml.kernel.org/r/20230301190457.1498985-1-surenb@google.com
        Link: https://lore.kernel.org/all/Y%2F8CJQGNuMUTdLwP@localhost/
      Link: https://lkml.kernel.org/r/20230227173632.3292573-19-surenb@google.com
      Signed-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
      Cc: David Hildenbrand <david@redhat.com>
      Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      73046fd0
    • Suren Baghdasaryan's avatar
      mm/mremap: write-lock VMA while remapping it to a new address range · d6ac235d
      Suren Baghdasaryan authored
      
      
      Write-lock VMA as locked before copying it and when copy_vma produces a
      new VMA.
      
      Link: https://lkml.kernel.org/r/20230227173632.3292573-18-surenb@google.com
      Signed-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
      Reviewed-by: default avatarLaurent Dufour <laurent.dufour@fr.ibm.com>
      Reviewed-by: default avatarHyeonggon Yoo <42.hyeyoo@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      d6ac235d
    • Suren Baghdasaryan's avatar
      mm/mmap: write-lock VMAs in vma_prepare before modifying them · 10fca64a
      Suren Baghdasaryan authored
      
      
      Write-lock all VMAs which might be affected by a merge, split, expand or
      shrink operations.  All these operations use vma_prepare() before making
      the modifications, therefore it provides a centralized place to perform
      VMA locking.
      
      [surenb@google.com: remove unnecessary vp->vma check in vma_prepare]
        Link: https://lkml.kernel.org/r/20230301022720.1380780-1-surenb@google.com
        Link: https://lore.kernel.org/r/202302281802.J93Nma7q-lkp@intel.com/
      Link: https://lkml.kernel.org/r/20230227173632.3292573-17-surenb@google.com
      Signed-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
      Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
      Reviewed-by: default avatarLiam R. Howlett <Liam.Howlett@oracle.com>
      Cc: David Howells <dhowells@redhat.com>
      Cc: Hugh Dickins <hughd@google.com>
      Cc: Jason Gunthorpe <jgg@ziepe.ca>
      Cc: Laurent Dufour <laurent.dufour@fr.ibm.com>
      Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
      Cc: Matthew Wilcox <willy@infradead.org>
      Cc: Pavel Tatashin <pasha.tatashin@soleen.com>
      Cc: Stephen Rothwell <sfr@canb.auug.org.au>
      Cc: Yu Zhao <yuzhao@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      10fca64a
    • Suren Baghdasaryan's avatar
      mm/khugepaged: write-lock VMA while collapsing a huge page · 55fd6fcc
      Suren Baghdasaryan authored
      
      
      Protect VMA from concurrent page fault handler while collapsing a huge
      page.  Page fault handler needs a stable PMD to use PTL and relies on
      per-VMA lock to prevent concurrent PMD changes.  pmdp_collapse_flush(),
      set_huge_pmd() and collapse_and_free_pmd() can modify a PMD, which will
      not be detected by a page fault handler without proper locking.
      
      Before this patch, page tables can be walked under any one of the
      mmap_lock, the mapping lock, and the anon_vma lock; so when khugepaged
      unlinks and frees page tables, it must ensure that all of those either are
      locked or don't exist.  This patch adds a fourth lock under which page
      tables can be traversed, and so khugepaged must also lock out that one.
      
      [surenb@google.com: vm_lock/i_mmap_rwsem inversion in retract_page_tables]
        Link: https://lkml.kernel.org/r/20230303213250.3555716-1-surenb@google.com
      [surenb@google.com: build fix]
        Link: https://lkml.kernel.org/r/CAJuCfpFjWhtzRE1X=J+_JjgJzNKhq-=JT8yTBSTHthwp0pqWZw@mail.gmail.com
      Link: https://lkml.kernel.org/r/20230227173632.3292573-16-surenb@google.com
      Signed-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      55fd6fcc
    • Suren Baghdasaryan's avatar
      mm/mmap: move vma_prepare before vma_adjust_trans_huge · ccf1d78d
      Suren Baghdasaryan authored
      
      
      vma_prepare() acquires all locks required before VMA modifications.  Move
      vma_prepare() before vma_adjust_trans_huge() so that VMA is locked before
      any modification.
      
      Link: https://lkml.kernel.org/r/20230227173632.3292573-15-surenb@google.com
      Signed-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      ccf1d78d
    • Suren Baghdasaryan's avatar
      mm: mark VMA as being written when changing vm_flags · c7322933
      Suren Baghdasaryan authored
      
      
      Updates to vm_flags have to be done with VMA marked as being written for
      preventing concurrent page faults or other modifications.
      
      Link: https://lkml.kernel.org/r/20230227173632.3292573-14-surenb@google.com
      Signed-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      c7322933
    • Suren Baghdasaryan's avatar
      mm: add per-VMA lock and helper functions to control it · 5e31275c
      Suren Baghdasaryan authored
      
      
      Introduce per-VMA locking.  The lock implementation relies on a per-vma
      and per-mm sequence counters to note exclusive locking:
      
        - read lock - (implemented by vma_start_read) requires the vma
          (vm_lock_seq) and mm (mm_lock_seq) sequence counters to differ.
          If they match then there must be a vma exclusive lock held somewhere.
        - read unlock - (implemented by vma_end_read) is a trivial vma->lock
          unlock.
        - write lock - (vma_start_write) requires the mmap_lock to be held
          exclusively and the current mm counter is assigned to the vma counter.
          This will allow multiple vmas to be locked under a single mmap_lock
          write lock (e.g. during vma merging). The vma counter is modified
          under exclusive vma lock.
        - write unlock - (vma_end_write_all) is a batch release of all vma
          locks held. It doesn't pair with a specific vma_start_write! It is
          done before exclusive mmap_lock is released by incrementing mm
          sequence counter (mm_lock_seq).
        - write downgrade - if the mmap_lock is downgraded to the read lock, all
          vma write locks are released as well (effectivelly same as write
          unlock).
      
      Link: https://lkml.kernel.org/r/20230227173632.3292573-13-surenb@google.com
      Signed-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      5e31275c
    • Suren Baghdasaryan's avatar
      mm: move mmap_lock assert function definitions · 438b6e12
      Suren Baghdasaryan authored
      
      
      Move mmap_lock assert function definitions up so that they can be used by
      other mmap_lock routines.
      
      Link: https://lkml.kernel.org/r/20230227173632.3292573-12-surenb@google.com
      Signed-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      438b6e12
    • Michel Lespinasse's avatar
      mm: rcu safe VMA freeing · 20cce633
      Michel Lespinasse authored
      
      
      This prepares for page faults handling under VMA lock, looking up VMAs
      under protection of an rcu read lock, instead of the usual mmap read lock.
      
      Link: https://lkml.kernel.org/r/20230227173632.3292573-11-surenb@google.com
      Signed-off-by: default avatarMichel Lespinasse <michel@lespinasse.org>
      Signed-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      20cce633
    • Suren Baghdasaryan's avatar
      mm: introduce CONFIG_PER_VMA_LOCK · 0b6cc04f
      Suren Baghdasaryan authored
      
      
      Patch series "Per-VMA locks", v4.
      
      LWN article describing the feature: https://lwn.net/Articles/906852/
      
      Per-vma locks idea that was discussed during SPF [1] discussion at LSF/MM
      last year [2], which concluded with suggestion that “a reader/writer
      semaphore could be put into the VMA itself; that would have the effect of
      using the VMA as a sort of range lock.  There would still be contention at
      the VMA level, but it would be an improvement.” This patchset implements
      this suggested approach.
      
      When handling page faults we lookup the VMA that contains the faulting
      page under RCU protection and try to acquire its lock.  If that fails we
      fall back to using mmap_lock, similar to how SPF handled this situation.
      
      One notable way the implementation deviates from the proposal is the way
      VMAs are read-locked.  During some of mm updates, multiple VMAs need to be
      locked until the end of the update (e.g.  vma_merge, split_vma, etc). 
      Tracking all the locked VMAs, avoiding recursive locks, figuring out when
      it's safe to unlock previously locked VMAs would make the code more
      complex.  So, instead of the usual lock/unlock pattern, the proposed
      solution marks a VMA as locked and provides an efficient way to:
      
      1. Identify locked VMAs.
      
      2. Unlock all locked VMAs in bulk.
      
      We also postpone unlocking the locked VMAs until the end of the update,
      when we do mmap_write_unlock.  Potentially this keeps a VMA locked for
      longer than is absolutely necessary but it results in a big reduction of
      code complexity.
      
      Read-locking a VMA is done using two sequence numbers - one in the
      vm_area_struct and one in the mm_struct.  VMA is considered read-locked
      when these sequence numbers are equal.  To read-lock a VMA we set the
      sequence number in vm_area_struct to be equal to the sequence number in
      mm_struct.  To unlock all VMAs we increment mm_struct's seq number.  This
      allows for an efficient way to track locked VMAs and to drop the locks on
      all VMAs at the end of the update.
      
      The patchset implements per-VMA locking only for anonymous pages which are
      not in swap and avoids userfaultfs as their implementation is more
      complex.  Additional support for file-back page faults, swapped and user
      pages can be added incrementally.
      
      Performance benchmarks show similar although slightly smaller benefits as
      with SPF patchset (~75% of SPF benefits).  Still, with lower complexity
      this approach might be more desirable.
      
      Since RFC was posted in September 2022, two separate Google teams outside
      of Android evaluated the patchset and confirmed positive results.  Here
      are the known usecases when per-VMA locks show benefits:
      
      Android:
      
      Apps with high number of threads (~100) launch times improve by up to 20%.
      Each thread mmaps several areas upon startup (Stack and Thread-local
      storage (TLS), thread signal stack, indirect ref table), which requires
      taking mmap_lock in write mode.  Page faults take mmap_lock in read mode. 
      During app launch, both thread creation and page faults establishing the
      active workinget are happening in parallel and that causes lock contention
      between mm writers and readers even if updates and page faults are
      happening in different VMAs.  Per-vma locks prevent this contention by
      providing more granular lock.
      
      Google Fibers:
      
      We have several dynamically sized thread pools that spawn new threads
      under increased load and reduce their number when idling. For example,
      Google's in-process scheduling/threading framework, UMCG/Fibers, is backed
      by such a thread pool. When idling, only a small number of idle worker
      threads are available; when a spike of incoming requests arrive, each
      request is handled in its own "fiber", which is a work item posted onto a
      UMCG worker thread; quite often these spikes lead to a number of new
      threads spawning. Each new thread needs to allocate and register an RSEQ
      section on its TLS, then register itself with the kernel as a UMCG worker
      thread, and only after that it can be considered by the in-process
      UMCG/Fiber scheduler as available to do useful work. In short, during an
      incoming workload spike new threads have to be spawned, and they perform
      several syscalls (RSEQ registration, UMCG worker registration, memory
      allocations) before they can actually start doing useful work. Removing
      any bottlenecks on this thread startup path will greatly improve our
      services' latencies when faced with request/workload spikes.
      
      At high scale, mmap_lock contention during thread creation and stack page
      faults leads to user-visible multi-second serving latencies in a similar
      pattern to Android app startup.  Per-VMA locking patchset has been run
      successfully in limited experiments with user-facing production workloads.
      In these experiments, we observed that the peak thread creation rate was
      high enough that thread creation is no longer a bottleneck.
      
      TCP zerocopy receive:
      
      From the point of view of TCP zerocopy receive, the per-vma lock patch is
      massively beneficial.
      
      In today's implementation, a process with N threads where N - 1 are
      performing zerocopy receive and 1 thread is performing madvise() with the
      write lock taken (e.g.  needs to change vm_flags) will result in all N -1
      receive threads blocking until the madvise is done.  Conversely, on a busy
      process receiving a lot of data, an madvise operation that does need to
      take the mmap lock in write mode will need to wait for all of the receives
      to be done - a lose:lose proposition.  Per-VMA locking _removes_ by
      definition this source of contention entirely.
      
      There are other benefits for receive as well, chiefly a reduction in
      cacheline bouncing across receiving threads for locking/unlocking the
      single mmap lock.  On an RPC style synthetic workload with 4KB RPCs:
      
      1a) The find+lock+unlock VMA path in the base case, without the
          per-vma lock patchset, is about 0.7% of cycles as measured by perf.
      
      1b) mmap_read_lock + mmap_read_unlock in the base case is about 0.5%
          cycles overall - most of this is within the TCP read hotpath (a small
          fraction is 'other' usage in the system).
      
      2a) The find+lock+unlock VMA path, with the per-vma patchset and a
          trivial patch written to take advantage of it in TCP, is about 0.4% of
          cycles (down from 0.7% above)
      
      2b) mmap_read_lock + mmap_read_unlock in the per-vma patchset is <
          0.1% cycles and is out of the TCP read hotpath entirely (down from
          0.5% before, the remaining usage is the 'other' usage in the system). 
          So, in addition to entirely removing an onerous source of contention,
          it also reduces the CPU cycles of TCP receive zerocopy by about 0.5%+
          (compared to overall cycles in perf) for the 'small' RPC scenario.
      
      In https://lkml.kernel.org/r/87fsaqouyd.fsf_-_@stealth, Punit
      demonstrated throughput improvements of as much as 188% from this
      patchset.
      
      
      This patch (of 25):
      
      This configuration variable will be used to build the support for VMA
      locking during page fault handling.
      
      This is enabled on supported architectures with SMP and MMU set.
      
      The architecture support is needed since the page fault handler is called
      from the architecture's page faulting code which needs modifications to
      handle faults under VMA lock.
      
      Link: https://lkml.kernel.org/r/20230227173632.3292573-1-surenb@google.com
      Link: https://lkml.kernel.org/r/20230227173632.3292573-10-surenb@google.com
      Signed-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      0b6cc04f
    • Matthew Wilcox (Oracle)'s avatar
      mm: hold the RCU read lock over calls to ->map_pages · 58ef47ef
      Matthew Wilcox (Oracle) authored
      
      
      Prevent filesystems from doing things which sleep in their map_pages
      method.  This is in preparation for a pagefault path protected only by
      RCU.
      
      Link: https://lkml.kernel.org/r/20230327174515.1811532-4-willy@infradead.org
      Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
      Cc: Darrick J. Wong <djwong@kernel.org>
      Cc: Dave Chinner <david@fromorbit.com>
      Cc: David Howells <dhowells@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      58ef47ef
    • Matthew Wilcox (Oracle)'s avatar
      afs: split afs_pagecache_valid() out of afs_validate() · 0050d7f5
      Matthew Wilcox (Oracle) authored
      
      
      For the map_pages() method, we need a test that does not sleep.  The page
      fault handler will continue to call the fault() method where we can sleep
      and do the full revalidation there.
      
      Link: https://lkml.kernel.org/r/20230327174515.1811532-3-willy@infradead.org
      Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
      Acked-by: default avatarDavid Howells <dhowells@redhat.com>
      Tested-by: default avatarDavid Howells <dhowells@redhat.com>
      Cc: Darrick J. Wong <djwong@kernel.org>
      Cc: Dave Chinner <david@fromorbit.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      0050d7f5
    • Matthew Wilcox (Oracle)'s avatar
      xfs: remove xfs_filemap_map_pages() wrapper · 945ea457
      Matthew Wilcox (Oracle) authored
      
      
      Patch series "Prevent ->map_pages from sleeping", v2.
      
      In preparation for a larger patch series which will handle (some, easy)
      page faults protected only by RCU, change the two filesystems which have
      sleeping locks to not take them and hold the RCU lock around calls to
      ->map_page to prevent other filesystems from adding sleeping locks.
      
      
      This patch (of 3):
      
      XFS doesn't actually need to be holding the XFS_MMAPLOCK_SHARED to do
      this.  filemap_map_pages() cannot bring new folios into the page cache
      and the folio lock is taken during filemap_map_pages() which provides
      sufficient protection against a truncation or hole punch.
      
      Link: https://lkml.kernel.org/r/20230327174515.1811532-1-willy@infradead.org
      Link: https://lkml.kernel.org/r/20230327174515.1811532-2-willy@infradead.org
      Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
      Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
      Cc: Darrick J. Wong <djwong@kernel.org>
      Cc: David Howells <dhowells@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      945ea457
    • Thomas Weißschuh's avatar
      mm/damon/sysfs: make more kobj_type structures constant · 02cd4eb8
      Thomas Weißschuh authored
      Since commit ee6d3dd4 ("driver core: make kobj_type constant.") the
      driver core allows the usage of const struct kobj_type.
      
      Take advantage of this to constify the structure definition to prevent
      modification at runtime.
      
      These structures were not constified in commit e56397e8
      
      
      ("mm/damon/sysfs: make kobj_type structures constant") as they didn't
      exist when that patch was written.
      
      Link: https://lkml.kernel.org/r/20230324-b4-kobj_type-damon2-v1-1-48ddbf1c8fcf@weissschuh.net
      Signed-off-by: default avatarThomas Weißschuh <linux@weissschuh.net>
      Reviewed-by: default avatarSeongJae Park <sj@kernel.org>
      Reviewed-by: default avatarMuhammad Usama Anjum <usama.anjum@collabora.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      02cd4eb8
    • Chaitanya S Prakash's avatar
      selftests/mm: set overcommit_policy as OVERCOMMIT_ALWAYS · d6c27897
      Chaitanya S Prakash authored
      
      
      The kernel's default behaviour is to obstruct the allocation of high
      virtual address as it handles memory overcommit in a heuristic manner. 
      Setting the parameter as OVERCOMMIT_ALWAYS, ensures kernel isn't
      susceptible to the availability of a platform's physical memory when
      denying a memory allocation request.
      
      Link: https://lkml.kernel.org/r/20230323060121.1175830-4-chaitanyas.prakash@arm.com
      Signed-off-by: default avatarChaitanya S Prakash <chaitanyas.prakash@arm.com>
      Cc: David Hildenbrand <david@redhat.com>
      Cc: Shuah Khan <shuah@kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      d6c27897
    • Chaitanya S Prakash's avatar
      selftests/mm: change NR_CHUNKS_HIGH for aarch64 · 3f9bea2b
      Chaitanya S Prakash authored
      
      
      Although there is a provision for 52 bit VA on arm64 platform, it remains
      unutilised and higher addresses are not allocated.  In order to
      accommodate 4PB [2^52] virtual address space where supported,
      NR_CHUNKS_HIGH is changed accordingly.
      
      Array holding addresses is changed from static allocation to dynamic
      allocation to accommodate its voluminous nature which otherwise might
      overflow the stack.
      
      Link: https://lkml.kernel.org/r/20230323060121.1175830-3-chaitanyas.prakash@arm.com
      Signed-off-by: default avatarChaitanya S Prakash <chaitanyas.prakash@arm.com>
      Cc: David Hildenbrand <david@redhat.com>
      Cc: Shuah Khan <shuah@kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      3f9bea2b
    • Chaitanya S Prakash's avatar
      selftests/mm: change MAP_CHUNK_SIZE · 3cce258e
      Chaitanya S Prakash authored
      
      
      Patch series "selftests: Fix virtual address range for arm64", v2.
      
      When the virtual address range selftest is run on arm64 and x86 platforms,
      it is observed that both the low and high VA range iterations are skipped
      when the MAP_CHUNK_SIZE is set to 16GB.  The MAP_CHUNK_SIZE is changed to
      1GB to resolve this issue, following which support for arm64 platform is
      added by changing the NR_CHUNKS_HIGH for aarch64 to accommodate up to 4PB
      of virtual address space allocation requests.  Dynamic memory allocation
      of array holding addresses is introduced to prevent overflow of the stack.
      Finally, the overcommit_policy is set as OVERCOMMIT_ALWAYS to prevent the
      kernel from denying a memory allocation request based on a platform's
      physical memory availability.
      
      
      This patch (of 3):
      
      mmap() fails to allocate 16GB virtual space chunk, skipping both low and
      high VA range iterations.  Hence, reduce MAP_CHUNK_SIZE to 1GB and update
      relevant macros as required.
      
      Link: https://lkml.kernel.org/r/20230323060121.1175830-1-chaitanyas.prakash@arm.com
      Link: https://lkml.kernel.org/r/20230323060121.1175830-2-chaitanyas.prakash@arm.com
      Signed-off-by: default avatarChaitanya S Prakash <chaitanyas.prakash@arm.com>
      Cc: David Hildenbrand <david@redhat.com>
      Cc: Shuah Khan <shuah@kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      3cce258e
    • Wenchao Hao's avatar
      trace: cma: remove unnecessary event class cma_alloc_class · c710fac6
      Wenchao Hao authored
      After commit cb6c33d4
      
       ("cma: tracing: print alloc result in
      trace_cma_alloc_finish"), cma_alloc_class has only one event which is
      cma_alloc_busy_retry.  So we can remove the cma_alloc_class.
      
      Link: https://lkml.kernel.org/r/20230323114136.177677-1-haowenchao2@huawei.com
      Signed-off-by: default avatarWenchao Hao <haowenchao2@huawei.com>
      Acked-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
      Cc: Feilong Lin <linfeilong@huawei.com>
      Cc: Hongxiang Lou <louhongxiang@huawei.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      c710fac6
    • Tomas Krcka's avatar
      mm: be less noisy during memory hotplug · dd31bad2
      Tomas Krcka authored
      
      
      Turn a pr_info() into a pr_debug() to prevent dmesg spamming on systems
      where memory hotplug is a frequent operation.
      
      Link: https://lkml.kernel.org/r/20230323174349.35990-1-krckatom@amazon.de
      Signed-off-by: default avatarTomas Krcka <krckatom@amazon.de>
      Suggested-by: default avatarJan H. Schönherr <jschoenh@amazon.de>
      Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
      Reviewed-by: default avatarPasha Tatashin <pasha.tatashin@soleen.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      dd31bad2
    • Lorenzo Stoakes's avatar
      mm/mmap/vma_merge: init cleanup, be explicit about the non-mergeable case · 0173db4f
      Lorenzo Stoakes authored
      
      
      Rather than setting err = -1 and only resetting if we hit merge cases,
      explicitly check the non-mergeable case to make it abundantly clear that
      we only proceed with the rest if something is mergeable, default err to 0
      and only update if an error might occur.
      
      Move the merge_prev, merge_next cases closer to the logic determining
      curr, next and reorder initial variables so they are more logically
      grouped.
      
      This has no functional impact.
      
      Link: https://lkml.kernel.org/r/99259fbc6403e80e270e1cc4612abbc8620b121b.1679516210.git.lstoakes@gmail.com
      Signed-off-by: default avatarLorenzo Stoakes <lstoakes@gmail.com>
      Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: David Hildenbrand <david@redhat.com>
      Cc: Liam R. Howlett <Liam.Howlett@oracle.com>
      Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
      Cc: Vernon Yang <vernon2gm@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      0173db4f
    • Lorenzo Stoakes's avatar
      mm/mmap/vma_merge: explicitly assign res, vma, extend invariants · b0729ae0
      Lorenzo Stoakes authored
      
      
      Previously, vma was an uninitialised variable which was only definitely
      assigned as a result of the logic covering all possible input cases - for
      it to have remained uninitialised, prev would have to be NULL, and next
      would _have_ to be mergeable.
      
      The value of res defaults to NULL, so we can neatly eliminate the
      assignment to res and vma in the if (prev) block and ensure that both res
      and vma are both explicitly assigned, by just setting both to prev.
      
      In addition we add an explanation as to under what circumstances both
      might change, and since we absolutely do rely on addr == curr->vm_start
      should curr exist, assert that this is the case.
      
      Link: https://lkml.kernel.org/r/83938bed24422cbe5954bbf491341674becfe567.1679516210.git.lstoakes@gmail.com
      Signed-off-by: default avatarLorenzo Stoakes <lstoakes@gmail.com>
      Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Reviewed-by: default avatarLiam R. Howlett <Liam.Howlett@oracle.com>
      Cc: David Hildenbrand <david@redhat.com>
      Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
      Cc: Vernon Yang <vernon2gm@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      b0729ae0
    • Lorenzo Stoakes's avatar
      mm/mmap/vma_merge: fold curr, next assignment logic · 00cd00a6
      Lorenzo Stoakes authored
      
      
      Use find_vma_intersection() and vma_lookup() to both simplify the logic
      and to fold the end == next->vm_start condition into one block.
      
      This groups all of the simple range checks together and establishes the
      invariant that, if prev, curr or next are non-NULL then their positions
      are as expected.
      
      This has no functional impact.
      
      Link: https://lkml.kernel.org/r/c6d960641b4ba58fa6ad3d07bf68c27d847963c8.1679516210.git.lstoakes@gmail.com
      Signed-off-by: default avatarLorenzo Stoakes <lstoakes@gmail.com>
      Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Reviewed-by: default avatarLiam R. Howlett <Liam.Howlett@oracle.com>
      Cc: David Hildenbrand <david@redhat.com>
      Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
      Cc: Vernon Yang <vernon2gm@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      00cd00a6
    • Lorenzo Stoakes's avatar
      mm/mmap/vma_merge: further improve prev/next VMA naming · fcfccd91
      Lorenzo Stoakes authored
      
      
      Patch series "further cleanup of vma_merge()", v2.
      
      Following on from Vlastimil Babka's patch series "cleanup vma_merge() and
      improve mergeability tests" which was in turn based on Liam's prior
      cleanups, this patch series introduces changes discussed in review of
      Vlastimil's series and goes further in attempting to make the logic as
      clear as possible.
      
      Nearly all of this should have absolutely no functional impact, however it
      does add a singular VM_WARN_ON() case.
      
      With many thanks to Vernon for helping kick start the discussion around
      simplification - abstract use of vma did indeed turn out not to be
      necessary - and to Liam for his excellent suggestions which greatly
      simplified things.
      
      
      This patch (of 4):
      
      Previously the ASCII diagram above vma_merge() and the accompanying
      variable naming was rather confusing, however recent efforts by Liam
      Howlett and Vlastimil Babka have significantly improved matters.
      
      This patch goes a little further - replacing 'X' with 'N' which feels a
      lot more natural and replacing what was 'N' with 'C' which stands for
      'concurrent' VMA.
      
      No word quite describes a VMA that has coincident start as the input span,
      concurrent, abbreviated to 'curr' (and which can be thought of also as
      'current') however fits intuitions well alongside prev and next.
      
      This has no functional impact.
      
      Link: https://lkml.kernel.org/r/cover.1679431180.git.lstoakes@gmail.com
      Link: https://lkml.kernel.org/r/6001e08fa7e119470cbb1d2b6275ad8d742ff9a7.1679431180.git.lstoakes@gmail.com
      Signed-off-by: default avatarLorenzo Stoakes <lstoakes@gmail.com>
      Cc: David Hildenbrand <david@redhat.com>
      Cc: Liam Howlett <liam.howlett@oracle.com>
      Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
      Cc: Vernon Yang <vernon2gm@gmail.com>
      Cc: Vlastimil Babka <vbabka@suse.cz>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      fcfccd91
    • Lorenzo Stoakes's avatar
      mm: vmalloc: convert vread() to vread_iter() · 4c91c07c
      Lorenzo Stoakes authored
      
      
      Having previously laid the foundation for converting vread() to an
      iterator function, pull the trigger and do so.
      
      This patch attempts to provide minimal refactoring and to reflect the
      existing logic as best we can, for example we continue to zero portions of
      memory not read, as before.
      
      Overall, there should be no functional difference other than a performance
      improvement in /proc/kcore access to vmalloc regions.
      
      Now we have eliminated the need for a bounce buffer in read_kcore_iter(),
      we dispense with it, and try to write to user memory optimistically but
      with faults disabled via copy_page_to_iter_nofault().  We already have
      preemption disabled by holding a spin lock.  We continue faulting in until
      the operation is complete.
      
      Additionally, we must account for the fact that at any point a copy may
      fail (most likely due to a fault not being able to occur), we exit
      indicating fewer bytes retrieved than expected.
      
      [sfr@canb.auug.org.au: fix sparc64 warning]
        Link: https://lkml.kernel.org/r/20230320144721.663280c3@canb.auug.org.au
      [lstoakes@gmail.com: redo Stephen's sparc build fix]
        Link: https://lkml.kernel.org/r/8506cbc667c39205e65a323f750ff9c11a463798.1679566220.git.lstoakes@gmail.com
      [akpm@linux-foundation.org: unbreak uio.h includes]
      Link: https://lkml.kernel.org/r/941f88bc5ab928e6656e1e2593b91bf0f8c81e1b.1679511146.git.lstoakes@gmail.com
      Signed-off-by: default avatarLorenzo Stoakes <lstoakes@gmail.com>
      Signed-off-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
      Reviewed-by: default avatarBaoquan He <bhe@redhat.com>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Cc: David Hildenbrand <david@redhat.com>
      Cc: Jens Axboe <axboe@kernel.dk>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Liu Shixin <liushixin2@huawei.com>
      Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
      Cc: Uladzislau Rezki (Sony) <urezki@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      4c91c07c
    • Lorenzo Stoakes's avatar
      iov_iter: add copy_page_to_iter_nofault() · 4f80818b
      Lorenzo Stoakes authored
      
      
      Provide a means to copy a page to user space from an iterator, aborting if
      a page fault would occur.  This supports compound pages, but may be passed
      a tail page with an offset extending further into the compound page, so we
      cannot pass a folio.
      
      This allows for this function to be called from atomic context and _try_
      to user pages if they are faulted in, aborting if not.
      
      The function does not use _copy_to_iter() in order to not specify
      might_fault(), this is similar to copy_page_from_iter_atomic().
      
      This is being added in order that an iteratable form of vread() can be
      implemented while holding spinlocks.
      
      Link: https://lkml.kernel.org/r/19734729defb0f498a76bdec1bef3ac48a3af3e8.1679511146.git.lstoakes@gmail.com
      Signed-off-by: default avatarLorenzo Stoakes <lstoakes@gmail.com>
      Reviewed-by: default avatarBaoquan He <bhe@redhat.com>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Cc: David Hildenbrand <david@redhat.com>
      Cc: Jens Axboe <axboe@kernel.dk>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Liu Shixin <liushixin2@huawei.com>
      Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
      Cc: Uladzislau Rezki (Sony) <urezki@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      4f80818b
    • Lorenzo Stoakes's avatar
      fs/proc/kcore: convert read_kcore() to read_kcore_iter() · 46c0d6d0
      Lorenzo Stoakes authored
      
      
      For the time being we still use a bounce buffer for vread(), however in
      the next patch we will convert this to interact directly with the iterator
      and eliminate the bounce buffer altogether.
      
      Link: https://lkml.kernel.org/r/ebe12c8d70eebd71f487d80095605f3ad0d1489c.1679511146.git.lstoakes@gmail.com
      Signed-off-by: default avatarLorenzo Stoakes <lstoakes@gmail.com>
      Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
      Reviewed-by: default avatarBaoquan He <bhe@redhat.com>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Cc: Jens Axboe <axboe@kernel.dk>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Liu Shixin <liushixin2@huawei.com>
      Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
      Cc: Uladzislau Rezki (Sony) <urezki@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      46c0d6d0
    • Lorenzo Stoakes's avatar
      fs/proc/kcore: avoid bounce buffer for ktext data · 2e1c0170
      Lorenzo Stoakes authored
      Patch series "convert read_kcore(), vread() to use iterators", v8.
      
      While reviewing Baoquan's recent changes to permit vread() access to
      vm_map_ram regions of vmalloc allocations, Willy pointed out [1] that it
      would be nice to refactor vread() as a whole, since its only user is
      read_kcore() and the existing form of vread() necessitates the use of a
      bounce buffer.
      
      This patch series does exactly that, as well as adjusting how we read the
      kernel text section to avoid the use of a bounce buffer in this case as
      well.
      
      This has been tested against the test case which motivated Baoquan's
      changes in the first place [2] which continues to function correctly, as
      do the vmalloc self tests.
      
      
      This patch (of 4):
      
      Commit df04abfd
      
       ("fs/proc/kcore.c: Add bounce buffer for ktext data")
      introduced the use of a bounce buffer to retrieve kernel text data for
      /proc/kcore in order to avoid failures arising from hardened user copies
      enabled by CONFIG_HARDENED_USERCOPY in check_kernel_text_object().
      
      We can avoid doing this if instead of copy_to_user() we use
      _copy_to_user() which bypasses the hardening check.  This is more
      efficient than using a bounce buffer and simplifies the code.
      
      We do so as part an overall effort to eliminate bounce buffer usage in the
      function with an eye to converting it an iterator read.
      
      Link: https://lkml.kernel.org/r/cover.1679566220.git.lstoakes@gmail.com
      Link: https://lore.kernel.org/all/Y8WfDSRkc%2FOHP3oD@casper.infradead.org/ [1]
      Link: https://lore.kernel.org/all/87ilk6gos2.fsf@oracle.com/T/#u [2]
      Link: https://lkml.kernel.org/r/fd39b0bfa7edc76d360def7d034baaee71d90158.1679511146.git.lstoakes@gmail.com
      Signed-off-by: default avatarLorenzo Stoakes <lstoakes@gmail.com>
      Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
      Reviewed-by: default avatarBaoquan He <bhe@redhat.com>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Cc: Jens Axboe <axboe@kernel.dk>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Liu Shixin <liushixin2@huawei.com>
      Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
      Cc: Uladzislau Rezki (Sony) <urezki@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      2e1c0170
    • Kirill A. Shutemov's avatar
      mm/page_alloc: make deferred page init free pages in MAX_ORDER blocks · 3f6dac0f
      Kirill A. Shutemov authored
      
      
      Normal page init path frees pages during the boot in MAX_ORDER chunks, but
      deferred page init path does it in pageblock blocks.
      
      Change deferred page init path to work in MAX_ORDER blocks.
      
      For cases when MAX_ORDER is larger than pageblock, set migrate type to
      MIGRATE_MOVABLE for all pageblocks covered by the page.
      
      Link: https://lkml.kernel.org/r/20230321002415.20843-1-kirill.shutemov@linux.intel.com
      Signed-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
      Acked-by: default avatarMel Gorman <mgorman@suse.de>
      Acked-by: default avatarMike Rapoport (IBM) <rppt@kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      3f6dac0f
    • Lorenzo Stoakes's avatar
      drm/ttm: remove comment referencing now-removed vmf_insert_mixed_prot() · 4a06f6f3
      Lorenzo Stoakes authored
      
      
      This function no longer exists, however the prot != vma->vm_page_prot case
      discussion has been retained and moved to vmf_insert_pfn_prot() so refer
      to this instead.
      
      Link: https://lkml.kernel.org/r/db403b3622b94a87bd93528cc1d6b44ae88adcdd.1678661628.git.lstoakes@gmail.com
      Signed-off-by: default avatarLorenzo Stoakes <lstoakes@gmail.com>
      Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: Jason Gunthorpe <jgg@ziepe.ca>
      Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
      Cc: Michal Hocko <mhocko@suse.com>
      Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
      Cc: Aaron Tomlin <atomlin@atomlin.com>
      Cc: Christoph Lameter <cl@linux.com>
      Cc: Frederic Weisbecker <frederic@kernel.org>
      Cc: Heiko Carstens <hca@linux.ibm.com>
      Cc: Huacai Chen <chenhuacai@kernel.org>
      Cc: Marcelo Tosatti <mtosatti@redhat.com>
      Cc: Peter Xu <peterx@redhat.com>
      Cc: "Russell King (Oracle)" <linux@armlinux.org.uk>
      Cc: Vlastimil Babka <vbabka@suse.cz>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      4a06f6f3
    • Lorenzo Stoakes's avatar
      mm: remove vmf_insert_pfn_xxx_prot() for huge page-table entries · 7b806d22
      Lorenzo Stoakes authored
      This functionality's sole user, the drm ttm module, removed support for it
      in commit 0d979509
      
       ("drm/ttm: remove ttm_bo_vm_insert_huge()") as the
      whole approach is currently unworkable without a PMD/PUD special bit and
      updates to GUP.
      
      Link: https://lkml.kernel.org/r/604c2ad79659d4b8a6e3e1611c6219d5d3233988.1678661628.git.lstoakes@gmail.com
      Signed-off-by: default avatarLorenzo Stoakes <lstoakes@gmail.com>
      Cc: Christian König <christian.koenig@amd.com>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: Jason Gunthorpe <jgg@ziepe.ca>
      Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
      Cc: Michal Hocko <mhocko@suse.com>
      Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
      Cc: Aaron Tomlin <atomlin@atomlin.com>
      Cc: Christoph Lameter <cl@linux.com>
      Cc: Frederic Weisbecker <frederic@kernel.org>
      Cc: Heiko Carstens <hca@linux.ibm.com>
      Cc: Huacai Chen <chenhuacai@kernel.org>
      Cc: Marcelo Tosatti <mtosatti@redhat.com>
      Cc: Peter Xu <peterx@redhat.com>
      Cc: "Russell King (Oracle)" <linux@armlinux.org.uk>
      Cc: Vlastimil Babka <vbabka@suse.cz>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      7b806d22
    • Lorenzo Stoakes's avatar
      mm: remove unused vmf_insert_mixed_prot() · 28d8b812
      Lorenzo Stoakes authored
      Patch series "Remove drm/ttm-specific mm changes".
      
      Functionality was added specifically for the DRM TTM driver to support
      mapping memory for VM_MIXEDMAP VMAs with customised protection flags,
      however this has now been rolled back as issues were found with this
      approach.
      
      This series removes the mm changes too, retaining some of the useful
      comments.
      
      
      This patch (of 3):
      
      The sole user of vmf_insert_mixed_prot(), the drm ttm module, stopped
      using this in commit f91142c6
      
       ("drm/ttm: nuke VM_MIXEDMAP on BO
      mappings v3") citing use of VM_MIXEDMAP in this case being terribly
      broken.
      
      Remove this now-dead code and references to it, but retain the useful
      description of the prot != vma->vm_page_prot case, moving it to
      vmf_insert_pfn_prot() instead.
      
      Link: https://lkml.kernel.org/r/cover.1678661628.git.lstoakes@gmail.com
      Link: https://lkml.kernel.org/r/a069644388e6f1593a7020d15840e6fc9f39bcaf.1678661628.git.lstoakes@gmail.com
      Signed-off-by: default avatarLorenzo Stoakes <lstoakes@gmail.com>
      Cc: Christian König <christian.koenig@amd.com>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: Jason Gunthorpe <jgg@ziepe.ca>
      Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
      Cc: Michal Hocko <mhocko@suse.com>
      Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
      Cc: Aaron Tomlin <atomlin@atomlin.com>
      Cc: Christoph Lameter <cl@linux.com>
      Cc: Frederic Weisbecker <frederic@kernel.org>
      Cc: Heiko Carstens <hca@linux.ibm.com>
      Cc: Huacai Chen <chenhuacai@kernel.org>
      Cc: Marcelo Tosatti <mtosatti@redhat.com>
      Cc: Peter Xu <peterx@redhat.com>
      Cc: "Russell King (Oracle)" <linux@armlinux.org.uk>
      Cc: Vlastimil Babka <vbabka@suse.cz>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      28d8b812
    • Tomas Mudrunka's avatar
      mm/memtest: add results of early memtest to /proc/meminfo · bd23024b
      Tomas Mudrunka authored
      
      
      Currently the memtest results were only presented in dmesg.
      
      When running a large fleet of devices without ECC RAM it's currently not
      easy to do bulk monitoring for memory corruption.  You have to parse
      dmesg, but that's a ring buffer so the error might disappear after some
      time.  In general I do not consider dmesg to be a great API to query RAM
      status.
      
      In several companies I've seen such errors remain undetected and cause
      issues for way too long.  So I think it makes sense to provide a
      monitoring API, so that we can safely detect and act upon them.
      
      This adds /proc/meminfo entry which can be easily used by scripts.
      
      Link: https://lkml.kernel.org/r/20230321103430.7130-1-tomas.mudrunka@gmail.com
      Signed-off-by: default avatarTomas Mudrunka <tomas.mudrunka@gmail.com>
      Cc: Jonathan Corbet <corbet@lwn.net>
      Cc: Mike Rapoport (IBM) <rppt@kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      bd23024b
    • Mike Rapoport (IBM)'s avatar
      MAINTAINERS: extend memblock entry to include MM initialization · c9bb5273
      Mike Rapoport (IBM) authored
      
      
      and add mm/mm_init.c to memblock entry in MAINTAINERS
      
      Link: https://lkml.kernel.org/r/20230321170513.2401534-15-rppt@kernel.org
      Signed-off-by: default avatarMike Rapoport (IBM) <rppt@kernel.org>
      Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
      Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: Doug Berger <opendmb@gmail.com>
      Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
      Cc: Mel Gorman <mgorman@suse.de>
      Cc: Michal Hocko <mhocko@kernel.org>
      Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      c9bb5273
    • Mike Rapoport (IBM)'s avatar
      mm: move vmalloc_init() declaration to mm/internal.h · b6714911
      Mike Rapoport (IBM) authored
      
      
      vmalloc_init() is called only from mm_core_init(), there is no need to
      declare it in include/linux/vmalloc.h
      
      Move vmalloc_init() declaration to mm/internal.h
      
      Link: https://lkml.kernel.org/r/20230321170513.2401534-14-rppt@kernel.org
      Signed-off-by: default avatarMike Rapoport (IBM) <rppt@kernel.org>
      Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
      Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: Doug Berger <opendmb@gmail.com>
      Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
      Cc: Mel Gorman <mgorman@suse.de>
      Cc: Michal Hocko <mhocko@kernel.org>
      Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      b6714911
    • Mike Rapoport (IBM)'s avatar
      mm: move kmem_cache_init() declaration to mm/slab.h · d5d2c02a
      Mike Rapoport (IBM) authored
      
      
      kmem_cache_init() is called only from mm_core_init(), there is no need to
      declare it in include/linux/slab.h
      
      Move kmem_cache_init() declaration to mm/slab.h
      
      Link: https://lkml.kernel.org/r/20230321170513.2401534-13-rppt@kernel.org
      Signed-off-by: default avatarMike Rapoport (IBM) <rppt@kernel.org>
      Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
      Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: Doug Berger <opendmb@gmail.com>
      Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
      Cc: Mel Gorman <mgorman@suse.de>
      Cc: Michal Hocko <mhocko@kernel.org>
      Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      d5d2c02a
    • Mike Rapoport (IBM)'s avatar
      mm: move mem_init_print_info() to mm_init.c · eb8589b4
      Mike Rapoport (IBM) authored
      
      
      mem_init_print_info() is only called from mm_core_init().
      
      Move it close to the caller and make it static.
      
      Link: https://lkml.kernel.org/r/20230321170513.2401534-12-rppt@kernel.org
      Signed-off-by: default avatarMike Rapoport (IBM) <rppt@kernel.org>
      Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
      Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: Doug Berger <opendmb@gmail.com>
      Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
      Cc: Mel Gorman <mgorman@suse.de>
      Cc: Michal Hocko <mhocko@kernel.org>
      Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      eb8589b4
    • Mike Rapoport (IBM)'s avatar
      init,mm: fold late call to page_ext_init() to page_alloc_init_late() · de57807e
      Mike Rapoport (IBM) authored
      
      
      When deferred initialization of struct pages is enabled, page_ext_init()
      must be called after all the deferred initialization is done, but there is
      no point to keep it a separate call from kernel_init_freeable() right
      after page_alloc_init_late().
      
      Fold the call to page_ext_init() into page_alloc_init_late() and localize
      deferred_struct_pages variable.
      
      Link: https://lkml.kernel.org/r/20230321170513.2401534-11-rppt@kernel.org
      Signed-off-by: default avatarMike Rapoport (IBM) <rppt@kernel.org>
      Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
      Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: Doug Berger <opendmb@gmail.com>
      Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
      Cc: Mel Gorman <mgorman@suse.de>
      Cc: Michal Hocko <mhocko@kernel.org>
      Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      de57807e
    • Mike Rapoport (IBM)'s avatar
      mm: move init_mem_debugging_and_hardening() to mm/mm_init.c · f2fc4b44
      Mike Rapoport (IBM) authored
      
      
      init_mem_debugging_and_hardening() is only called from mm_core_init().
      
      Move it close to the caller, make it static and rename it to
      mem_debugging_and_hardening_init() for consistency with surrounding
      convention.
      
      Link: https://lkml.kernel.org/r/20230321170513.2401534-10-rppt@kernel.org
      Signed-off-by: default avatarMike Rapoport (IBM) <rppt@kernel.org>
      Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
      Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: Doug Berger <opendmb@gmail.com>
      Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
      Cc: Mel Gorman <mgorman@suse.de>
      Cc: Michal Hocko <mhocko@kernel.org>
      Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      f2fc4b44