public inbox for linux-rdma@vger.kernel.org
 help / color / mirror / Atom feed
From: Jason Gunthorpe <jgg-uk2M96/98Pc@public.gmane.org>
To: Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: Leon Romanovsky <leon-DgEjT+Ai2ygdnm+yROfE0A@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 v7 0/8] RDMA resource tracking
Date: Mon, 29 Jan 2018 20:34:36 -0700	[thread overview]
Message-ID: <20180130033436.GA17053@ziepe.ca> (raw)
In-Reply-To: <1517256713.27592.241.camel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>

On Mon, Jan 29, 2018 at 03:11:53PM -0500, Doug Ledford wrote:
> On Sun, 2018-01-28 at 14:05 -0700, Jason Gunthorpe wrote:
> > On Sun, Jan 28, 2018 at 11:17:17AM +0200, Leon Romanovsky wrote:
> > 
> > > The original goal of this series was to allow ability to view connection
> > > (QP) information about running processes, however I used this opportunity and
> > > created common infrastructure to track and report various resources. The report
> > > part is implemented in netlink (nldev), but smart ULPs can now create
> > > advanced usage models based on device utilization.
> > > 
> > > The current implementation relies on one lock per-object per-device, so
> > > creation/destroying of various objects (CQ, PD, e.t.c) on various or the
> > > same devices doesn't interfere each with another.
> > > 
> > > The data protection is performed with SRCU and its reader-writer model
> > > ensures that resource won't be destroyed till readers will finish their
> > > work.
> > 
> > Well, this cover letter isn't quite right anymore.. but no matter.
> > 
> > My small comments aside it looks OK to me.
> 
> Likewise.  I'm happy with it at this point.

Okay, I fixed up the small things and applied the patches to for-next

Leon: Please validate I didn't screw it up. Here is the diff against
what you sent:

- Success path on the main execution flow, not under an if
- constify static structure
- Remove confusing comment about locking, ib_enum_all_devs
  obtains locks to iterate its list and rdma_restrack_count holds
  res->rwsem so everything is accounted for directly without
  trickyness
- Speeling
- Remove extra lock in rdma_restrack_del
- Restore pd = NULL in ib_create_xrc_qp. This scraed me a bit, xrc is
  wonky. But ib_create_xrc_q is only called in cases where
  rdma_restrack_add is not added, so keeping things as-they-are should
  not impact restrack. If restrack needs the pd for a XRC someday it
  should get it from qp->real_qp
- Remove SET/NEW/DEL cargo cult, please send a patch for rest?

Branch is here:

https://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma.git/log/?h=wip/jgg-for-next

Still unhappy with the kref-as-not-a-kref.

diff --git a/drivers/infiniband/core/core_priv.h b/drivers/infiniband/core/core_priv.h
index 3dcacf220e5e7e..c4560d84dfaebd 100644
--- a/drivers/infiniband/core/core_priv.h
+++ b/drivers/infiniband/core/core_priv.h
@@ -310,21 +310,21 @@ static inline struct ib_qp *_ib_create_qp(struct ib_device *dev,
 	struct ib_qp *qp;
 
 	qp = dev->create_qp(pd, attr, udata);
-	if (!IS_ERR(qp)) {
-		qp->device = dev;
-		qp->pd	   = pd;
-		/*
-		 * We don't track XRC QPs for now, because they don't have PD
-		 * and more importantly they are created internaly by driver,
-		 * see mlx5 create_dev_resources() as an example.
-		 */
-		if (attr->qp_type < IB_QPT_XRC_INI) {
-			qp->res.type = RDMA_RESTRACK_QP;
-			rdma_restrack_add(&qp->res);
-		} else {
-			qp->res.valid = false;
-		}
-	}
+	if (IS_ERR(qp))
+		return qp;
+
+	qp->device = dev;
+	qp->pd = pd;
+	/*
+	 * We don't track XRC QPs for now, because they don't have PD
+	 * and more importantly they are created internaly by driver,
+	 * see mlx5 create_dev_resources() as an example.
+	 */
+	if (attr->qp_type < IB_QPT_XRC_INI) {
+		qp->res.type = RDMA_RESTRACK_QP;
+		rdma_restrack_add(&qp->res);
+	} else
+		qp->res.valid = false;
 
 	return qp;
 }
diff --git a/drivers/infiniband/core/nldev.c b/drivers/infiniband/core/nldev.c
index 421d5fa6a81731..fa8655e3b3edfe 100644
--- a/drivers/infiniband/core/nldev.c
+++ b/drivers/infiniband/core/nldev.c
@@ -178,7 +178,7 @@ static int fill_res_info_entry(struct sk_buff *msg,
 
 static int fill_res_info(struct sk_buff *msg, struct ib_device *device)
 {
-	static const char *names[RDMA_RESTRACK_MAX] = {
+	static const char * const names[RDMA_RESTRACK_MAX] = {
 		[RDMA_RESTRACK_PD] = "pd",
 		[RDMA_RESTRACK_CQ] = "cq",
 		[RDMA_RESTRACK_QP] = "qp",
@@ -553,10 +553,6 @@ static int _nldev_res_get_dumpit(struct ib_device *device,
 static int nldev_res_get_dumpit(struct sk_buff *skb,
 				struct netlink_callback *cb)
 {
-	/*
-	 * There is no need to take lock, because
-	 * we are relying on ib_core's lists_rwsem
-	 */
 	return ib_enum_all_devs(_nldev_res_get_dumpit, skb, cb);
 }
 
@@ -627,8 +623,8 @@ static int nldev_res_get_qp_dumpit(struct sk_buff *skb,
 		    (!rdma_is_kernel_res(res) &&
 		     task_active_pid_ns(current) != task_active_pid_ns(res->task)))
 			/*
-			 * 1. Kernel QPs should be visible in init namsapce only
-			 * 2. Preent only QPs visible in the current namespace
+			 * 1. Kernel QPs should be visible in init namspace only
+			 * 2. Present only QPs visible in the current namespace
 			 */
 			goto next;
 
diff --git a/drivers/infiniband/core/restrack.c b/drivers/infiniband/core/restrack.c
index 351b6940f6dc17..857637bf46da27 100644
--- a/drivers/infiniband/core/restrack.c
+++ b/drivers/infiniband/core/restrack.c
@@ -150,9 +150,7 @@ void rdma_restrack_del(struct rdma_restrack_entry *res)
 	if (!dev)
 		return;
 
-	down_read(&dev->res.rwsem);
 	rdma_restrack_put(res);
-	up_read(&dev->res.rwsem);
 
 	wait_for_completion(&res->comp);
 
diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c
index a98a3e8412f810..16ebc6372c31ab 100644
--- a/drivers/infiniband/core/verbs.c
+++ b/drivers/infiniband/core/verbs.c
@@ -849,6 +849,7 @@ static struct ib_qp *ib_create_xrc_qp(struct ib_qp *qp,
 
 	qp->event_handler = __ib_shared_qp_event_handler;
 	qp->qp_context = qp;
+	qp->pd = NULL;
 	qp->send_cq = qp->recv_cq = NULL;
 	qp->srq = NULL;
 	qp->xrcd = qp_init_attr->xrcd;
diff --git a/include/uapi/rdma/rdma_netlink.h b/include/uapi/rdma/rdma_netlink.h
index 23bef401598208..17e59bec169ec0 100644
--- a/include/uapi/rdma/rdma_netlink.h
+++ b/include/uapi/rdma/rdma_netlink.h
@@ -237,14 +237,8 @@ enum rdma_nldev_command {
 	RDMA_NLDEV_CMD_PORT_DEL,
 
 	RDMA_NLDEV_CMD_RES_GET, /* can dump */
-	RDMA_NLDEV_CMD_RES_SET,
-	RDMA_NLDEV_CMD_RES_NEW,
-	RDMA_NLDEV_CMD_RES_DEL,
 
 	RDMA_NLDEV_CMD_RES_QP_GET, /* can dump */
-	RDMA_NLDEV_CMD_RES_QP_SET,
-	RDMA_NLDEV_CMD_RES_QP_NEW,
-	RDMA_NLDEV_CMD_RES_QP_DEL,
 
 	RDMA_NLDEV_NUM_OPS
 };
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2018-01-30  3:34 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-28  9:17 [PATCH rdma-next v7 0/8] RDMA resource tracking Leon Romanovsky
     [not found] ` <20180128091725.13103-1-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2018-01-28  9:17   ` [PATCH rdma-next v7 1/8] RDMA/core: Print caller name instead of function name Leon Romanovsky
2018-01-28  9:17   ` [PATCH rdma-next v7 2/8] RDMA/core: Save kernel caller name in PD and CQ objects Leon Romanovsky
2018-01-28  9:17   ` [PATCH rdma-next v7 3/8] RDMA/restrack: Add general infrastructure to track RDMA resources Leon Romanovsky
     [not found]     ` <20180128091725.13103-4-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2018-01-28 21:03       ` Jason Gunthorpe
     [not found]         ` <20180128210350.GJ23869-uk2M96/98Pc@public.gmane.org>
2018-01-29  5:37           ` Leon Romanovsky
2018-01-28  9:17   ` [PATCH rdma-next v7 4/8] RDMA/core: Add resource tracking for create and destroy QPs Leon Romanovsky
2018-01-28  9:17   ` [PATCH rdma-next v7 5/8] RDMA/core: Add resource tracking for create and destroy CQs Leon Romanovsky
2018-01-28  9:17   ` [PATCH rdma-next v7 6/8] RDMA/core: Add resource tracking for create and destroy PDs Leon Romanovsky
     [not found]     ` <20180128091725.13103-7-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2018-01-28 20:48       ` Jason Gunthorpe
     [not found]         ` <20180128204858.GI23869-uk2M96/98Pc@public.gmane.org>
2018-01-29  5:14           ` Leon Romanovsky
2018-01-28  9:17   ` [PATCH rdma-next v7 7/8] RDMA/nldev: Provide global resource utilization Leon Romanovsky
     [not found]     ` <20180128091725.13103-8-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2018-01-28 20:45       ` Jason Gunthorpe
     [not found]         ` <20180128204513.GH23869-uk2M96/98Pc@public.gmane.org>
2018-01-29  5:09           ` Leon Romanovsky
     [not found]             ` <20180129050922.GA1393-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2018-01-29 17:59               ` Jason Gunthorpe
2018-01-28  9:17   ` [PATCH rdma-next v7 8/8] RDMA/nldev: Provide detailed QP information Leon Romanovsky
2018-01-28 21:05   ` [PATCH rdma-next v7 0/8] RDMA resource tracking Jason Gunthorpe
     [not found]     ` <20180128210520.GK23869-uk2M96/98Pc@public.gmane.org>
2018-01-29  5:39       ` Leon Romanovsky
2018-01-29 20:11       ` Doug Ledford
     [not found]         ` <1517256713.27592.241.camel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2018-01-30  3:34           ` Jason Gunthorpe [this message]
     [not found]             ` <20180130033436.GA17053-uk2M96/98Pc@public.gmane.org>
2018-01-30  9:16               ` Leon Romanovsky
     [not found]                 ` <20180130091654.GD2055-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2018-01-30 15:21                   ` Steve Wise
2018-01-30 15:56                     ` Jason Gunthorpe
     [not found]                       ` <20180130155643.GC17053-uk2M96/98Pc@public.gmane.org>
2018-01-30 16:16                         ` Steve Wise
2018-01-30 16:33                           ` Jason Gunthorpe
     [not found]                             ` <20180130163330.GE17053-uk2M96/98Pc@public.gmane.org>
2018-01-30 19:07                               ` Bart Van Assche
     [not found]                                 ` <1517339252.2589.34.camel-Sjgp3cTcYWE@public.gmane.org>
2018-01-30 19:46                                   ` Jason Gunthorpe
     [not found]                                     ` <20180130194639.GJ17053-uk2M96/98Pc@public.gmane.org>
2018-01-30 20:42                                       ` Bart Van Assche
     [not found]                                         ` <1517344962.2589.39.camel-Sjgp3cTcYWE@public.gmane.org>
2018-01-30 20:48                                           ` Jason Gunthorpe
     [not found]                                             ` <20180130204840.GK17053-uk2M96/98Pc@public.gmane.org>
2018-01-30 21:22                                               ` Bart Van Assche
     [not found]                                                 ` <1517347322.2589.58.camel-Sjgp3cTcYWE@public.gmane.org>
2018-01-30 21:33                                                   ` Laurence Oberman
     [not found]                                                     ` <1517347999.15224.2.camel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2018-01-30 21:40                                                       ` Bart Van Assche
     [not found]                                                         ` <1517348412.2589.60.camel-Sjgp3cTcYWE@public.gmane.org>
2018-01-30 21:42                                                           ` Jason Gunthorpe
     [not found]                                                             ` <20180130214227.GM17053-uk2M96/98Pc@public.gmane.org>
2018-01-30 21:47                                                               ` Bart Van Assche
     [not found]                                                                 ` <1517348867.2589.63.camel-Sjgp3cTcYWE@public.gmane.org>
2018-01-30 22:02                                                                   ` Jason Gunthorpe
     [not found]                                                                     ` <20180130220233.GN17053-uk2M96/98Pc@public.gmane.org>
2018-01-30 22:10                                                                       ` Bart Van Assche
2018-01-30 21:40                                                       ` Jason Gunthorpe

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=20180130033436.GA17053@ziepe.ca \
    --to=jgg-uk2m96/98pc@public.gmane.org \
    --cc=dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=leon-DgEjT+Ai2ygdnm+yROfE0A@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox