Skip to content

Commit

Permalink
RDMA/bnxt_re: Support raw data query for each resources
Browse files Browse the repository at this point in the history
Support interfaces to get the raw data for each of
the resources. Use this interface to get some of the
HW structures from active resources.

Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
Link: https://patch.msgid.link/1730428483-17841-4-git-send-email-selvin.xavier@broadcom.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
  • Loading branch information
Kashyap Desai authored and Leon Romanovsky committed Nov 4, 2024
1 parent 3b72946 commit e4bcf8e
Showing 1 changed file with 118 additions and 0 deletions.
118 changes: 118 additions & 0 deletions drivers/infiniband/hw/bnxt_re/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -903,6 +903,35 @@ static int bnxt_re_fill_res_mr_entry(struct sk_buff *msg, struct ib_mr *ib_mr)
return -EMSGSIZE;
}

static int bnxt_re_fill_res_mr_entry_raw(struct sk_buff *msg, struct ib_mr *ib_mr)
{
struct bnxt_re_dev *rdev;
struct bnxt_re_mr *mr;
int err, len;
void *data;

mr = container_of(ib_mr, struct bnxt_re_mr, ib_mr);
rdev = mr->rdev;

err = bnxt_re_read_context_allowed(rdev);
if (err)
return err;

len = bnxt_qplib_is_chip_gen_p7(rdev->chip_ctx) ? BNXT_RE_CONTEXT_TYPE_MRW_SIZE_P7 :
BNXT_RE_CONTEXT_TYPE_MRW_SIZE_P5;
data = kzalloc(len, GFP_KERNEL);
if (!data)
return -ENOMEM;

err = bnxt_qplib_read_context(&rdev->rcfw, CMDQ_READ_CONTEXT_TYPE_MRW,
mr->qplib_mr.lkey, len, data);
if (!err)
err = nla_put(msg, RDMA_NLDEV_ATTR_RES_RAW, len, data);

kfree(data);
return err;
}

static int bnxt_re_fill_res_cq_entry(struct sk_buff *msg, struct ib_cq *ib_cq)
{
struct bnxt_qplib_hwq *cq_hwq;
Expand Down Expand Up @@ -933,6 +962,36 @@ static int bnxt_re_fill_res_cq_entry(struct sk_buff *msg, struct ib_cq *ib_cq)
return -EMSGSIZE;
}

static int bnxt_re_fill_res_cq_entry_raw(struct sk_buff *msg, struct ib_cq *ib_cq)
{
struct bnxt_re_dev *rdev;
struct bnxt_re_cq *cq;
int err, len;
void *data;

cq = container_of(ib_cq, struct bnxt_re_cq, ib_cq);
rdev = cq->rdev;

err = bnxt_re_read_context_allowed(rdev);
if (err)
return err;

len = bnxt_qplib_is_chip_gen_p7(rdev->chip_ctx) ? BNXT_RE_CONTEXT_TYPE_CQ_SIZE_P7 :
BNXT_RE_CONTEXT_TYPE_CQ_SIZE_P5;
data = kzalloc(len, GFP_KERNEL);
if (!data)
return -ENOMEM;

err = bnxt_qplib_read_context(&rdev->rcfw,
CMDQ_READ_CONTEXT_TYPE_CQ,
cq->qplib_cq.id, len, data);
if (!err)
err = nla_put(msg, RDMA_NLDEV_ATTR_RES_RAW, len, data);

kfree(data);
return err;
}

static int bnxt_re_fill_res_qp_entry(struct sk_buff *msg, struct ib_qp *ib_qp)
{
struct bnxt_qplib_qp *qplib_qp;
Expand Down Expand Up @@ -977,6 +1036,31 @@ static int bnxt_re_fill_res_qp_entry(struct sk_buff *msg, struct ib_qp *ib_qp)
return -EMSGSIZE;
}

static int bnxt_re_fill_res_qp_entry_raw(struct sk_buff *msg, struct ib_qp *ibqp)
{
struct bnxt_re_dev *rdev = to_bnxt_re_dev(ibqp->device, ibdev);
int err, len;
void *data;

err = bnxt_re_read_context_allowed(rdev);
if (err)
return err;

len = bnxt_qplib_is_chip_gen_p7(rdev->chip_ctx) ? BNXT_RE_CONTEXT_TYPE_QPC_SIZE_P7 :
BNXT_RE_CONTEXT_TYPE_QPC_SIZE_P5;
data = kzalloc(len, GFP_KERNEL);
if (!data)
return -ENOMEM;

err = bnxt_qplib_read_context(&rdev->rcfw, CMDQ_READ_CONTEXT_TYPE_QPC,
ibqp->qp_num, len, data);
if (!err)
err = nla_put(msg, RDMA_NLDEV_ATTR_RES_RAW, len, data);

kfree(data);
return err;
}

static int bnxt_re_fill_res_srq_entry(struct sk_buff *msg, struct ib_srq *ib_srq)
{
struct nlattr *table_attr;
Expand All @@ -1003,6 +1087,36 @@ static int bnxt_re_fill_res_srq_entry(struct sk_buff *msg, struct ib_srq *ib_srq
return -EMSGSIZE;
}

static int bnxt_re_fill_res_srq_entry_raw(struct sk_buff *msg, struct ib_srq *ib_srq)
{
struct bnxt_re_dev *rdev;
struct bnxt_re_srq *srq;
int err, len;
void *data;

srq = container_of(ib_srq, struct bnxt_re_srq, ib_srq);
rdev = srq->rdev;

err = bnxt_re_read_context_allowed(rdev);
if (err)
return err;

len = bnxt_qplib_is_chip_gen_p7(rdev->chip_ctx) ? BNXT_RE_CONTEXT_TYPE_SRQ_SIZE_P7 :
BNXT_RE_CONTEXT_TYPE_SRQ_SIZE_P5;

data = kzalloc(len, GFP_KERNEL);
if (!data)
return -ENOMEM;

err = bnxt_qplib_read_context(&rdev->rcfw, CMDQ_READ_CONTEXT_TYPE_SRQ,
srq->qplib_srq.id, len, data);
if (!err)
err = nla_put(msg, RDMA_NLDEV_ATTR_RES_RAW, len, data);

kfree(data);
return err;
}

static const struct ib_device_ops bnxt_re_dev_ops = {
.owner = THIS_MODULE,
.driver_id = RDMA_DRIVER_BNXT_RE,
Expand Down Expand Up @@ -1063,9 +1177,13 @@ static const struct ib_device_ops bnxt_re_dev_ops = {

static const struct ib_device_ops restrack_ops = {
.fill_res_cq_entry = bnxt_re_fill_res_cq_entry,
.fill_res_cq_entry_raw = bnxt_re_fill_res_cq_entry_raw,
.fill_res_qp_entry = bnxt_re_fill_res_qp_entry,
.fill_res_qp_entry_raw = bnxt_re_fill_res_qp_entry_raw,
.fill_res_mr_entry = bnxt_re_fill_res_mr_entry,
.fill_res_mr_entry_raw = bnxt_re_fill_res_mr_entry_raw,
.fill_res_srq_entry = bnxt_re_fill_res_srq_entry,
.fill_res_srq_entry_raw = bnxt_re_fill_res_srq_entry_raw,
};

static int bnxt_re_register_ib(struct bnxt_re_dev *rdev)
Expand Down

0 comments on commit e4bcf8e

Please sign in to comment.