IB/mlx5: Move mlx5_port_caps from mlx5_core_dev to mlx5_ib_dev
authorParav Pandit <parav@nvidia.com>
Wed, 3 Feb 2021 13:01:29 +0000 (15:01 +0200)
committerJason Gunthorpe <jgg@nvidia.com>
Fri, 5 Feb 2021 16:06:00 +0000 (12:06 -0400)
mlx5_port_caps are RDMA specific capabilities. These are not used by the
mlx5_core_device at all. Move them to mlx5_ib_dev where it is used and
reduce the scope of it to multiple drivers.

Link: https://lore.kernel.org/r/20210203130133.4057329-2-leon@kernel.org
Signed-off-by: Parav Pandit <parav@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/hw/mlx5/mad.c
drivers/infiniband/hw/mlx5/main.c
drivers/infiniband/hw/mlx5/mlx5_ib.h
drivers/infiniband/hw/mlx5/qp.c
drivers/infiniband/hw/mlx5/wr.c
include/linux/mlx5/driver.h

index 53dec60632457a275cfb4116ce6b5f0a5fd6163a..e9d0a52695821bdeb2a52a55b999a1ce55c2ca8e 100644 (file)
@@ -48,7 +48,7 @@ static bool can_do_mad_ifc(struct mlx5_ib_dev *dev, u8 port_num,
        if (in_mad->mad_hdr.mgmt_class != IB_MGMT_CLASS_SUBN_LID_ROUTED &&
            in_mad->mad_hdr.mgmt_class != IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE)
                return true;
-       return dev->mdev->port_caps[port_num - 1].has_smi;
+       return dev->port_caps[port_num - 1].has_smi;
 }
 
 static int mlx5_MAD_IFC(struct mlx5_ib_dev *dev, int ignore_mkey,
@@ -299,7 +299,7 @@ int mlx5_query_ext_port_caps(struct mlx5_ib_dev *dev, u8 port)
 
        packet_error = be16_to_cpu(out_mad->status);
 
-       dev->mdev->port_caps[port - 1].ext_port_cap = (!err && !packet_error) ?
+       dev->port_caps[port - 1].ext_port_cap = (!err && !packet_error) ?
                MLX_EXT_PORT_CAP_FLAG_EXTENDED_PORT_INFO : 0;
 
 out:
@@ -549,7 +549,7 @@ int mlx5_query_mad_ifc_port(struct ib_device *ibdev, u8 port,
        props->port_cap_flags   = be32_to_cpup((__be32 *)(out_mad->data + 20));
        props->gid_tbl_len      = out_mad->data[50];
        props->max_msg_sz       = 1 << MLX5_CAP_GEN(mdev, log_max_msg);
-       props->pkey_tbl_len     = mdev->port_caps[port - 1].pkey_table_len;
+       props->pkey_tbl_len     = dev->port_caps[port - 1].pkey_table_len;
        props->bad_pkey_cntr    = be16_to_cpup((__be16 *)(out_mad->data + 46));
        props->qkey_viol_cntr   = be16_to_cpup((__be16 *)(out_mad->data + 48));
        props->active_width     = out_mad->data[31] & 0xf;
@@ -589,7 +589,7 @@ int mlx5_query_mad_ifc_port(struct ib_device *ibdev, u8 port,
 
        /* If reported active speed is QDR, check if is FDR-10 */
        if (props->active_speed == 4) {
-               if (mdev->port_caps[port - 1].ext_port_cap &
+               if (dev->port_caps[port - 1].ext_port_cap &
                    MLX_EXT_PORT_CAP_FLAG_EXTENDED_PORT_INFO) {
                        init_query_mad(in_mad);
                        in_mad->attr_id = MLX5_ATTR_EXTENDED_PORT_INFO;
index 40fb86db33769aa43128fea17333dd21a805b43f..d2f185ae2b9cbc9df0567d096f44ee366ecf2307 100644 (file)
@@ -2946,8 +2946,8 @@ static int set_has_smi_cap(struct mlx5_ib_dev *dev)
        int err;
        int port;
 
-       for (port = 1; port <= ARRAY_SIZE(dev->mdev->port_caps); port++) {
-               dev->mdev->port_caps[port - 1].has_smi = false;
+       for (port = 1; port <= ARRAY_SIZE(dev->port_caps); port++) {
+               dev->port_caps[port - 1].has_smi = false;
                if (MLX5_CAP_GEN(dev->mdev, port_type) ==
                    MLX5_CAP_PORT_TYPE_IB) {
                        if (MLX5_CAP_GEN(dev->mdev, ib_virt)) {
@@ -2959,10 +2959,10 @@ static int set_has_smi_cap(struct mlx5_ib_dev *dev)
                                                    port, err);
                                        return err;
                                }
-                               dev->mdev->port_caps[port - 1].has_smi =
+                               dev->port_caps[port - 1].has_smi =
                                        vport_ctx.has_smi;
                        } else {
-                               dev->mdev->port_caps[port - 1].has_smi = true;
+                               dev->port_caps[port - 1].has_smi = true;
                        }
                }
        }
@@ -3004,10 +3004,8 @@ static int __get_port_caps(struct mlx5_ib_dev *dev, u8 port)
                goto out;
        }
 
-       dev->mdev->port_caps[port - 1].pkey_table_len =
-                                       dprops->max_pkeys;
-       dev->mdev->port_caps[port - 1].gid_table_len =
-                                       pprops->gid_tbl_len;
+       dev->port_caps[port - 1].pkey_table_len = dprops->max_pkeys;
+       dev->port_caps[port - 1].gid_table_len = pprops->gid_tbl_len;
        mlx5_ib_dbg(dev, "port %d: pkey_table_len %d, gid_table_len %d\n",
                    port, dprops->max_pkeys, pprops->gid_tbl_len);
 
index 2fd2927abe4586c6f1b92afe9cc770bf3228dfd4..c2f91c15b973e02f6c1f8c8b8dd08a2eb5c40b34 100644 (file)
@@ -1036,6 +1036,13 @@ struct mlx5_var_table {
        u64 num_var_hw_entries;
 };
 
+struct mlx5_port_caps {
+       int gid_table_len;
+       int pkey_table_len;
+       bool has_smi;
+       u8 ext_port_cap;
+};
+
 struct mlx5_ib_dev {
        struct ib_device                ib_dev;
        struct mlx5_core_dev            *mdev;
@@ -1096,6 +1103,7 @@ struct mlx5_ib_dev {
        struct mlx5_var_table var_table;
 
        struct xarray sig_mrs;
+       struct mlx5_port_caps port_caps[MLX5_MAX_PORTS];
 };
 
 static inline struct mlx5_ib_cq *to_mibcq(struct mlx5_core_cq *mcq)
index 88be94215708a440d1644cf12e9645e52616ecce..5274349dd998f9e1c3894e058406d29f478cf371 100644 (file)
@@ -3177,10 +3177,10 @@ static int mlx5_set_path(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,
 
        if (ah_flags & IB_AH_GRH) {
                if (grh->sgid_index >=
-                   dev->mdev->port_caps[port - 1].gid_table_len) {
+                   dev->port_caps[port - 1].gid_table_len) {
                        pr_err("sgid_index (%u) too large. max is %d\n",
                               grh->sgid_index,
-                              dev->mdev->port_caps[port - 1].gid_table_len);
+                              dev->port_caps[port - 1].gid_table_len);
                        return -EINVAL;
                }
        }
@@ -4311,7 +4311,7 @@ int mlx5_ib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
        if (attr_mask & IB_QP_PKEY_INDEX) {
                port = attr_mask & IB_QP_PORT ? attr->port_num : qp->port;
                if (attr->pkey_index >=
-                   dev->mdev->port_caps[port - 1].pkey_table_len) {
+                   dev->port_caps[port - 1].pkey_table_len) {
                        mlx5_ib_dbg(dev, "invalid pkey index %d\n",
                                    attr->pkey_index);
                        goto out;
index d6038fb6c50c655aa3048479ef6ad6d343113397..cf2852cba45c30c05ae39122b3db9aa4e7c39728 100644 (file)
@@ -1369,7 +1369,7 @@ int mlx5_ib_post_send(struct ib_qp *ibqp, const struct ib_send_wr *wr,
                        handle_qpt_uc(wr, &seg, &size);
                        break;
                case IB_QPT_SMI:
-                       if (unlikely(!mdev->port_caps[qp->port - 1].has_smi)) {
+                       if (unlikely(!dev->port_caps[qp->port - 1].has_smi)) {
                                mlx5_ib_warn(dev, "Send SMP MADs is not allowed\n");
                                err = -EPERM;
                                *bad_wr = wr;
index f93bfe7473aa7c15e3da3630fffd5786bf21ed3f..11558c2e99f01eb1b9f0986ad49673223c1849e7 100644 (file)
@@ -305,13 +305,6 @@ struct mlx5_cmd {
        struct mlx5_cmd_stats *stats;
 };
 
-struct mlx5_port_caps {
-       int     gid_table_len;
-       int     pkey_table_len;
-       u8      ext_port_cap;
-       bool    has_smi;
-};
-
 struct mlx5_cmd_mailbox {
        void           *buf;
        dma_addr_t      dma;
@@ -694,7 +687,6 @@ struct mlx5_core_dev {
        u8                      rev_id;
        char                    board_id[MLX5_BOARD_ID_LEN];
        struct mlx5_cmd         cmd;
-       struct mlx5_port_caps   port_caps[MLX5_MAX_PORTS];
        struct {
                u32 hca_cur[MLX5_CAP_NUM][MLX5_UN_SZ_DW(hca_cap_union)];
                u32 hca_max[MLX5_CAP_NUM][MLX5_UN_SZ_DW(hca_cap_union)];