IB/uverbs: Move non driver related elements from ib_ucontext to ib_ufile

The IDR is part of the ib_ufile so all the machinery to lock it, handle
closing and disassociation rightly belongs to the ufile not the ucontext.

This changes the lifetime of that data to match the lifetime of the file
descriptor which is always strictly longer than the lifetime of the
ucontext.

We need the entire locking machinery to continue to exist after ucontext
destruction to allow us to return the destroy data after a device has been
disassociated.

Signed-off-by: Jason Gunthorpe <[email protected]>
Signed-off-by: Leon Romanovsky <[email protected]>
This commit is contained in:
Jason Gunthorpe 2018-07-04 11:32:07 +03:00
commit 6a5e9c8841
6 changed files with 49 additions and 46 deletions

View file

@ -1500,12 +1500,6 @@ struct ib_ucontext {
struct ib_uverbs_file *ufile;
int closing;
/* locking the uobjects_list */
struct mutex uobjects_lock;
struct list_head uobjects;
/* protects cleanup process from other actions */
struct rw_semaphore cleanup_rwsem;
enum rdma_remove_reason cleanup_reason;
bool cleanup_retryable;
struct pid *tgid;
@ -1531,6 +1525,9 @@ struct ib_ucontext {
struct ib_uobject {
u64 user_handle; /* handle given to us by userspace */
/* ufile & ucontext owning this object */
struct ib_uverbs_file *ufile;
/* FIXME, save memory: ufile->context == context */
struct ib_ucontext *context; /* associated user context */
void *object; /* containing object */
struct list_head list; /* link to context's list */