RDMA/core: Add dedicated SRQ resource tracker function
authorwenglianfa <wenglianfa@huawei.com>
Mon, 18 Sep 2023 13:11:08 +0000 (21:11 +0800)
committerLeon Romanovsky <leon@kernel.org>
Wed, 20 Sep 2023 07:50:54 +0000 (10:50 +0300)
Add a dedicated callback function for SRQ resource tracker.

Signed-off-by: wenglianfa <wenglianfa@huawei.com>
Link: https://lore.kernel.org/r/20230918131110.3987498-2-huangjunxian6@hisilicon.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/core/device.c
drivers/infiniband/core/nldev.c
include/rdma/ib_verbs.h

index 010718738d04c9e9723123fba274761d60d62751..6aa1bf48d42d824e9c55eff369e345278ffa5ebe 100644 (file)
@@ -2651,6 +2651,7 @@ void ib_set_device_ops(struct ib_device *dev, const struct ib_device_ops *ops)
        SET_DEVICE_OP(dev_ops, fill_res_mr_entry_raw);
        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_stat_mr_entry);
        SET_DEVICE_OP(dev_ops, get_dev_fw_str);
        SET_DEVICE_OP(dev_ops, get_dma_mr);
index d5d3e4f0de779ef1e82f06482287b3de355323e1..bebe6adeb533cc9e959450554b941f96e0991801 100644 (file)
@@ -818,6 +818,7 @@ static int fill_res_srq_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 (nla_put_u32(msg, RDMA_NLDEV_ATTR_RES_SRQN, srq->res.id))
                goto err;
@@ -837,7 +838,13 @@ static int fill_res_srq_entry(struct sk_buff *msg, bool has_cap_net_admin,
        if (fill_res_srq_qps(msg, srq))
                goto err;
 
-       return fill_res_name_pid(msg, res);
+       if (fill_res_name_pid(msg, res))
+               goto err;
+
+       if (dev->ops.fill_res_srq_entry)
+               return dev->ops.fill_res_srq_entry(msg, srq);
+
+       return 0;
 
 err:
        return -EMSGSIZE;
index 533ab92684d81e15439e53339ae2544cb8066373..3cbb6141a9ce0223c22791f88c0db6447e4cca9e 100644 (file)
@@ -2608,6 +2608,7 @@ struct ib_device_ops {
        int (*fill_res_qp_entry)(struct sk_buff *msg, struct ib_qp *ibqp);
        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);
 
        /* Device lifecycle callbacks */
        /*