Re: [PATCH 00/43] VMA type safety through VMA iterator

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



* Liam Howlett <liam.howlett@xxxxxxxxxx> [221129 11:44]:
> From: "Liam R. Howlett" <Liam.Howlett@xxxxxxxxxx>
> 
> Andrew,
> 
> These patches are for 6.2.

Slight correction, that should be for 6.3

> 
> This patch set expands the VMA iterator API to provide type safety to
> the VMA operations using the maple tree, as requested by Linus for 6.2

This version should also be 6.3, Linus didn't specify a version.

> [1]
> 
> It also addresses another issue of usability brought up by Linus about
> needing to modify the maple state within the loops.  The maple state is
> has been replaced by the VMA iterator and the iterator is now modified
> within the MM code so the caller should not need to worry about doing
> the work themselves when tree modifications occur.
> 
> This brought up a potential inconsistency of the iterator state and what
> the user expects, so the inconsistency is addressed to keep the vma
> iterator safe for use after the looping over a VMA range.  This is
> addressed in patch 3 and 4.
> 
> While cleaning up the state, the duplicate locking code introduced by
> the maple tree has been address by abstracting it to two functions:
> vma_prepare() and vma_complete().  These abstractions allowed for a much
> simpler __vma_adjust(), which eventually leads to the removal of the
> __vma_adjust() function by placing the logic into the vma_merge()
> function itself.
> 
> 
> 1. https://lore.kernel.org/linux-mm/CAHk-=wg9WQXBGkNdKD2bqocnN73rDswuWsavBB7T-tekykEn_A@xxxxxxxxxxxxxx/
> 
> Liam R. Howlett (43):
>   maple_tree: Add mas_init() function
>   maple_tree: Fix potential rcu issue
>   maple_tree: Reduce user error potential
>   test_maple_tree: Test modifications while iterating
>   mm: Expand vma iterator interface.
>   mm/mmap: convert brk to use vma iterator
>   kernel/fork: Convert forking to using the vmi iterator
>   mmap: Convert vma_link() vma iterator
>   mm/mmap: Remove preallocation from do_mas_align_munmap()
>   mmap: Change do_mas_munmap and do_mas_aligned_munmap() to use vma
>     iterator
>   mmap: Convert vma_expand() to use vma iterator
>   mm: Add temporary vma iterator versions of vma_merge(), split_vma(),
>     and __split_vma()
>   ipc/shm: Use the vma iterator for munmap calls
>   userfaultfd: Use vma iterator
>   mm: Change mprotect_fixup to vma iterator
>   mlock: Convert mlock to vma iterator
>   coredump: Convert to vma iterator
>   mempolicy: Convert to vma iterator
>   task_mmu: Convert to vma iterator
>   sched: Convert to vma iterator
>   madvise: Use vmi iterator for __split_vma() and vma_merge()
>   mmap: Pass through vmi iterator to __split_vma()
>   mmap: Use vmi version of vma_merge()
>   mm/mremap: Use vmi version of vma_merge()
>   mm: Switch vma_merge(), split_vma(), and __split_vma to vma iterator
>   mmap: Convert __vma_adjust() to use vma iterator
>   mm: Pass through vma iterator to __vma_adjust()
>   madvise: Use split_vma() instead of __split_vma()
>   mm: Remove unnecessary write to vma iterator in __vma_adjust()
>   mm: Pass vma iterator through to __vma_adjust()
>   mm: Add vma iterator to vma_adjust() arguments
>   mmap: Clean up mmap_region() unrolling
>   mm: Change munmap splitting order and move_vma()
>   mm/mmap: move anon_vma setting in __vma_adjust()
>   mm/mmap: Refactor locking out of __vma_adjust()
>   mm/mmap: Use vma_prepare() and vma_complete() in vma_expand()
>   mm/mmap: Introduce init_vma_prep() and init_multi_vma_prep()
>   mm: Don't use __vma_adjust() in __split_vma()
>   mm/mmap: Don't use __vma_adjust() in shift_arg_pages()
>   mm/mmap: Introduce dup_vma_anon() helper
>   mm/mmap: Convert do_brk_flags() to use vma_prepare() and
>     vma_complete()
>   mm/mmap: Remove __vma_adjust()
>   vma_merge: Set vma iterator to correct position.
> 
>  fs/coredump.c              |    8 +-
>  fs/exec.c                  |   16 +-
>  fs/proc/task_mmu.c         |   14 +-
>  fs/userfaultfd.c           |   88 ++-
>  include/linux/maple_tree.h |   11 +
>  include/linux/mm.h         |   87 ++-
>  include/linux/mm_types.h   |    4 +-
>  ipc/shm.c                  |   11 +-
>  kernel/events/uprobes.c    |    2 +-
>  kernel/fork.c              |   19 +-
>  kernel/sched/fair.c        |   14 +-
>  lib/maple_tree.c           |   12 +-
>  lib/test_maple_tree.c      |   72 +++
>  mm/filemap.c               |    2 +-
>  mm/internal.h              |   13 +
>  mm/madvise.c               |   13 +-
>  mm/mempolicy.c             |   25 +-
>  mm/mlock.c                 |   57 +-
>  mm/mmap.c                  | 1071 ++++++++++++++++++------------------
>  mm/mprotect.c              |   47 +-
>  mm/mremap.c                |   42 +-
>  mm/rmap.c                  |    4 +-
>  22 files changed, 862 insertions(+), 770 deletions(-)
> 
> -- 
> 2.35.1




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux