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>
This commit is contained in:

committed by
Doug Ledford

parent
597ecc5a09
commit
c9990ab39b
@@ -1488,6 +1488,25 @@ struct ib_rdmacg_object {
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef CONFIG_INFINIBAND_ON_DEMAND_PAGING
|
||||
struct ib_ucontext_per_mm {
|
||||
struct ib_ucontext *context;
|
||||
|
||||
struct rb_root_cached umem_tree;
|
||||
/*
|
||||
* Protects .umem_rbroot and tree, as well as odp_mrs_count and
|
||||
* mmu notifiers registration.
|
||||
*/
|
||||
struct rw_semaphore umem_rwsem;
|
||||
|
||||
struct mmu_notifier mn;
|
||||
atomic_t notifier_count;
|
||||
/* A list of umems that don't have private mmu notifier counters yet. */
|
||||
struct list_head no_private_counters;
|
||||
unsigned int odp_mrs_count;
|
||||
};
|
||||
#endif
|
||||
|
||||
struct ib_ucontext {
|
||||
struct ib_device *device;
|
||||
struct ib_uverbs_file *ufile;
|
||||
@@ -1502,20 +1521,9 @@ struct ib_ucontext {
|
||||
|
||||
struct pid *tgid;
|
||||
#ifdef CONFIG_INFINIBAND_ON_DEMAND_PAGING
|
||||
struct rb_root_cached umem_tree;
|
||||
/*
|
||||
* Protects .umem_rbroot and tree, as well as odp_mrs_count and
|
||||
* mmu notifiers registration.
|
||||
*/
|
||||
struct rw_semaphore umem_rwsem;
|
||||
void (*invalidate_range)(struct ib_umem_odp *umem_odp,
|
||||
unsigned long start, unsigned long end);
|
||||
|
||||
struct mmu_notifier mn;
|
||||
atomic_t notifier_count;
|
||||
/* A list of umems that don't have private mmu notifier counters yet. */
|
||||
struct list_head no_private_counters;
|
||||
int odp_mrs_count;
|
||||
struct ib_ucontext_per_mm per_mm;
|
||||
#endif
|
||||
|
||||
struct ib_rdmacg_object cg_obj;
|
||||
|
Reference in New Issue
Block a user