RDMA/core: Modify enum ib_gid_type and enum rdma_network_type

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>
This commit is contained in:
Avihai Horon 2020-09-23 19:50:13 +03:00 committed by Jason Gunthorpe
parent 3ff4de8f60
commit 1c15b4f2a4
8 changed files with 30 additions and 16 deletions

View 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[] = { 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_IB] = "IB/RoCE v1",
[IB_GID_TYPE_ROCE] = "IB/RoCE v1",
[IB_GID_TYPE_ROCE_UDP_ENCAP] = "RoCE v2", [IB_GID_TYPE_ROCE_UDP_ENCAP] = "RoCE v2",
}; };

View 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)) if (!rdma_is_port_valid(cma_dev->device, port))
return -EINVAL; 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); supported_gids = roce_gid_type_mask_support(cma_dev->device, port);
if (!(supported_gids & 1 << default_gid_type)) if (!(supported_gids & 1 << default_gid_type))

View File

@ -123,16 +123,17 @@ static ssize_t default_roce_mode_store(struct config_item *item,
{ {
struct cma_device *cma_dev; struct cma_device *cma_dev;
struct cma_dev_port_group *group; struct cma_dev_port_group *group;
int gid_type = ib_cache_gid_parse_type_str(buf); int gid_type;
ssize_t ret; ssize_t ret;
if (gid_type < 0)
return -EINVAL;
ret = cma_configfs_params_get(item, &cma_dev, &group); ret = cma_configfs_params_get(item, &cma_dev, &group);
if (ret) if (ret)
return 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); ret = cma_set_default_gid_type(cma_dev, group->port_num, gid_type);
cma_configfs_params_put(cma_dev); cma_configfs_params_put(cma_dev);

View File

@ -733,7 +733,7 @@ int ib_get_gids_from_rdma_hdr(const union rdma_network_hdr *hdr,
(struct in6_addr *)dgid); (struct in6_addr *)dgid);
return 0; return 0;
} else if (net_type == RDMA_NETWORK_IPV6 || } 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; *dgid = hdr->ibgrh.dgid;
*sgid = hdr->ibgrh.sgid; *sgid = hdr->ibgrh.sgid;
return 0; return 0;

View File

@ -255,7 +255,7 @@ static void handle_responder(struct ib_wc *wc, struct mlx5_cqe64 *cqe,
switch (roce_packet_type) { switch (roce_packet_type) {
case MLX5_CQE_ROCE_L3_HEADER_TYPE_GRH: case MLX5_CQE_ROCE_L3_HEADER_TYPE_GRH:
wc->network_hdr_type = RDMA_NETWORK_IB; wc->network_hdr_type = RDMA_NETWORK_ROCE_V1;
break; break;
case MLX5_CQE_ROCE_L3_HEADER_TYPE_IPV6: case MLX5_CQE_ROCE_L3_HEADER_TYPE_IPV6:
wc->network_hdr_type = RDMA_NETWORK_IPV6; wc->network_hdr_type = RDMA_NETWORK_IPV6;

View 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, unsigned int index, const union ib_gid *gid,
const struct ib_gid_attr *attr) 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; u16 vlan_id = 0xffff;
u8 roce_version = 0; u8 roce_version = 0;
u8 roce_l3_type = 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) { switch (gid_type) {
case IB_GID_TYPE_IB: case IB_GID_TYPE_ROCE:
roce_version = MLX5_ROCE_VERSION_1; roce_version = MLX5_ROCE_VERSION_1;
break; break;
case IB_GID_TYPE_ROCE_UDP_ENCAP: case IB_GID_TYPE_ROCE_UDP_ENCAP:

View File

@ -1157,7 +1157,7 @@ static inline int get_gid_info_from_table(struct ib_qp *ibqp,
SET_FIELD(qp_params->modify_flags, SET_FIELD(qp_params->modify_flags,
QED_ROCE_MODIFY_QP_VALID_ROCE_MODE, 1); QED_ROCE_MODIFY_QP_VALID_ROCE_MODE, 1);
break; break;
case RDMA_NETWORK_IB: case RDMA_NETWORK_ROCE_V1:
memcpy(&qp_params->sgid.bytes[0], &gid_attr->gid.raw[0], memcpy(&qp_params->sgid.bytes[0], &gid_attr->gid.raw[0],
sizeof(qp_params->sgid)); sizeof(qp_params->sgid));
memcpy(&qp_params->dgid.bytes[0], 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); QED_ROCE_MODIFY_QP_VALID_ROCE_MODE, 1);
qp_params->roce_mode = ROCE_V2_IPV4; qp_params->roce_mode = ROCE_V2_IPV4;
break; break;
default:
return -EINVAL;
} }
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {

View File

@ -138,10 +138,9 @@ union ib_gid {
extern union ib_gid zgid; extern union ib_gid zgid;
enum ib_gid_type { enum ib_gid_type {
/* If link layer is Ethernet, this is RoCE V1 */
IB_GID_TYPE_IB = 0, IB_GID_TYPE_IB = 0,
IB_GID_TYPE_ROCE = 0, IB_GID_TYPE_ROCE = 1,
IB_GID_TYPE_ROCE_UDP_ENCAP = 1, IB_GID_TYPE_ROCE_UDP_ENCAP = 2,
IB_GID_TYPE_SIZE IB_GID_TYPE_SIZE
}; };
@ -180,7 +179,7 @@ rdma_node_get_transport(unsigned int node_type);
enum rdma_network_type { enum rdma_network_type {
RDMA_NETWORK_IB, RDMA_NETWORK_IB,
RDMA_NETWORK_ROCE_V1 = RDMA_NETWORK_IB, RDMA_NETWORK_ROCE_V1,
RDMA_NETWORK_IPV4, RDMA_NETWORK_IPV4,
RDMA_NETWORK_IPV6 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 || if (network_type == RDMA_NETWORK_IPV4 ||
network_type == RDMA_NETWORK_IPV6) network_type == RDMA_NETWORK_IPV6)
return IB_GID_TYPE_ROCE_UDP_ENCAP; return IB_GID_TYPE_ROCE_UDP_ENCAP;
else if (network_type == RDMA_NETWORK_ROCE_V1)
/* IB_GID_TYPE_IB same as RDMA_NETWORK_ROCE_V1 */ return IB_GID_TYPE_ROCE;
return IB_GID_TYPE_IB; else
return IB_GID_TYPE_IB;
} }
static inline enum rdma_network_type 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) if (attr->gid_type == IB_GID_TYPE_IB)
return RDMA_NETWORK_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)) if (ipv6_addr_v4mapped((struct in6_addr *)&attr->gid))
return RDMA_NETWORK_IPV4; return RDMA_NETWORK_IPV4;
else else