From: "Christian König" <ckoenig.leichtzumerken@gmail.com> To: Jason Gunthorpe <jgg@ziepe.ca>, Jerome Glisse <jglisse@redhat.com>, Ralph Campbell <rcampbell@nvidia.com>, John Hubbard <jhubbard@nvidia.com>, Felix.Kuehling@amd.com Cc: Andrea Arcangeli <aarcange@redhat.com>, linux-rdma@vger.kernel.org, amd-gfx@lists.freedesktop.org, linux-mm@kvack.org, Jason Gunthorpe <jgg@mellanox.com>, dri-devel@lists.freedesktop.org, Ben Skeggs <bskeggs@redhat.com> Subject: Re: [PATCH hmm 00/15] Consolidate the mmu notifier interval_tree and locking Date: Wed, 16 Oct 2019 10:58:02 +0200 [thread overview] Message-ID: <bc954d29-388b-9e29-f960-115ccc6b9fea@gmail.com> (raw) In-Reply-To: <20191015181242.8343-1-jgg@ziepe.ca> Am 15.10.19 um 20:12 schrieb Jason Gunthorpe: > From: Jason Gunthorpe <jgg@mellanox.com> > > 8 of the mmu_notifier using drivers (i915_gem, radeon_mn, umem_odp, hfi1, > scif_dma, vhost, gntdev, hmm) drivers are using a common pattern where > they only use invalidate_range_start/end and immediately check the > invalidating range against some driver data structure to tell if the > driver is interested. Half of them use an interval_tree, the others are > simple linear search lists. > > Of the ones I checked they largely seem to have various kinds of races, > bugs and poor implementation. This is a result of the complexity in how > the notifier interacts with get_user_pages(). It is extremely difficult to > use it correctly. > > Consolidate all of this code together into the core mmu_notifier and > provide a locking scheme similar to hmm_mirror that allows the user to > safely use get_user_pages() and reliably know if the page list still > matches the mm. That sounds really good, but could you outline for a moment how that is archived? Please keep in mind that the page reference get_user_pages() grabs is *NOT* sufficient to guarantee coherency here. Regards, Christian. > > This new arrangment plays nicely with the !blockable mode for > OOM. Scanning the interval tree is done such that the intersection test > will always succeed, and since there is no invalidate_range_end exposed to > drivers the scheme safely allows multiple drivers to be subscribed. > > Four places are converted as an example of how the new API is used. > Four are left for future patches: > - i915_gem has complex locking around destruction of a registration, > needs more study > - hfi1 (2nd user) needs access to the rbtree > - scif_dma has a complicated logic flow > - vhost's mmu notifiers are already being rewritten > > This is still being tested, but I figured to send it to start getting help > from the xen, amd and hfi drivers which I cannot test here. > > It would be intended for the hmm tree. > > Jason Gunthorpe (15): > mm/mmu_notifier: define the header pre-processor parts even if > disabled > mm/mmu_notifier: add an interval tree notifier > mm/hmm: allow hmm_range to be used with a mmu_range_notifier or > hmm_mirror > mm/hmm: define the pre-processor related parts of hmm.h even if > disabled > RDMA/odp: Use mmu_range_notifier_insert() > RDMA/hfi1: Use mmu_range_notifier_inset for user_exp_rcv > drm/radeon: use mmu_range_notifier_insert > xen/gntdev: Use select for DMA_SHARED_BUFFER > xen/gntdev: use mmu_range_notifier_insert > nouveau: use mmu_notifier directly for invalidate_range_start > nouveau: use mmu_range_notifier instead of hmm_mirror > drm/amdgpu: Call find_vma under mmap_sem > drm/amdgpu: Use mmu_range_insert instead of hmm_mirror > drm/amdgpu: Use mmu_range_notifier instead of hmm_mirror > mm/hmm: remove hmm_mirror and related > > Documentation/vm/hmm.rst | 105 +--- > drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 + > .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 9 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 14 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 1 + > drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c | 445 ++------------ > drivers/gpu/drm/amd/amdgpu/amdgpu_mn.h | 53 -- > drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 13 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 111 ++-- > drivers/gpu/drm/nouveau/nouveau_svm.c | 229 +++++--- > drivers/gpu/drm/radeon/radeon.h | 9 +- > drivers/gpu/drm/radeon/radeon_mn.c | 218 ++----- > drivers/infiniband/core/device.c | 1 - > drivers/infiniband/core/umem_odp.c | 288 +--------- > drivers/infiniband/hw/hfi1/file_ops.c | 2 +- > drivers/infiniband/hw/hfi1/hfi.h | 2 +- > drivers/infiniband/hw/hfi1/user_exp_rcv.c | 144 ++--- > drivers/infiniband/hw/hfi1/user_exp_rcv.h | 3 +- > drivers/infiniband/hw/mlx5/mlx5_ib.h | 7 +- > drivers/infiniband/hw/mlx5/mr.c | 3 +- > drivers/infiniband/hw/mlx5/odp.c | 48 +- > drivers/xen/Kconfig | 3 +- > drivers/xen/gntdev-common.h | 8 +- > drivers/xen/gntdev.c | 179 ++---- > include/linux/hmm.h | 195 +------ > include/linux/mmu_notifier.h | 124 +++- > include/rdma/ib_umem_odp.h | 65 +-- > include/rdma/ib_verbs.h | 2 - > kernel/fork.c | 1 - > mm/Kconfig | 2 +- > mm/hmm.c | 275 +-------- > mm/mmu_notifier.c | 542 +++++++++++++++++- > 32 files changed, 1180 insertions(+), 1923 deletions(-) >
WARNING: multiple messages have this Message-ID (diff)
From: "Christian König" <ckoenig.leichtzumerken-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> To: Jason Gunthorpe <jgg-uk2M96/98Pc@public.gmane.org>, Jerome Glisse <jglisse-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>, Ralph Campbell <rcampbell-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>, John Hubbard <jhubbard-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>, Felix.Kuehling-5C7GfCeVMHo@public.gmane.org Cc: Andrea Arcangeli <aarcange-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>, linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org, Jason Gunthorpe <jgg-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Ben Skeggs <bskeggs-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> Subject: Re: [PATCH hmm 00/15] Consolidate the mmu notifier interval_tree and locking Date: Wed, 16 Oct 2019 10:58:02 +0200 [thread overview] Message-ID: <bc954d29-388b-9e29-f960-115ccc6b9fea@gmail.com> (raw) In-Reply-To: <20191015181242.8343-1-jgg-uk2M96/98Pc@public.gmane.org> Am 15.10.19 um 20:12 schrieb Jason Gunthorpe: > From: Jason Gunthorpe <jgg@mellanox.com> > > 8 of the mmu_notifier using drivers (i915_gem, radeon_mn, umem_odp, hfi1, > scif_dma, vhost, gntdev, hmm) drivers are using a common pattern where > they only use invalidate_range_start/end and immediately check the > invalidating range against some driver data structure to tell if the > driver is interested. Half of them use an interval_tree, the others are > simple linear search lists. > > Of the ones I checked they largely seem to have various kinds of races, > bugs and poor implementation. This is a result of the complexity in how > the notifier interacts with get_user_pages(). It is extremely difficult to > use it correctly. > > Consolidate all of this code together into the core mmu_notifier and > provide a locking scheme similar to hmm_mirror that allows the user to > safely use get_user_pages() and reliably know if the page list still > matches the mm. That sounds really good, but could you outline for a moment how that is archived? Please keep in mind that the page reference get_user_pages() grabs is *NOT* sufficient to guarantee coherency here. Regards, Christian. > > This new arrangment plays nicely with the !blockable mode for > OOM. Scanning the interval tree is done such that the intersection test > will always succeed, and since there is no invalidate_range_end exposed to > drivers the scheme safely allows multiple drivers to be subscribed. > > Four places are converted as an example of how the new API is used. > Four are left for future patches: > - i915_gem has complex locking around destruction of a registration, > needs more study > - hfi1 (2nd user) needs access to the rbtree > - scif_dma has a complicated logic flow > - vhost's mmu notifiers are already being rewritten > > This is still being tested, but I figured to send it to start getting help > from the xen, amd and hfi drivers which I cannot test here. > > It would be intended for the hmm tree. > > Jason Gunthorpe (15): > mm/mmu_notifier: define the header pre-processor parts even if > disabled > mm/mmu_notifier: add an interval tree notifier > mm/hmm: allow hmm_range to be used with a mmu_range_notifier or > hmm_mirror > mm/hmm: define the pre-processor related parts of hmm.h even if > disabled > RDMA/odp: Use mmu_range_notifier_insert() > RDMA/hfi1: Use mmu_range_notifier_inset for user_exp_rcv > drm/radeon: use mmu_range_notifier_insert > xen/gntdev: Use select for DMA_SHARED_BUFFER > xen/gntdev: use mmu_range_notifier_insert > nouveau: use mmu_notifier directly for invalidate_range_start > nouveau: use mmu_range_notifier instead of hmm_mirror > drm/amdgpu: Call find_vma under mmap_sem > drm/amdgpu: Use mmu_range_insert instead of hmm_mirror > drm/amdgpu: Use mmu_range_notifier instead of hmm_mirror > mm/hmm: remove hmm_mirror and related > > Documentation/vm/hmm.rst | 105 +--- > drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 + > .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 9 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 14 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 1 + > drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c | 445 ++------------ > drivers/gpu/drm/amd/amdgpu/amdgpu_mn.h | 53 -- > drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 13 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 111 ++-- > drivers/gpu/drm/nouveau/nouveau_svm.c | 229 +++++--- > drivers/gpu/drm/radeon/radeon.h | 9 +- > drivers/gpu/drm/radeon/radeon_mn.c | 218 ++----- > drivers/infiniband/core/device.c | 1 - > drivers/infiniband/core/umem_odp.c | 288 +--------- > drivers/infiniband/hw/hfi1/file_ops.c | 2 +- > drivers/infiniband/hw/hfi1/hfi.h | 2 +- > drivers/infiniband/hw/hfi1/user_exp_rcv.c | 144 ++--- > drivers/infiniband/hw/hfi1/user_exp_rcv.h | 3 +- > drivers/infiniband/hw/mlx5/mlx5_ib.h | 7 +- > drivers/infiniband/hw/mlx5/mr.c | 3 +- > drivers/infiniband/hw/mlx5/odp.c | 48 +- > drivers/xen/Kconfig | 3 +- > drivers/xen/gntdev-common.h | 8 +- > drivers/xen/gntdev.c | 179 ++---- > include/linux/hmm.h | 195 +------ > include/linux/mmu_notifier.h | 124 +++- > include/rdma/ib_umem_odp.h | 65 +-- > include/rdma/ib_verbs.h | 2 - > kernel/fork.c | 1 - > mm/Kconfig | 2 +- > mm/hmm.c | 275 +-------- > mm/mmu_notifier.c | 542 +++++++++++++++++- > 32 files changed, 1180 insertions(+), 1923 deletions(-) > _______________________________________________ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
next prev parent reply other threads:[~2019-10-16 8:58 UTC|newest] Thread overview: 138+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-10-15 18:12 [PATCH hmm 00/15] Consolidate the mmu notifier interval_tree and locking Jason Gunthorpe 2019-10-15 18:12 ` Jason Gunthorpe 2019-10-15 18:12 ` [PATCH hmm 01/15] mm/mmu_notifier: define the header pre-processor parts even if disabled Jason Gunthorpe 2019-10-15 18:12 ` Jason Gunthorpe 2019-10-21 18:32 ` Jerome Glisse 2019-10-21 18:32 ` Jerome Glisse 2019-10-15 18:12 ` [PATCH hmm 02/15] mm/mmu_notifier: add an interval tree notifier Jason Gunthorpe 2019-10-15 18:12 ` Jason Gunthorpe 2019-10-21 18:30 ` Jerome Glisse 2019-10-21 18:30 ` Jerome Glisse 2019-10-21 18:54 ` Jason Gunthorpe 2019-10-21 18:54 ` Jason Gunthorpe 2019-10-21 19:11 ` Jerome Glisse 2019-10-21 19:11 ` Jerome Glisse 2019-10-21 19:24 ` Jason Gunthorpe 2019-10-21 19:24 ` Jason Gunthorpe 2019-10-21 19:47 ` Jerome Glisse 2019-10-21 19:47 ` Jerome Glisse 2019-10-27 23:15 ` Jason Gunthorpe 2019-10-27 23:15 ` Jason Gunthorpe 2019-10-27 23:15 ` Jason Gunthorpe 2019-10-15 18:12 ` [PATCH hmm 03/15] mm/hmm: allow hmm_range to be used with a mmu_range_notifier or hmm_mirror Jason Gunthorpe 2019-10-15 18:12 ` Jason Gunthorpe 2019-10-21 18:33 ` Jerome Glisse 2019-10-21 18:33 ` Jerome Glisse 2019-10-15 18:12 ` [PATCH hmm 04/15] mm/hmm: define the pre-processor related parts of hmm.h even if disabled Jason Gunthorpe 2019-10-15 18:12 ` Jason Gunthorpe 2019-10-21 18:31 ` Jerome Glisse 2019-10-21 18:31 ` Jerome Glisse 2019-10-15 18:12 ` [PATCH hmm 05/15] RDMA/odp: Use mmu_range_notifier_insert() Jason Gunthorpe 2019-10-15 18:12 ` Jason Gunthorpe 2019-11-04 20:25 ` Jason Gunthorpe 2019-11-04 20:25 ` Jason Gunthorpe 2019-11-04 20:25 ` Jason Gunthorpe 2019-10-15 18:12 ` [PATCH hmm 06/15] RDMA/hfi1: Use mmu_range_notifier_inset for user_exp_rcv Jason Gunthorpe 2019-10-15 18:12 ` Jason Gunthorpe 2019-10-29 12:15 ` Dennis Dalessandro 2019-10-29 12:15 ` Dennis Dalessandro 2019-10-29 12:15 ` Dennis Dalessandro 2019-10-15 18:12 ` [PATCH hmm 07/15] drm/radeon: use mmu_range_notifier_insert Jason Gunthorpe 2019-10-15 18:12 ` Jason Gunthorpe 2019-10-15 18:12 ` [PATCH hmm 08/15] xen/gntdev: Use select for DMA_SHARED_BUFFER Jason Gunthorpe 2019-10-15 18:12 ` [Xen-devel] " Jason Gunthorpe 2019-10-15 18:12 ` Jason Gunthorpe 2019-10-16 5:11 ` Jürgen Groß 2019-10-16 5:11 ` [Xen-devel] " Jürgen Groß 2019-10-16 5:11 ` Jürgen Groß 2019-10-16 6:35 ` Oleksandr Andrushchenko 2019-10-16 6:35 ` [Xen-devel] " Oleksandr Andrushchenko 2019-10-16 6:35 ` Oleksandr Andrushchenko 2019-10-21 19:12 ` Jason Gunthorpe 2019-10-21 19:12 ` [Xen-devel] " Jason Gunthorpe 2019-10-21 19:12 ` Jason Gunthorpe 2019-10-28 6:25 ` [Xen-devel] " Oleksandr Andrushchenko 2019-10-28 6:25 ` Oleksandr Andrushchenko 2019-10-28 6:25 ` Oleksandr Andrushchenko 2019-10-28 6:25 ` Oleksandr Andrushchenko 2019-10-28 6:25 ` Oleksandr Andrushchenko 2019-10-15 18:12 ` [PATCH hmm 09/15] xen/gntdev: use mmu_range_notifier_insert Jason Gunthorpe 2019-10-15 18:12 ` [Xen-devel] " Jason Gunthorpe 2019-10-15 18:12 ` Jason Gunthorpe 2019-10-15 18:12 ` [PATCH hmm 10/15] nouveau: use mmu_notifier directly for invalidate_range_start Jason Gunthorpe 2019-10-15 18:12 ` Jason Gunthorpe 2019-10-15 18:12 ` [PATCH hmm 11/15] nouveau: use mmu_range_notifier instead of hmm_mirror Jason Gunthorpe 2019-10-15 18:12 ` Jason Gunthorpe 2019-10-15 18:12 ` [PATCH hmm 12/15] drm/amdgpu: Call find_vma under mmap_sem Jason Gunthorpe 2019-10-15 18:12 ` Jason Gunthorpe 2019-10-15 18:12 ` [PATCH hmm 13/15] drm/amdgpu: Use mmu_range_insert instead of hmm_mirror Jason Gunthorpe 2019-10-15 18:12 ` Jason Gunthorpe 2019-10-15 18:12 ` [PATCH hmm 14/15] drm/amdgpu: Use mmu_range_notifier " Jason Gunthorpe 2019-10-15 18:12 ` Jason Gunthorpe 2019-10-15 18:12 ` [PATCH hmm 15/15] mm/hmm: remove hmm_mirror and related Jason Gunthorpe 2019-10-15 18:12 ` Jason Gunthorpe 2019-10-21 18:38 ` Jerome Glisse 2019-10-21 18:38 ` Jerome Glisse 2019-10-21 18:57 ` Jason Gunthorpe 2019-10-21 18:57 ` Jason Gunthorpe 2019-10-21 19:19 ` Jerome Glisse 2019-10-21 19:19 ` Jerome Glisse 2019-10-16 8:58 ` Christian König [this message] 2019-10-16 8:58 ` [PATCH hmm 00/15] Consolidate the mmu notifier interval_tree and locking Christian König 2019-10-16 16:04 ` Jason Gunthorpe 2019-10-16 16:04 ` Jason Gunthorpe 2019-10-17 8:54 ` Christian König 2019-10-17 8:54 ` Christian König 2019-10-17 16:26 ` Yang, Philip 2019-10-17 16:26 ` Yang, Philip 2019-10-17 16:47 ` Koenig, Christian 2019-10-17 16:47 ` Koenig, Christian 2019-10-18 20:36 ` Jason Gunthorpe 2019-10-18 20:36 ` Jason Gunthorpe 2019-10-20 14:21 ` Koenig, Christian 2019-10-20 14:21 ` Koenig, Christian 2019-10-21 13:57 ` Jason Gunthorpe 2019-10-21 13:57 ` Jason Gunthorpe 2019-10-21 14:28 ` Koenig, Christian 2019-10-21 14:28 ` Koenig, Christian 2019-10-21 15:12 ` Jason Gunthorpe 2019-10-21 15:12 ` Jason Gunthorpe 2019-10-22 7:57 ` Daniel Vetter 2019-10-22 7:57 ` Daniel Vetter 2019-10-22 15:01 ` Jason Gunthorpe 2019-10-22 15:01 ` Jason Gunthorpe 2019-10-23 9:08 ` Daniel Vetter 2019-10-23 9:08 ` Daniel Vetter 2019-10-23 9:08 ` Daniel Vetter 2019-10-23 9:32 ` Christian König 2019-10-23 9:32 ` Christian König 2019-10-23 9:32 ` Christian König 2019-10-23 16:52 ` Jerome Glisse 2019-10-23 16:52 ` Jerome Glisse 2019-10-23 16:52 ` Jerome Glisse 2019-10-23 16:52 ` Jerome Glisse 2019-10-23 17:24 ` Jason Gunthorpe 2019-10-23 17:24 ` Jason Gunthorpe 2019-10-23 17:24 ` Jason Gunthorpe 2019-10-23 17:24 ` Jason Gunthorpe 2019-10-24 2:16 ` Christoph Hellwig 2019-10-24 2:16 ` Christoph Hellwig 2019-10-24 2:16 ` Christoph Hellwig 2019-10-21 15:55 ` Dennis Dalessandro 2019-10-21 15:55 ` Dennis Dalessandro 2019-10-21 16:58 ` Jason Gunthorpe 2019-10-21 16:58 ` Jason Gunthorpe 2019-10-22 11:56 ` Dennis Dalessandro 2019-10-22 11:56 ` Dennis Dalessandro 2019-10-22 14:37 ` Jason Gunthorpe 2019-10-22 14:37 ` Jason Gunthorpe 2019-10-21 18:40 ` Jerome Glisse 2019-10-21 18:40 ` Jerome Glisse 2019-10-21 19:06 ` Jason Gunthorpe 2019-10-21 19:06 ` Jason Gunthorpe 2019-10-23 20:26 ` Jerome Glisse 2019-10-23 20:26 ` Jerome Glisse 2019-10-23 20:26 ` Jerome Glisse 2019-10-23 20:26 ` Jerome Glisse 2019-10-17 16:44 Koenig, Christian 2019-10-17 16:44 ` Koenig, Christian
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=bc954d29-388b-9e29-f960-115ccc6b9fea@gmail.com \ --to=ckoenig.leichtzumerken@gmail.com \ --cc=Felix.Kuehling@amd.com \ --cc=aarcange@redhat.com \ --cc=amd-gfx@lists.freedesktop.org \ --cc=bskeggs@redhat.com \ --cc=christian.koenig@amd.com \ --cc=dri-devel@lists.freedesktop.org \ --cc=jgg@mellanox.com \ --cc=jgg@ziepe.ca \ --cc=jglisse@redhat.com \ --cc=jhubbard@nvidia.com \ --cc=linux-mm@kvack.org \ --cc=linux-rdma@vger.kernel.org \ --cc=rcampbell@nvidia.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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.