Skip to content

Commit

Permalink
RDMA/core: Add support to dump SRQ resource in RAW format
Browse files Browse the repository at this point in the history
Add support to dump SRQ resource in raw format. It enable drivers to
return the entire device specific SRQ context without setting each
field separately.

Example:
$ rdma res show srq -r
dev hns3 149000...

$ rdma res show srq -j -r
[{"ifindex":0,"ifname":"hns3","data":[149,0,0,...]}]

Signed-off-by: wenglianfa <wenglianfa@huawei.com>
Link: https://lore.kernel.org/r/20230918131110.3987498-3-huangjunxian6@hisilicon.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
  • Loading branch information
wenglianfa authored and Leon Romanovsky committed Sep 20, 2023
1 parent 0e32d7d commit aebf814
Showing 4 changed files with 21 additions and 0 deletions.
1 change: 1 addition & 0 deletions drivers/infiniband/core/device.c
Original file line number Diff line number Diff line change
@@ -2652,6 +2652,7 @@ void ib_set_device_ops(struct ib_device *dev, const struct ib_device_ops *ops)
SET_DEVICE_OP(dev_ops, fill_res_qp_entry);
SET_DEVICE_OP(dev_ops, fill_res_qp_entry_raw);
SET_DEVICE_OP(dev_ops, fill_res_srq_entry);
SET_DEVICE_OP(dev_ops, fill_res_srq_entry_raw);
SET_DEVICE_OP(dev_ops, fill_stat_mr_entry);
SET_DEVICE_OP(dev_ops, get_dev_fw_str);
SET_DEVICE_OP(dev_ops, get_dma_mr);
17 changes: 17 additions & 0 deletions drivers/infiniband/core/nldev.c
Original file line number Diff line number Diff line change
@@ -850,6 +850,17 @@ static int fill_res_srq_entry(struct sk_buff *msg, bool has_cap_net_admin,
return -EMSGSIZE;
}

static int fill_res_srq_raw_entry(struct sk_buff *msg, bool has_cap_net_admin,
struct rdma_restrack_entry *res, uint32_t port)
{
struct ib_srq *srq = container_of(res, struct ib_srq, res);
struct ib_device *dev = srq->device;

if (!dev->ops.fill_res_srq_entry_raw)
return -EINVAL;
return dev->ops.fill_res_srq_entry_raw(msg, srq);
}

static int fill_stat_counter_mode(struct sk_buff *msg,
struct rdma_counter *counter)
{
@@ -1659,6 +1670,7 @@ RES_GET_FUNCS(mr_raw, RDMA_RESTRACK_MR);
RES_GET_FUNCS(counter, RDMA_RESTRACK_COUNTER);
RES_GET_FUNCS(ctx, RDMA_RESTRACK_CTX);
RES_GET_FUNCS(srq, RDMA_RESTRACK_SRQ);
RES_GET_FUNCS(srq_raw, RDMA_RESTRACK_SRQ);

static LIST_HEAD(link_ops);
static DECLARE_RWSEM(link_ops_rwsem);
@@ -2564,6 +2576,11 @@ static const struct rdma_nl_cbs nldev_cb_table[RDMA_NLDEV_NUM_OPS] = {
.dump = nldev_res_get_mr_raw_dumpit,
.flags = RDMA_NL_ADMIN_PERM,
},
[RDMA_NLDEV_CMD_RES_SRQ_GET_RAW] = {
.doit = nldev_res_get_srq_raw_doit,
.dump = nldev_res_get_srq_raw_dumpit,
.flags = RDMA_NL_ADMIN_PERM,
},
[RDMA_NLDEV_CMD_STAT_GET_STATUS] = {
.doit = nldev_stat_get_counter_status_doit,
},
1 change: 1 addition & 0 deletions include/rdma/ib_verbs.h
Original file line number Diff line number Diff line change
@@ -2609,6 +2609,7 @@ struct ib_device_ops {
int (*fill_res_qp_entry_raw)(struct sk_buff *msg, struct ib_qp *ibqp);
int (*fill_res_cm_id_entry)(struct sk_buff *msg, struct rdma_cm_id *id);
int (*fill_res_srq_entry)(struct sk_buff *msg, struct ib_srq *ib_srq);
int (*fill_res_srq_entry_raw)(struct sk_buff *msg, struct ib_srq *ib_srq);

/* Device lifecycle callbacks */
/*
2 changes: 2 additions & 0 deletions include/uapi/rdma/rdma_netlink.h
Original file line number Diff line number Diff line change
@@ -299,6 +299,8 @@ enum rdma_nldev_command {

RDMA_NLDEV_CMD_STAT_GET_STATUS,

RDMA_NLDEV_CMD_RES_SRQ_GET_RAW,

RDMA_NLDEV_NUM_OPS
};

0 comments on commit aebf814

Please sign in to comment.