From: Leon Romanovsky <leon@kernel.org>
To: Doug Ledford <dledford@redhat.com>, Jason Gunthorpe <jgg@mellanox.com>
Cc: Maor Gottlieb <maorg@mellanox.com>, linux-rdma@vger.kernel.org
Subject: [PATCH rdma-next v1 09/11] RDMA/mlx5: Add support to get QP resource in raw format
Date: Wed, 27 May 2020 16:54:06 +0300 [thread overview]
Message-ID: <20200527135408.480878-10-leon@kernel.org> (raw)
In-Reply-To: <20200527135408.480878-1-leon@kernel.org>
From: Maor Gottlieb <maorg@mellanox.com>
Add a generic function that use the resource dump mechanism
to get the resource data.
This patch adds the support to QP.
Signed-off-by: Maor Gottlieb <maorg@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
---
drivers/infiniband/hw/mlx5/main.c | 1 +
drivers/infiniband/hw/mlx5/mlx5_ib.h | 2 +
drivers/infiniband/hw/mlx5/restrack.c | 79 +++++++++++++++++++++++++++
3 files changed, 82 insertions(+)
diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index 66f4bca1aa5d..d81cb7139e98 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -6609,6 +6609,7 @@ static const struct ib_device_ops mlx5_ib_dev_ops = {
.drain_sq = mlx5_ib_drain_sq,
.enable_driver = mlx5_ib_enable_driver,
.fill_res_mr_entry = mlx5_ib_fill_res_mr_entry,
+ .fill_res_qp_entry = mlx5_ib_fill_res_qp_entry,
.fill_stat_mr_entry = mlx5_ib_fill_stat_mr_entry,
.get_dev_fw_str = get_dev_fw_str,
.get_dma_mr = mlx5_ib_get_dma_mr,
diff --git a/drivers/infiniband/hw/mlx5/mlx5_ib.h b/drivers/infiniband/hw/mlx5/mlx5_ib.h
index 270a9f1c92c4..8959db266a35 100644
--- a/drivers/infiniband/hw/mlx5/mlx5_ib.h
+++ b/drivers/infiniband/hw/mlx5/mlx5_ib.h
@@ -1385,6 +1385,8 @@ void mlx5_ib_put_native_port_mdev(struct mlx5_ib_dev *dev,
u8 port_num);
int mlx5_ib_fill_res_mr_entry(struct sk_buff *msg, struct ib_mr *ib_mr,
bool raw);
+int mlx5_ib_fill_res_qp_entry(struct sk_buff *msg, struct ib_qp *ibqp,
+ bool raw);
int mlx5_ib_fill_stat_mr_entry(struct sk_buff *msg, struct ib_mr *ib_mr);
extern const struct uapi_definition mlx5_ib_devx_defs[];
diff --git a/drivers/infiniband/hw/mlx5/restrack.c b/drivers/infiniband/hw/mlx5/restrack.c
index 32b1bdf5768b..cf2322109f88 100644
--- a/drivers/infiniband/hw/mlx5/restrack.c
+++ b/drivers/infiniband/hw/mlx5/restrack.c
@@ -4,10 +4,79 @@
*/
#include <uapi/rdma/rdma_netlink.h>
+#include <linux/mlx5/rsc_dump.h>
#include <rdma/ib_umem_odp.h>
#include <rdma/restrack.h>
#include "mlx5_ib.h"
+#define MAX_DUMP_SIZE 1024
+
+static int dump_rsc(struct mlx5_core_dev *dev, enum mlx5_sgmt_type type,
+ int index, void *data, int *data_len)
+{
+ struct mlx5_core_dev *mdev = dev;
+ struct mlx5_rsc_dump_cmd *cmd;
+ struct mlx5_rsc_key key = {};
+ struct page *page;
+ int offset = 0;
+ int err = 0;
+ int cmd_err;
+ int size;
+
+ page = alloc_page(GFP_KERNEL);
+ if (!page)
+ return -ENOMEM;
+
+ key.size = PAGE_SIZE;
+ key.rsc = type;
+ key.index1 = index;
+ key.num_of_obj1 = 1;
+
+ cmd = mlx5_rsc_dump_cmd_create(mdev, &key);
+ if (IS_ERR(cmd)) {
+ err = PTR_ERR(cmd);
+ goto free_page;
+ }
+
+ do {
+ cmd_err = mlx5_rsc_dump_next(mdev, cmd, page, &size);
+ if (cmd_err < 0 || size + offset > MAX_DUMP_SIZE) {
+ err = cmd_err;
+ goto destroy_cmd;
+ }
+ memcpy(data + offset, page_address(page), size);
+ offset += size;
+ } while (cmd_err > 0);
+ *data_len = offset;
+
+destroy_cmd:
+ mlx5_rsc_dump_cmd_destroy(cmd);
+free_page:
+ __free_page(page);
+ return err;
+}
+
+static int fill_res_raw(struct sk_buff *msg, struct mlx5_ib_dev *dev,
+ enum mlx5_sgmt_type type, u32 key)
+{
+ int len = 0;
+ void *data;
+ int err;
+
+ data = kzalloc(MAX_DUMP_SIZE, GFP_KERNEL);
+ if (!data)
+ return -ENOMEM;
+
+ err = dump_rsc(dev->mdev, type, key, data, &len);
+ if (err)
+ goto out;
+
+ err = nla_put(msg, RDMA_NLDEV_ATTR_RES_RAW, len, data);
+out:
+ kfree(data);
+ return err;
+}
+
int mlx5_ib_fill_stat_mr_entry(struct sk_buff *msg,
struct ib_mr *ibmr)
{
@@ -71,3 +140,13 @@ int mlx5_ib_fill_res_mr_entry(struct sk_buff *msg,
nla_nest_cancel(msg, table_attr);
return -EMSGSIZE;
}
+
+int mlx5_ib_fill_res_qp_entry(struct sk_buff *msg, struct ib_qp *ibqp, bool raw)
+{
+ struct mlx5_ib_dev *dev = to_mdev(ibqp->device);
+
+ if (!raw)
+ return 0;
+ return fill_res_raw(msg, dev, MLX5_SGMT_TYPE_PRM_QUERY_QP,
+ ibqp->qp_num);
+}
--
2.26.2
next prev parent reply other threads:[~2020-05-27 13:54 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-27 13:53 [PATCH rdma-next v1 00/11] RAW format dumps through RDMAtool Leon Romanovsky
2020-05-27 13:53 ` [PATCH mlx5-next v1 01/11] net/mlx5: Export resource dump interface Leon Romanovsky
2020-05-27 13:53 ` [PATCH mlx5-next v1 02/11] net/mlx5: Add support in query QP, CQ and MKEY segments Leon Romanovsky
2020-05-27 13:54 ` [PATCH rdma-next v1 03/11] RDMA/core: Don't call fill_res_entry for PD Leon Romanovsky
2020-05-27 13:54 ` [PATCH rdma-next v1 04/11] RDMA: Add dedicated MR resource tracker function Leon Romanovsky
2020-05-27 13:54 ` [PATCH rdma-next v1 05/11] RDMA: Add dedicated CQ " Leon Romanovsky
2020-05-27 13:54 ` [PATCH rdma-next v1 06/11] RDMA: Add dedicated QP " Leon Romanovsky
2020-05-27 13:54 ` [PATCH rdma-next v1 07/11] RDMA: Add dedicated CM_ID " Leon Romanovsky
2020-05-27 13:54 ` [PATCH rdma-next v1 08/11] RDMA: Add support to dump resource tracker in RAW format Leon Romanovsky
2020-05-27 13:54 ` Leon Romanovsky [this message]
2020-05-27 13:54 ` [PATCH rdma-next v1 10/11] RDMA/mlx5: Add support to get CQ resource " Leon Romanovsky
2020-05-27 13:54 ` [PATCH rdma-next v1 11/11] RDMA/mlx5: Add support to get MR " Leon Romanovsky
2020-05-29 23:31 ` Jason Gunthorpe
2020-05-31 9:54 ` Leon Romanovsky
2020-06-01 12:26 ` Jason Gunthorpe
2020-06-02 6:21 ` Leon Romanovsky
2020-06-02 12:27 ` Jason Gunthorpe
2020-06-02 13:23 ` Leon Romanovsky
2020-06-07 8:47 ` Maor Gottlieb
2020-06-08 11:46 ` Jason Gunthorpe
2020-06-09 8:27 ` Maor Gottlieb
2020-06-09 11:42 ` 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=20200527135408.480878-10-leon@kernel.org \
--to=leon@kernel.org \
--cc=dledford@redhat.com \
--cc=jgg@mellanox.com \
--cc=linux-rdma@vger.kernel.org \
--cc=maorg@mellanox.com \
/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;
as well as URLs for NNTP newsgroup(s).