linux/arch/riscv/mm
Suren Baghdasaryan a55dd240a9 mm: enable page walking API to lock vmas during the walk
commit 49b0638502 upstream.

walk_page_range() and friends often operate under write-locked mmap_lock.
With introduction of vma locks, the vmas have to be locked as well during
such walks to prevent concurrent page faults in these areas.  Add an
additional member to mm_walk_ops to indicate locking requirements for the
walk.

The change ensures that page walks which prevent concurrent page faults
by write-locking mmap_lock, operate correctly after introduction of
per-vma locks.  With per-vma locks page faults can be handled under vma
lock without taking mmap_lock at all, so write locking mmap_lock would
not stop them.  The change ensures vmas are properly locked during such
walks.

A sample issue this solves is do_mbind() performing queue_pages_range()
to queue pages for migration.  Without this change a concurrent page
can be faulted into the area and be left out of migration.

Link: https://lkml.kernel.org/r/20230804152724.3090321-2-surenb@google.com
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Suggested-by: Linus Torvalds <torvalds@linuxfoundation.org>
Suggested-by: Jann Horn <jannh@google.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Davidlohr Bueso <dave@stgolabs.net>
Cc: Hugh Dickins <hughd@google.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Laurent Dufour <ldufour@linux.ibm.com>
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Michel Lespinasse <michel@lespinasse.org>
Cc: Peter Xu <peterx@redhat.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2023-08-30 14:52:36 +02:00
..
cacheflush.c RISC-V Patches for the 6.4 Merge Window, Part 1 2023-04-28 16:55:39 -07:00
context.c riscv: mm: Fix incorrect ASID argument when flushing TLB 2023-03-21 15:55:19 -07:00
dma-noncoherent.c RISC-V: Fix compilation without RISCV_ISA_ZICBOM 2022-10-21 11:52:39 +05:30
extable.c riscv: extable: fix err reg writing in dedicated uaccess handler 2022-02-08 17:02:47 -08:00
fault.c riscv/mm: Convert to using lock_mm_and_find_vma() 2023-07-01 13:12:39 +02:00
hugetlbpage.c riscv: Implement missing huge_ptep_get 2023-06-01 18:15:37 -07:00
init.c riscv: mm: fix 2 instances of -Wmissing-variable-declarations 2023-08-16 18:32:18 +02:00
kasan_init.c riscv: mm: fix 2 instances of -Wmissing-variable-declarations 2023-08-16 18:32:18 +02:00
Makefile riscv: Introduce CONFIG_RELOCATABLE 2023-04-19 07:46:30 -07:00
pageattr.c mm: enable page walking API to lock vmas during the walk 2023-08-30 14:52:36 +02:00
pgtable.c riscv: mm: Implement pmdp_collapse_flush for THP 2023-02-01 20:52:09 -08:00
physaddr.c riscv: Use PUD/P4D/PGD pages for the linear mapping 2023-04-18 20:43:04 -07:00
pmem.c RISC-V: Implement arch specific PMEM APIs 2022-12-08 15:43:59 -08:00
ptdump.c riscv: Fix ptdump when KASAN is enabled 2023-04-19 07:24:53 -07:00
tlbflush.c RISC-V: Use IPIs for remote TLB flush when possible 2023-04-08 11:26:24 +01:00