On Tue, Jan 22, 2019 at 08:18:56PM +0200, Leon Romanovsky wrote: > From: Leon Romanovsky <leonro@xxxxxxxxxxxx> > > PD, MR and QP objects have parents objects: contexts and PDs. > The exposed parent IDs allow to correlate various objects > and simplify debug investigation. > > Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx> > drivers/infiniband/core/nldev.c | 41 ++++++++++++++++++++++++++++---- > include/uapi/rdma/rdma_netlink.h | 1 + > 2 files changed, 38 insertions(+), 4 deletions(-) > > diff --git a/drivers/infiniband/core/nldev.c b/drivers/infiniband/core/nldev.c > index 3b24838fe6e0..9bcfd3e4e099 100644 > +++ b/drivers/infiniband/core/nldev.c > @@ -111,6 +111,7 @@ static const struct nla_policy nldev_policy[RDMA_NLDEV_ATTR_MAX] = { > [RDMA_NLDEV_ATTR_RES_CQN] = { .type = NLA_U32 }, > [RDMA_NLDEV_ATTR_RES_MRN] = { .type = NLA_U32 }, > [RDMA_NLDEV_ATTR_RES_CM_IDN] = { .type = NLA_U32 }, > + [RDMA_NLDEV_ATTR_RES_CTXN] = { .type = NLA_U32 }, > }; > > static int put_driver_name_print_type(struct sk_buff *msg, const char *name, > @@ -375,25 +376,54 @@ static bool fill_res_entry(struct ib_device *dev, struct sk_buff *msg, > > static bool fill_res_ids(struct sk_buff *msg, struct rdma_restrack_entry *res) > { > - bool ret; > + bool ret = false; > > switch (res->type) { > - case RDMA_RESTRACK_PD: > + case RDMA_RESTRACK_PD: { > + struct ib_pd *pd = container_of(res, struct ib_pd, res); > + > ret = nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_PDN, > rdma_res_to_id(res)); > + if (!ret && !rdma_is_kernel_res(res)) > + ret = nla_put_u32( > + msg, RDMA_NLDEV_ATTR_RES_CTXN, > + rdma_res_to_id(&pd->uobject->context->res)); uobject->context cannot be accessed without proper uobject locking. See the recent email to Shamir. Shamir is also working to eliminate pd->uobject so we should not have more references being added. Jason