All of lore.kernel.org
 help / color / mirror / Atom feed
From: Leon Romanovsky <leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: Jason Gunthorpe <jgg-uk2M96/98Pc@public.gmane.org>
Cc: Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
	RDMA mailing list
	<linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	Mark Bloch <markb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
	Steve Wise
	<swise-7bPotxP6k4+P2YhJcF5u+vpXobYPEAuW@public.gmane.org>
Subject: Re: [PATCH rdma-next v6 3/8] RDMA/restrack: Add general infrastructure to track RDMA resources
Date: Thu, 25 Jan 2018 21:44:36 +0200	[thread overview]
Message-ID: <20180125194436.GR1393@mtr-leonro.local> (raw)
In-Reply-To: <20180125174529.GB3739-uk2M96/98Pc@public.gmane.org>

[-- Attachment #1: Type: text/plain, Size: 2347 bytes --]

On Thu, Jan 25, 2018 at 10:45:29AM -0700, Jason Gunthorpe wrote:
> On Thu, Jan 25, 2018 at 05:12:22PM +0200, Leon Romanovsky wrote:
> > From: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
> > +
> > +/**
> > + * struct rdma_restrack_entry - metadata per-entry
> > + */
> > +struct rdma_restrack_entry {
> > +	/**
> > +	 * @valid: validity indicator
> > +	 *
> > +	 * The entries are filled during rdma_restrack_add,
> > +	 * can be attempted to be free during rdma_restrack_del.
> > +	 *
> > +	 * As an example for that, see mlx5 QPs with type MLX5_IB_QPT_HW_GSI
> > +	 */
> > +	bool			valid;
> > +	/*
> > +	 * @kref: Protect destroy of the resource
> > +	 */
> > +	struct kref		kref;
>
> Sticking a kref in a random structure that is itself not malloc'd is a
> big red flag:

It is not "rand", but embedded part of ib_qp,ib_pd and ib_cq. It is
malloced as part of their creation.

>
> @@ -1746,6 +1756,11 @@ struct ib_qp {
> +       struct rdma_restrack_root     res;
>
>
> Not seeing how this works at all.
>
> qp does this:
>
> +       rdma_restrack_del(&qp->res);
>         ret = qp->device->destroy_qp(qp);
>
> And for instance the mlx5 implementation of destroy_qp() does:
>
> int mlx5_ib_destroy_qp(struct ib_qp *qp)
> {
>         struct mlx5_ib_qp *mqp = to_mqp(qp);
> [..]
>
>         kfree(mqp);
>
> So we kfree the kref containing memory outside the kref's release
> function. Super big red flag.

It is worth to look on the actual implementation, the
rdma_restrack_del() doesn't do a lot: removes from the list and marks
the resource as not valid.

>
> rdma_restrack_del is just:
>
> +       return kref_put(&res->kref, restrack_release);
>
> So we don't do anything to block progress to the kfree unless
> the kref drefs to 0. But the reader holds a get/put across its
> critical section so we never hit the 0 case when there is another
> user.
>
> Not even remotely right.
>
> Adding a kref means it has to be added to struct ib_qp and then kfree's
> in the drivers need to change to kref_put. That is alot of work.
>
> The best idea I've had to make this locking work is what I emailed you
> a few days ago..

It is more or less the same idea, but needs to move
down_write(&dev->res.rwsem) to be part of rdma_restrack_del and not
release routine. It will cause to block the progress of release.

Thanks

>
> Jason

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  parent reply	other threads:[~2018-01-25 19:44 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-25 15:12 [PATCH rdma-next v6 0/8] RDMA resource tracking Leon Romanovsky
     [not found] ` <20180125151227.28202-1-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2018-01-25 15:12   ` [PATCH rdma-next v6 1/8] RDMA/core: Print caller name instead of function name Leon Romanovsky
2018-01-25 15:12   ` [PATCH rdma-next v6 2/8] RDMA/core: Save kernel caller name in PD and CQ objects Leon Romanovsky
2018-01-25 15:12   ` [PATCH rdma-next v6 3/8] RDMA/restrack: Add general infrastructure to track RDMA resources Leon Romanovsky
     [not found]     ` <20180125151227.28202-4-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2018-01-25 16:39       ` Doug Ledford
     [not found]         ` <1516898399.27592.139.camel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2018-01-25 19:35           ` Leon Romanovsky
2018-01-25 17:45       ` Jason Gunthorpe
     [not found]         ` <20180125174529.GB3739-uk2M96/98Pc@public.gmane.org>
2018-01-25 19:44           ` Leon Romanovsky [this message]
     [not found]             ` <20180125194436.GR1393-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2018-01-25 20:10               ` Jason Gunthorpe
     [not found]                 ` <20180125201023.GA9162-uk2M96/98Pc@public.gmane.org>
2018-01-25 20:27                   ` Leon Romanovsky
     [not found]                     ` <20180125202710.GS1393-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2018-01-25 21:00                       ` Jason Gunthorpe
     [not found]                         ` <20180125210026.GA10719-uk2M96/98Pc@public.gmane.org>
2018-01-25 21:18                           ` Leon Romanovsky
     [not found]                             ` <20180125211831.GT1393-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2018-01-25 21:57                               ` Jason Gunthorpe
     [not found]                                 ` <20180125215716.GA11537-uk2M96/98Pc@public.gmane.org>
2018-01-26  6:24                                   ` Leon Romanovsky
     [not found]                                     ` <20180126062423.GV1393-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2018-01-26 16:05                                       ` Jason Gunthorpe
2018-01-25 15:12   ` [PATCH rdma-next v6 4/8] RDMA/core: Add resource tracking for create and destroy QPs Leon Romanovsky
2018-01-25 15:12   ` [PATCH rdma-next v6 5/8] RDMA/core: Add resource tracking for create and destroy CQs Leon Romanovsky
2018-01-25 15:12   ` [PATCH rdma-next v6 6/8] RDMA/core: Add resource tracking for create and destroy PDs Leon Romanovsky
2018-01-25 15:12   ` [PATCH rdma-next v6 7/8] RDMA/nldev: Provide global resource utilization Leon Romanovsky
2018-01-25 15:12   ` [PATCH rdma-next v6 8/8] RDMA/nldev: Provide detailed QP information Leon Romanovsky

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180125194436.GR1393@mtr-leonro.local \
    --to=leon-dgejt+ai2ygdnm+yrofe0a@public.gmane.org \
    --cc=dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=jgg-uk2M96/98Pc@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=markb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=swise-7bPotxP6k4+P2YhJcF5u+vpXobYPEAuW@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.