RDMA/hns: Remove redundant DFX file and DFX ops structure
authorWenpeng Liang <liangwenpeng@huawei.com>
Mon, 22 Aug 2022 10:44:49 +0000 (18:44 +0800)
committerLeon Romanovsky <leonro@nvidia.com>
Tue, 23 Aug 2022 08:34:42 +0000 (11:34 +0300)
There is no need to use a dedicated DXF file and DFX structure to manage
the interface of the query queue context.

Link: https://lore.kernel.org/r/20220822104455.2311053-2-liangwenpeng@huawei.com
Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/hw/hns/Makefile
drivers/infiniband/hw/hns/hns_roce_device.h
drivers/infiniband/hw/hns/hns_roce_hw_v2.c
drivers/infiniband/hw/hns/hns_roce_hw_v2.h
drivers/infiniband/hw/hns/hns_roce_hw_v2_dfx.c [deleted file]
drivers/infiniband/hw/hns/hns_roce_main.c
drivers/infiniband/hw/hns/hns_roce_restrack.c

index 9f04f25..a7d2592 100644 (file)
@@ -10,6 +10,6 @@ hns-roce-objs := hns_roce_main.o hns_roce_cmd.o hns_roce_pd.o \
        hns_roce_cq.o hns_roce_alloc.o hns_roce_db.o hns_roce_srq.o hns_roce_restrack.o
 
 ifdef CONFIG_INFINIBAND_HNS_HIP08
-hns-roce-hw-v2-objs := hns_roce_hw_v2.o hns_roce_hw_v2_dfx.o $(hns-roce-objs)
+hns-roce-hw-v2-objs := hns_roce_hw_v2.o $(hns-roce-objs)
 obj-$(CONFIG_INFINIBAND_HNS) += hns-roce-hw-v2.o
 endif
index f848eed..103d505 100644 (file)
@@ -849,11 +849,6 @@ struct hns_roce_caps {
        enum cong_type  cong_type;
 };
 
-struct hns_roce_dfx_hw {
-       int (*query_cqc_info)(struct hns_roce_dev *hr_dev, u32 cqn,
-                             int *buffer);
-};
-
 enum hns_roce_device_state {
        HNS_ROCE_DEVICE_STATE_INITED,
        HNS_ROCE_DEVICE_STATE_RST_DOWN,
@@ -899,6 +894,7 @@ struct hns_roce_hw {
        int (*init_eq)(struct hns_roce_dev *hr_dev);
        void (*cleanup_eq)(struct hns_roce_dev *hr_dev);
        int (*write_srqc)(struct hns_roce_srq *srq, void *mb_buf);
+       int (*query_cqc)(struct hns_roce_dev *hr_dev, u32 cqn, void *buffer);
        const struct ib_device_ops *hns_roce_dev_ops;
        const struct ib_device_ops *hns_roce_dev_srq_ops;
 };
@@ -960,7 +956,6 @@ struct hns_roce_dev {
        void                    *priv;
        struct workqueue_struct *irq_workq;
        struct work_struct ecc_work;
-       const struct hns_roce_dfx_hw *dfx;
        u32 func_num;
        u32 is_vf;
        u32 cong_algo_tmpl_id;
@@ -1228,8 +1223,7 @@ u8 hns_get_gid_index(struct hns_roce_dev *hr_dev, u32 port, int gid_index);
 void hns_roce_handle_device_err(struct hns_roce_dev *hr_dev);
 int hns_roce_init(struct hns_roce_dev *hr_dev);
 void hns_roce_exit(struct hns_roce_dev *hr_dev);
-int hns_roce_fill_res_cq_entry(struct sk_buff *msg,
-                              struct ib_cq *ib_cq);
+int hns_roce_fill_res_cq_entry(struct sk_buff *msg, struct ib_cq *ib_cq);
 struct hns_user_mmap_entry *
 hns_roce_user_mmap_entry_insert(struct ib_ucontext *ucontext, u64 address,
                                size_t length,
index cbdafaa..979cd57 100644 (file)
@@ -5774,6 +5774,35 @@ static int hns_roce_v2_modify_cq(struct ib_cq *cq, u16 cq_count, u16 cq_period)
        return ret;
 }
 
+static int hns_roce_v2_query_cqc(struct hns_roce_dev *hr_dev, u32 cqn,
+                                void *buffer)
+{
+       struct hns_roce_v2_cq_context *context;
+       struct hns_roce_cmd_mailbox *mailbox;
+       int ret;
+
+       mailbox = hns_roce_alloc_cmd_mailbox(hr_dev);
+       if (IS_ERR(mailbox))
+               return PTR_ERR(mailbox);
+
+       context = mailbox->buf;
+       ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma,
+                               HNS_ROCE_CMD_QUERY_CQC, cqn);
+       if (ret) {
+               ibdev_err(&hr_dev->ib_dev,
+                         "failed to process cmd when querying CQ, ret = %d.\n",
+                         ret);
+               goto err_mailbox;
+       }
+
+       memcpy(buffer, context, sizeof(*context));
+
+err_mailbox:
+       hns_roce_free_cmd_mailbox(hr_dev, mailbox);
+
+       return ret;
+}
+
 static void hns_roce_irq_work_handle(struct work_struct *work)
 {
        struct hns_roce_work *irq_work =
@@ -6575,10 +6604,6 @@ static void hns_roce_v2_cleanup_eq_table(struct hns_roce_dev *hr_dev)
        kfree(eq_table->eq);
 }
 
-static const struct hns_roce_dfx_hw hns_roce_dfx_hw_v2 = {
-       .query_cqc_info = hns_roce_v2_query_cqc_info,
-};
-
 static const struct ib_device_ops hns_roce_v2_dev_ops = {
        .destroy_qp = hns_roce_v2_destroy_qp,
        .modify_cq = hns_roce_v2_modify_cq,
@@ -6619,6 +6644,7 @@ static const struct hns_roce_hw hns_roce_hw_v2 = {
        .init_eq = hns_roce_v2_init_eq_table,
        .cleanup_eq = hns_roce_v2_cleanup_eq_table,
        .write_srqc = hns_roce_v2_write_srqc,
+       .query_cqc = hns_roce_v2_query_cqc,
        .hns_roce_dev_ops = &hns_roce_v2_dev_ops,
        .hns_roce_dev_srq_ops = &hns_roce_v2_dev_srq_ops,
 };
@@ -6650,7 +6676,6 @@ static void hns_roce_hw_v2_get_cfg(struct hns_roce_dev *hr_dev,
        hr_dev->is_vf = id->driver_data;
        hr_dev->dev = &handle->pdev->dev;
        hr_dev->hw = &hns_roce_hw_v2;
-       hr_dev->dfx = &hns_roce_dfx_hw_v2;
        hr_dev->sdb_offset = ROCEE_DB_SQ_L_0_REG;
        hr_dev->odb_offset = hr_dev->sdb_offset;
 
index f96deba..49ec299 100644 (file)
@@ -1462,9 +1462,6 @@ struct hns_roce_sccc_clr_done {
        __le32 rsv[5];
 };
 
-int hns_roce_v2_query_cqc_info(struct hns_roce_dev *hr_dev, u32 cqn,
-                              int *buffer);
-
 static inline void hns_roce_write64(struct hns_roce_dev *hr_dev, __le32 val[2],
                                    void __iomem *dest)
 {
diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2_dfx.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2_dfx.c
deleted file mode 100644 (file)
index f7a75a7..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-// SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
-// Copyright (c) 2019 Hisilicon Limited.
-
-#include "hnae3.h"
-#include "hns_roce_device.h"
-#include "hns_roce_cmd.h"
-#include "hns_roce_hw_v2.h"
-
-int hns_roce_v2_query_cqc_info(struct hns_roce_dev *hr_dev, u32 cqn,
-                              int *buffer)
-{
-       struct hns_roce_v2_cq_context *cq_context;
-       struct hns_roce_cmd_mailbox *mailbox;
-       int ret;
-
-       mailbox = hns_roce_alloc_cmd_mailbox(hr_dev);
-       if (IS_ERR(mailbox))
-               return PTR_ERR(mailbox);
-
-       cq_context = mailbox->buf;
-       ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, HNS_ROCE_CMD_QUERY_CQC,
-                               cqn);
-       if (ret) {
-               dev_err(hr_dev->dev, "QUERY cqc cmd process error\n");
-               goto err_mailbox;
-       }
-
-       memcpy(buffer, cq_context, sizeof(*cq_context));
-
-err_mailbox:
-       hns_roce_free_cmd_mailbox(hr_dev, mailbox);
-
-       return ret;
-}
index c8af4eb..caf73e8 100644 (file)
@@ -515,7 +515,6 @@ static const struct ib_device_ops hns_roce_dev_ops = {
        .destroy_ah = hns_roce_destroy_ah,
        .destroy_cq = hns_roce_destroy_cq,
        .disassociate_ucontext = hns_roce_disassociate_ucontext,
-       .fill_res_cq_entry = hns_roce_fill_res_cq_entry,
        .get_dma_mr = hns_roce_get_dma_mr,
        .get_link_layer = hns_roce_get_link_layer,
        .get_port_immutable = hns_roce_port_immutable,
@@ -566,6 +565,10 @@ static const struct ib_device_ops hns_roce_dev_xrcd_ops = {
        INIT_RDMA_OBJ_SIZE(ib_xrcd, hns_roce_xrcd, ibxrcd),
 };
 
+static const struct ib_device_ops hns_roce_dev_restrack_ops = {
+       .fill_res_cq_entry = hns_roce_fill_res_cq_entry,
+};
+
 static int hns_roce_register_device(struct hns_roce_dev *hr_dev)
 {
        int ret;
@@ -605,6 +608,7 @@ static int hns_roce_register_device(struct hns_roce_dev *hr_dev)
 
        ib_set_device_ops(ib_dev, hr_dev->hw->hns_roce_dev_ops);
        ib_set_device_ops(ib_dev, &hns_roce_dev_ops);
+       ib_set_device_ops(ib_dev, &hns_roce_dev_restrack_ops);
        for (i = 0; i < hr_dev->caps.num_ports; i++) {
                if (!hr_dev->iboe.netdevs[i])
                        continue;
index 24a154d..83417be 100644 (file)
@@ -55,45 +55,34 @@ err:
        return -EMSGSIZE;
 }
 
-int hns_roce_fill_res_cq_entry(struct sk_buff *msg,
-                              struct ib_cq *ib_cq)
+int hns_roce_fill_res_cq_entry(struct sk_buff *msg, struct ib_cq *ib_cq)
 {
        struct hns_roce_dev *hr_dev = to_hr_dev(ib_cq->device);
        struct hns_roce_cq *hr_cq = to_hr_cq(ib_cq);
-       struct hns_roce_v2_cq_context *context;
+       struct hns_roce_v2_cq_context context;
        struct nlattr *table_attr;
        int ret;
 
-       if (!hr_dev->dfx->query_cqc_info)
+       if (!hr_dev->hw->query_cqc)
                return -EINVAL;
 
-       context = kzalloc(sizeof(struct hns_roce_v2_cq_context), GFP_KERNEL);
-       if (!context)
-               return -ENOMEM;
-
-       ret = hr_dev->dfx->query_cqc_info(hr_dev, hr_cq->cqn, (int *)context);
+       ret = hr_dev->hw->query_cqc(hr_dev, hr_cq->cqn, &context);
        if (ret)
-               goto err;
+               return -EINVAL;
 
        table_attr = nla_nest_start(msg, RDMA_NLDEV_ATTR_DRIVER);
-       if (!table_attr) {
-               ret = -EMSGSIZE;
-               goto err;
-       }
+       if (!table_attr)
+               return -EMSGSIZE;
 
-       if (hns_roce_fill_cq(msg, context)) {
-               ret = -EMSGSIZE;
-               goto err_cancel_table;
-       }
+       if (hns_roce_fill_cq(msg, &context))
+               goto err;
 
        nla_nest_end(msg, table_attr);
-       kfree(context);
 
        return 0;
 
-err_cancel_table:
-       nla_nest_cancel(msg, table_attr);
 err:
-       kfree(context);
-       return ret;
+       nla_nest_cancel(msg, table_attr);
+
+       return -EMSGSIZE;
 }