mirror of
https://github.com/torvalds/linux.git
synced 2024-11-13 23:51:39 +00:00
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:
parent
3ff4de8f60
commit
1c15b4f2a4
@ -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",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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))
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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:
|
||||||
|
@ -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++) {
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user