aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/core/uverbs_cmd.c
diff options
context:
space:
mode:
authorJason Gunthorpe <jgg@mellanox.com>2018-09-16 20:48:07 +0300
committerDoug Ledford <dledford@redhat.com>2018-09-21 11:54:46 -0400
commitc9990ab39b6e911003bab10a6da96e98ab1503a3 (patch)
tree9a58cb3f9c74089b3e022d5dc89d808f8bf9bb2c /drivers/infiniband/core/uverbs_cmd.c
parentRDMA/umem: Get rid of struct ib_umem.odp_data (diff)
downloadlinux-dev-c9990ab39b6e911003bab10a6da96e98ab1503a3.tar.xz
linux-dev-c9990ab39b6e911003bab10a6da96e98ab1503a3.zip
RDMA/umem: Move all the ODP related stuff out of ucontext and into per_mm
This is the first step to make ODP use the owning_mm that is now part of struct ib_umem. Each ODP umem is linked to a single per_mm structure, which in turn, is linked to a single mm, via the embedded mmu_notifier. This first patch introduces the structure and reworks eveything to use it. This also needs to introduce tgid into the ib_ucontext_per_mm, as get_user_pages_remote() requires the originating task for statistics tracking. Signed-off-by: Jason Gunthorpe <jgg@mellanox.com> Signed-off-by: Leon Romanovsky <leonro@mellanox.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
Diffstat (limited to 'drivers/infiniband/core/uverbs_cmd.c')
-rw-r--r--drivers/infiniband/core/uverbs_cmd.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
index 9c87c98a0f19..ce678e1008a4 100644
--- a/drivers/infiniband/core/uverbs_cmd.c
+++ b/drivers/infiniband/core/uverbs_cmd.c
@@ -124,10 +124,11 @@ ssize_t ib_uverbs_get_context(struct ib_uverbs_file *file,
ucontext->cleanup_retryable = false;
#ifdef CONFIG_INFINIBAND_ON_DEMAND_PAGING
- ucontext->umem_tree = RB_ROOT_CACHED;
- init_rwsem(&ucontext->umem_rwsem);
- ucontext->odp_mrs_count = 0;
- INIT_LIST_HEAD(&ucontext->no_private_counters);
+ ucontext->per_mm.umem_tree = RB_ROOT_CACHED;
+ init_rwsem(&ucontext->per_mm.umem_rwsem);
+ ucontext->per_mm.odp_mrs_count = 0;
+ INIT_LIST_HEAD(&ucontext->per_mm.no_private_counters);
+ ucontext->per_mm.context = ucontext;
if (!(ib_dev->attrs.device_cap_flags & IB_DEVICE_ON_DEMAND_PAGING))
ucontext->invalidate_range = NULL;