Re: [PATCH rdma-next 2/2] RDMA/nldev: Provide parent IDs for PD, MR and QP objects

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Jan 22, 2019 at 09:39:42PM +0200, Leon Romanovsky wrote:
> On Tue, Jan 22, 2019 at 12:09:49PM -0700, Jason Gunthorpe wrote:
> > 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.
> 
> How can context "disappear" if we are holding PD which is part of that context?

You want to rely on the restrack HW object locking to protect the
uobject? Sort of backwards.. Today the uobject exists strictly longer
the HW object, but I'm not sure if that is a great assumption to bake
in here..

> > See the recent email to Shamir.
> >
> > Shamir is also working to eliminate pd->uobject so we should not have
> > more references being added.
> 
> Was anything accepted so I can use instead? If not, I will update the
> code, once it will be part of rdma-next.

pd's won't have a single ucontext as parent. Do not add new user ABI
that assume this.

Jason



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux