From: Michel Lespinasse <walken@google.com>
To: Andrew Morton <akpm@linux-foundation.org>, linux-mm <linux-mm@kvack.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Laurent Dufour <ldufour@linux.ibm.com>,
Vlastimil Babka <vbabka@suse.cz>,
Matthew Wilcox <willy@infradead.org>,
Liam Howlett <Liam.Howlett@oracle.com>,
Jerome Glisse <jglisse@redhat.com>,
Davidlohr Bueso <dave@stgolabs.net>,
David Rientjes <rientjes@google.com>,
Hugh Dickins <hughd@google.com>, Ying Han <yinghan@google.com>,
Michel Lespinasse <walken@google.com>
Subject: [PATCH 0/8] Add a new mmap locking API wrapping mmap_sem calls
Date: Thu, 26 Mar 2020 00:02:28 -0700 [thread overview]
Message-ID: <20200326070236.235835-1-walken@google.com> (raw)
This patch series adds a new mmap locking API replacing the existing
mmap_sem lock and unlocks. Initially the API is just implemente in terms
of inlined rwsem calls, so it doesn't provide any new functionality.
There are two justifications for the new API:
- At first, it provides an easy hooking point to instrument mmap_sem
locking latencies independently of any other rwsems.
- In the future, it may be a starting point for replacing the rwsem
implementation with a different one, such as range locks. This is
something that is being explored, even though there is no wide concensus
about this possible direction yet.
(see https://patchwork.kernel.org/cover/11401483/)
The changes apply on top of v5.6-rc7.
I think it would be feasible to apply them in the next merge cycle if
given sufficient approval. The coccinelle part of the change is
relatively invasive, but can be skipped over on a file by file basis
if it causes any conflicts with other pending changes. The new mmap
locking API can interoperate with new code that is still using direct
rwsem calls, until the last patch in the series which renames mmap_sem
to enforce using the new API. Maybe that last patch could be delayed for
a bit, so that we'd get a chance to convert any new code that locks
mmap_sem in the -rc1 release before applying that last patch.
Michel Lespinasse (8):
mmap locking API: initial implementation as rwsem wrappers
MMU notifier: use the new mmap locking API
mmap locking API: use coccinelle to convert mmap_sem rwsem call sites
mmap locking API: convert mmap_sem call sites missed by coccinelle
mmap locking API: convert nested write lock sites
mmap locking API: add mmap_read_release() and mmap_read_unlock_non_owner()
mmap locking API: add MMAP_LOCK_INITIALIZER
mmap locking API: rename mmap_sem to mmap_lock
arch/alpha/kernel/traps.c | 4 +-
arch/alpha/mm/fault.c | 10 +--
arch/arc/kernel/process.c | 4 +-
arch/arc/kernel/troubleshoot.c | 4 +-
arch/arc/mm/fault.c | 4 +-
arch/arm/kernel/process.c | 4 +-
arch/arm/kernel/swp_emulate.c | 4 +-
arch/arm/lib/uaccess_with_memcpy.c | 16 ++--
arch/arm/mm/fault.c | 6 +-
arch/arm64/kernel/traps.c | 4 +-
arch/arm64/kernel/vdso.c | 8 +-
arch/arm64/mm/fault.c | 8 +-
arch/csky/kernel/vdso.c | 4 +-
arch/csky/mm/fault.c | 8 +-
arch/hexagon/kernel/vdso.c | 4 +-
arch/hexagon/mm/vm_fault.c | 8 +-
arch/ia64/kernel/perfmon.c | 8 +-
arch/ia64/mm/fault.c | 12 +--
arch/ia64/mm/init.c | 12 +--
arch/m68k/kernel/sys_m68k.c | 14 ++--
arch/m68k/mm/fault.c | 8 +-
arch/microblaze/mm/fault.c | 12 +--
arch/mips/kernel/traps.c | 4 +-
arch/mips/kernel/vdso.c | 4 +-
arch/mips/mm/fault.c | 10 +--
arch/nds32/kernel/vdso.c | 6 +-
arch/nds32/mm/fault.c | 12 +--
arch/nios2/mm/fault.c | 12 +--
arch/nios2/mm/init.c | 4 +-
arch/openrisc/mm/fault.c | 10 +--
arch/parisc/kernel/traps.c | 6 +-
arch/parisc/mm/fault.c | 8 +-
arch/powerpc/kernel/vdso.c | 6 +-
arch/powerpc/kvm/book3s_64_mmu_hv.c | 4 +-
arch/powerpc/kvm/book3s_hv.c | 6 +-
arch/powerpc/kvm/book3s_hv_uvmem.c | 12 +--
arch/powerpc/kvm/e500_mmu_host.c | 4 +-
arch/powerpc/mm/book3s64/iommu_api.c | 4 +-
arch/powerpc/mm/book3s64/subpage_prot.c | 12 +--
arch/powerpc/mm/copro_fault.c | 4 +-
arch/powerpc/mm/fault.c | 12 +--
arch/powerpc/oprofile/cell/spu_task_sync.c | 6 +-
arch/powerpc/platforms/cell/spufs/file.c | 4 +-
arch/riscv/kernel/vdso.c | 4 +-
arch/riscv/mm/fault.c | 10 +--
arch/s390/kernel/vdso.c | 4 +-
arch/s390/kvm/gaccess.c | 4 +-
arch/s390/kvm/kvm-s390.c | 24 +++---
arch/s390/kvm/priv.c | 32 ++++----
arch/s390/mm/fault.c | 6 +-
arch/s390/mm/gmap.c | 40 ++++-----
arch/s390/pci/pci_mmio.c | 4 +-
arch/sh/kernel/sys_sh.c | 6 +-
arch/sh/kernel/vsyscall/vsyscall.c | 4 +-
arch/sh/mm/fault.c | 14 ++--
arch/sparc/mm/fault_32.c | 18 ++--
arch/sparc/mm/fault_64.c | 12 +--
arch/sparc/vdso/vma.c | 4 +-
arch/um/include/asm/mmu_context.h | 5 +-
arch/um/kernel/tlb.c | 2 +-
arch/um/kernel/trap.c | 6 +-
arch/unicore32/mm/fault.c | 6 +-
arch/x86/entry/vdso/vma.c | 14 ++--
arch/x86/events/core.c | 4 +-
arch/x86/kernel/tboot.c | 2 +-
arch/x86/kernel/vm86_32.c | 4 +-
arch/x86/kvm/mmu/paging_tmpl.h | 8 +-
arch/x86/mm/fault.c | 10 +--
arch/x86/um/vdso/vma.c | 4 +-
arch/xtensa/mm/fault.c | 10 +--
drivers/android/binder_alloc.c | 10 +--
drivers/dma-buf/dma-resv.c | 4 +-
drivers/firmware/efi/efi.c | 2 +-
.../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 4 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 10 +--
drivers/gpu/drm/amd/amdkfd/kfd_events.c | 4 +-
drivers/gpu/drm/etnaviv/etnaviv_gem.c | 2 +-
drivers/gpu/drm/i915/gem/i915_gem_mman.c | 4 +-
drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 8 +-
drivers/gpu/drm/nouveau/nouveau_svm.c | 20 ++---
drivers/gpu/drm/radeon/radeon_cs.c | 4 +-
drivers/gpu/drm/radeon/radeon_gem.c | 6 +-
drivers/gpu/drm/ttm/ttm_bo_vm.c | 4 +-
drivers/infiniband/core/umem_odp.c | 4 +-
drivers/infiniband/core/uverbs_main.c | 4 +-
drivers/infiniband/hw/mlx4/mr.c | 4 +-
drivers/infiniband/hw/qib/qib_user_pages.c | 6 +-
drivers/infiniband/hw/usnic/usnic_uiom.c | 4 +-
drivers/infiniband/sw/siw/siw_mem.c | 4 +-
drivers/iommu/amd_iommu_v2.c | 4 +-
drivers/iommu/intel-svm.c | 4 +-
drivers/media/v4l2-core/videobuf-core.c | 4 +-
drivers/media/v4l2-core/videobuf-dma-contig.c | 4 +-
drivers/media/v4l2-core/videobuf-dma-sg.c | 4 +-
drivers/misc/cxl/cxllib.c | 4 +-
drivers/misc/cxl/fault.c | 4 +-
drivers/misc/sgi-gru/grufault.c | 16 ++--
drivers/misc/sgi-gru/grufile.c | 4 +-
drivers/oprofile/buffer_sync.c | 10 +--
drivers/staging/kpc2000/kpc_dma/fileops.c | 4 +-
drivers/tee/optee/call.c | 4 +-
drivers/vfio/vfio_iommu_type1.c | 8 +-
drivers/xen/gntdev.c | 4 +-
drivers/xen/privcmd.c | 14 ++--
fs/aio.c | 4 +-
fs/coredump.c | 4 +-
fs/exec.c | 16 ++--
fs/io_uring.c | 4 +-
fs/proc/base.c | 18 ++--
fs/proc/task_mmu.c | 28 +++----
fs/proc/task_nommu.c | 18 ++--
fs/userfaultfd.c | 28 +++----
include/linux/mm.h | 1 +
include/linux/mm_types.h | 2 +-
include/linux/mmap_lock.h | 82 +++++++++++++++++++
include/linux/mmu_notifier.h | 5 +-
ipc/shm.c | 8 +-
kernel/acct.c | 4 +-
kernel/bpf/stackmap.c | 13 ++-
kernel/events/core.c | 4 +-
kernel/events/uprobes.c | 16 ++--
kernel/exit.c | 8 +-
kernel/fork.c | 14 ++--
kernel/futex.c | 4 +-
kernel/sched/fair.c | 4 +-
kernel/sys.c | 18 ++--
kernel/trace/trace_output.c | 4 +-
mm/filemap.c | 6 +-
mm/frame_vector.c | 4 +-
mm/gup.c | 20 ++---
mm/hmm.c | 2 +-
mm/init-mm.c | 2 +-
mm/internal.h | 2 +-
mm/khugepaged.c | 36 ++++----
mm/ksm.c | 34 ++++----
mm/madvise.c | 18 ++--
mm/memcontrol.c | 8 +-
mm/memory.c | 14 ++--
mm/mempolicy.c | 22 ++---
mm/migrate.c | 8 +-
mm/mincore.c | 4 +-
mm/mlock.c | 16 ++--
mm/mmap.c | 36 ++++----
mm/mmu_notifier.c | 22 ++---
mm/mprotect.c | 12 +--
mm/mremap.c | 6 +-
mm/msync.c | 8 +-
mm/nommu.c | 16 ++--
mm/oom_kill.c | 4 +-
mm/pagewalk.c | 15 ++--
mm/process_vm_access.c | 4 +-
mm/ptdump.c | 4 +-
mm/swapfile.c | 4 +-
mm/userfaultfd.c | 14 ++--
mm/util.c | 12 +--
net/ipv4/tcp.c | 4 +-
net/xdp/xdp_umem.c | 4 +-
virt/kvm/arm/mmu.c | 14 ++--
virt/kvm/async_pf.c | 4 +-
virt/kvm/kvm_main.c | 8 +-
160 files changed, 778 insertions(+), 693 deletions(-)
create mode 100644 include/linux/mmap_lock.h
--
2.25.1.696.g5e7596f4ac-goog
next reply other threads:[~2020-03-26 7:02 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-26 7:02 Michel Lespinasse [this message]
2020-03-26 7:02 ` [PATCH 1/8] mmap locking API: initial implementation as rwsem wrappers Michel Lespinasse
2020-03-26 17:56 ` Jason Gunthorpe
2020-03-26 18:06 ` Matthew Wilcox
2020-03-26 18:09 ` Matthew Wilcox
2020-03-26 22:09 ` Michel Lespinasse
2020-03-26 7:02 ` [PATCH 2/8] MMU notifier: use the new mmap locking API Michel Lespinasse
2020-03-26 7:02 ` [PATCH 3/8] mmap locking API: use coccinelle to convert mmap_sem rwsem call sites Michel Lespinasse
2020-03-27 0:01 ` kbuild test robot
2020-03-27 0:40 ` kbuild test robot
2020-03-26 7:02 ` [PATCH 4/8] mmap locking API: convert mmap_sem call sites missed by coccinelle Michel Lespinasse
2020-03-26 23:13 ` kbuild test robot
2020-03-26 23:27 ` kbuild test robot
2020-03-26 7:02 ` [PATCH 5/8] mmap locking API: convert nested write lock sites Michel Lespinasse
2020-03-26 12:09 ` Matthew Wilcox
2020-03-26 12:56 ` Michel Lespinasse
2020-03-26 7:02 ` [PATCH 6/8] mmap locking API: add mmap_read_release() and mmap_read_unlock_non_owner() Michel Lespinasse
2020-03-26 7:02 ` [PATCH 7/8] mmap locking API: add MMAP_LOCK_INITIALIZER Michel Lespinasse
2020-04-06 9:46 ` Laurent Dufour
2020-04-06 13:04 ` Michel Lespinasse
2020-03-26 7:02 ` [PATCH 8/8] mmap locking API: rename mmap_sem to mmap_lock Michel Lespinasse
2020-04-06 12:45 ` Laurent Dufour
2020-04-06 13:17 ` Michel Lespinasse
2020-04-06 16:03 ` Davidlohr Bueso
2020-03-26 7:13 ` [PATCH 0/8] Add a new mmap locking API wrapping mmap_sem calls Michel Lespinasse
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200326070236.235835-1-walken@google.com \
--to=walken@google.com \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=dave@stgolabs.net \
--cc=hughd@google.com \
--cc=jglisse@redhat.com \
--cc=ldufour@linux.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=peterz@infradead.org \
--cc=rientjes@google.com \
--cc=vbabka@suse.cz \
--cc=willy@infradead.org \
--cc=yinghan@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox