RDMA/core: Modify enum ib_gid_type and enum rdma_network_type
authorAvihai Horon <avihaih@nvidia.com>
Wed, 23 Sep 2020 16:50:13 +0000 (19:50 +0300)
committerJason Gunthorpe <jgg@nvidia.com>
Fri, 2 Oct 2020 00:20:11 +0000 (21:20 -0300)
Separate IB_GID_TYPE_IB and IB_GID_TYPE_ROCE to two different values, so
enum ib_gid_type will match the gid types of the new query GID table API
which will be introduced in the following patches.

This change in enum ib_gid_type requires to change also enum
rdma_network_type by separating RDMA_NETWORK_IB and RDMA_NETWORK_ROCE_V1
values.

Link: https://lore.kernel.org/r/20200923165015.2491894-3-leon@kernel.org
Signed-off-by: Avihai Horon <avihaih@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/core/cache.c
drivers/infiniband/core/cma.c
drivers/infiniband/core/cma_configfs.c
drivers/infiniband/core/verbs.c
drivers/infiniband/hw/mlx5/cq.c
drivers/infiniband/hw/mlx5/main.c
drivers/infiniband/hw/qedr/verbs.c
include/rdma/ib_verbs.h

index 6079f1f7e67834dd44fe06ec025b0e466d87fb3d..cf49ac0b0aa6906dfab93537dc73f2d7e492802c 100644 (file)
@@ -133,7 +133,11 @@ static void dispatch_gid_change_event(struct ib_device *ib_dev, u8 port)
 }
 
 static const char * const gid_type_str[] = {
+       /* IB/RoCE v1 value is set for IB_GID_TYPE_IB and IB_GID_TYPE_ROCE for
+        * user space compatibility reasons.
+        */
        [IB_GID_TYPE_IB]        = "IB/RoCE v1",
+       [IB_GID_TYPE_ROCE]      = "IB/RoCE v1",
        [IB_GID_TYPE_ROCE_UDP_ENCAP]    = "RoCE v2",
 };
 
index 6419b798cd2eba016f5e82ad6f391902918c8406..09a84475588274afd2d1c3dac78711b5cde2c9be 100644 (file)
@@ -304,6 +304,10 @@ int cma_set_default_gid_type(struct cma_device *cma_dev,
        if (!rdma_is_port_valid(cma_dev->device, port))
                return -EINVAL;
 
+       if (default_gid_type == IB_GID_TYPE_IB &&
+           rdma_protocol_roce_eth_encap(cma_dev->device, port))
+               default_gid_type = IB_GID_TYPE_ROCE;
+
        supported_gids = roce_gid_type_mask_support(cma_dev->device, port);
 
        if (!(supported_gids & 1 << default_gid_type))
index 3c1e2ca564fea1a7aa092d2ae30553215c4a725a..7ec4af2ed87abb784919aa50951e32ce4915d9c2 100644 (file)
@@ -123,16 +123,17 @@ static ssize_t default_roce_mode_store(struct config_item *item,
 {
        struct cma_device *cma_dev;
        struct cma_dev_port_group *group;
-       int gid_type = ib_cache_gid_parse_type_str(buf);
+       int gid_type;
        ssize_t ret;
 
-       if (gid_type < 0)
-               return -EINVAL;
-
        ret = cma_configfs_params_get(item, &cma_dev, &group);
        if (ret)
                return ret;
 
+       gid_type = ib_cache_gid_parse_type_str(buf);
+       if (gid_type < 0)
+               return -EINVAL;
+
        ret = cma_set_default_gid_type(cma_dev, group->port_num, gid_type);
 
        cma_configfs_params_put(cma_dev);
index 53dd8284260a9f0ba7d10932f1bbea187edb65e5..740f8454b6b461d56d3439dc3e93809f2d28180e 100644 (file)
@@ -733,7 +733,7 @@ int ib_get_gids_from_rdma_hdr(const union rdma_network_hdr *hdr,
                                       (struct in6_addr *)dgid);
                return 0;
        } else if (net_type == RDMA_NETWORK_IPV6 ||
-                  net_type == RDMA_NETWORK_IB) {
+                  net_type == RDMA_NETWORK_IB || RDMA_NETWORK_ROCE_V1) {
                *dgid = hdr->ibgrh.dgid;
                *sgid = hdr->ibgrh.sgid;
                return 0;
index 35e5bbb44d3d8e8bd332e20ed1d24d9a1ea399c1..fb62f1d04afa707683c7a047c7c62b0abda5170b 100644 (file)
@@ -255,7 +255,7 @@ static void handle_responder(struct ib_wc *wc, struct mlx5_cqe64 *cqe,
 
        switch (roce_packet_type) {
        case MLX5_CQE_ROCE_L3_HEADER_TYPE_GRH:
-               wc->network_hdr_type = RDMA_NETWORK_IB;
+               wc->network_hdr_type = RDMA_NETWORK_ROCE_V1;
                break;
        case MLX5_CQE_ROCE_L3_HEADER_TYPE_IPV6:
                wc->network_hdr_type = RDMA_NETWORK_IPV6;
index db602ee8f7301036ade8557f20c2a87bc5b3a37b..7082172b5b61a12248cd286458ee7a9223630554 100644 (file)
@@ -546,7 +546,7 @@ static int set_roce_addr(struct mlx5_ib_dev *dev, u8 port_num,
                         unsigned int index, const union ib_gid *gid,
                         const struct ib_gid_attr *attr)
 {
-       enum ib_gid_type gid_type = IB_GID_TYPE_IB;
+       enum ib_gid_type gid_type = IB_GID_TYPE_ROCE;
        u16 vlan_id = 0xffff;
        u8 roce_version = 0;
        u8 roce_l3_type = 0;
@@ -561,7 +561,7 @@ static int set_roce_addr(struct mlx5_ib_dev *dev, u8 port_num,
        }
 
        switch (gid_type) {
-       case IB_GID_TYPE_IB:
+       case IB_GID_TYPE_ROCE:
                roce_version = MLX5_ROCE_VERSION_1;
                break;
        case IB_GID_TYPE_ROCE_UDP_ENCAP:
index b5603b3ed6a4ebc1bd359e4d9c2ae82ad215bffe..019642ff24a704a0e06ad282a866a30730513651 100644 (file)
@@ -1157,7 +1157,7 @@ static inline int get_gid_info_from_table(struct ib_qp *ibqp,
                SET_FIELD(qp_params->modify_flags,
                          QED_ROCE_MODIFY_QP_VALID_ROCE_MODE, 1);
                break;
-       case RDMA_NETWORK_IB:
+       case RDMA_NETWORK_ROCE_V1:
                memcpy(&qp_params->sgid.bytes[0], &gid_attr->gid.raw[0],
                       sizeof(qp_params->sgid));
                memcpy(&qp_params->dgid.bytes[0],
@@ -1177,6 +1177,8 @@ static inline int get_gid_info_from_table(struct ib_qp *ibqp,
                          QED_ROCE_MODIFY_QP_VALID_ROCE_MODE, 1);
                qp_params->roce_mode = ROCE_V2_IPV4;
                break;
+       default:
+               return -EINVAL;
        }
 
        for (i = 0; i < 4; i++) {
index 5ad997346f7feaa4c64e8e1e06a7f3133fc98fd4..3b61fba531d042362c41434ef6094fe05f413c6b 100644 (file)
@@ -138,10 +138,9 @@ union ib_gid {
 extern union ib_gid zgid;
 
 enum ib_gid_type {
-       /* If link layer is Ethernet, this is RoCE V1 */
        IB_GID_TYPE_IB        = 0,
-       IB_GID_TYPE_ROCE      = 0,
-       IB_GID_TYPE_ROCE_UDP_ENCAP = 1,
+       IB_GID_TYPE_ROCE      = 1,
+       IB_GID_TYPE_ROCE_UDP_ENCAP = 2,
        IB_GID_TYPE_SIZE
 };
 
@@ -180,7 +179,7 @@ rdma_node_get_transport(unsigned int node_type);
 
 enum rdma_network_type {
        RDMA_NETWORK_IB,
-       RDMA_NETWORK_ROCE_V1 = RDMA_NETWORK_IB,
+       RDMA_NETWORK_ROCE_V1,
        RDMA_NETWORK_IPV4,
        RDMA_NETWORK_IPV6
 };
@@ -190,9 +189,10 @@ static inline enum ib_gid_type ib_network_to_gid_type(enum rdma_network_type net
        if (network_type == RDMA_NETWORK_IPV4 ||
            network_type == RDMA_NETWORK_IPV6)
                return IB_GID_TYPE_ROCE_UDP_ENCAP;
-
-       /* IB_GID_TYPE_IB same as RDMA_NETWORK_ROCE_V1 */
-       return IB_GID_TYPE_IB;
+       else if (network_type == RDMA_NETWORK_ROCE_V1)
+               return IB_GID_TYPE_ROCE;
+       else
+               return IB_GID_TYPE_IB;
 }
 
 static inline enum rdma_network_type
@@ -201,6 +201,9 @@ rdma_gid_attr_network_type(const struct ib_gid_attr *attr)
        if (attr->gid_type == IB_GID_TYPE_IB)
                return RDMA_NETWORK_IB;
 
+       if (attr->gid_type == IB_GID_TYPE_ROCE)
+               return RDMA_NETWORK_ROCE_V1;
+
        if (ipv6_addr_v4mapped((struct in6_addr *)&attr->gid))
                return RDMA_NETWORK_IPV4;
        else