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
next prev 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