From: Shamir Rabinovitch <shamir.rabinovitch@xxxxxxxxxx> To keep track of shared object life time add ref count to ib_pd Signed-off-by: Shamir Rabinovitch <shamir.rabinovitch@xxxxxxxxxx> Signed-off-by: Shamir Rabinovitch <srabinov7@xxxxxxxxx> --- drivers/infiniband/core/uverbs_cmd.c | 3 +++ include/rdma/ib_verbs.h | 3 +++ 2 files changed, 6 insertions(+) diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c index 21f0a1a986f4..5800d7e0992a 100644 --- a/drivers/infiniband/core/uverbs_cmd.c +++ b/drivers/infiniband/core/uverbs_cmd.c @@ -436,12 +436,15 @@ static int ib_uverbs_alloc_pd(struct uverbs_attr_bundle *attrs) pd->__internal_mr = NULL; atomic_set(&pd->usecnt, 0); pd->res.type = RDMA_RESTRACK_PD; + /* number of uobj using this ib_pd */ + atomic_set(&pd->refcnt, 1); ret = ib_dev->ops.alloc_pd(pd, &attrs->driver_udata); if (ret) goto err_alloc; uobj->object = pd; + uobj->refcnt = &pd->refcnt; memset(&resp, 0, sizeof resp); resp.pd_handle = uobj->id; rdma_restrack_uadd(&pd->res); diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 542b3cb2d943..e3ce38aa89b6 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h @@ -1525,6 +1525,9 @@ struct ib_pd { */ struct ib_mr *__internal_mr; struct rdma_restrack_entry res; + + /* number of uobj using this ib_pd */ + atomic_t refcnt; }; struct ib_xrcd { -- 2.20.1