IB/providers: Avoid null netdev check for RoCE

Now that IB core GID cache ensures that all RoCE entries have an
associated netdev remove null checks from the provider drivers for
clarity.

Reviewed-by: Mark Bloch <markb@mellanox.com>
Signed-off-by: Parav Pandit <parav@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:
Parav Pandit 2018-04-01 15:08:23 +03:00 committed by Jason Gunthorpe
parent 14169e333e
commit 3e44e0ee08
10 changed files with 53 additions and 72 deletions

View File

@ -718,8 +718,7 @@ struct ib_ah *bnxt_re_create_ah(struct ib_pd *ib_pd,
grh->sgid_index); grh->sgid_index);
goto fail; goto fail;
} }
if (sgid_attr.ndev) dev_put(sgid_attr.ndev);
dev_put(sgid_attr.ndev);
/* Get network header type for this GID */ /* Get network header type for this GID */
nw_type = ib_gid_to_network_type(sgid_attr.gid_type, &sgid); nw_type = ib_gid_to_network_type(sgid_attr.gid_type, &sgid);
switch (nw_type) { switch (nw_type) {
@ -1697,7 +1696,7 @@ int bnxt_re_modify_qp(struct ib_qp *ib_qp, struct ib_qp_attr *qp_attr,
status = ib_get_cached_gid(&rdev->ibdev, 1, status = ib_get_cached_gid(&rdev->ibdev, 1,
grh->sgid_index, grh->sgid_index,
&sgid, &sgid_attr); &sgid, &sgid_attr);
if (!status && sgid_attr.ndev) { if (!status) {
memcpy(qp->qplib_qp.smac, sgid_attr.ndev->dev_addr, memcpy(qp->qplib_qp.smac, sgid_attr.ndev->dev_addr,
ETH_ALEN); ETH_ALEN);
dev_put(sgid_attr.ndev); dev_put(sgid_attr.ndev);

View File

@ -68,11 +68,9 @@ struct ib_ah *hns_roce_create_ah(struct ib_pd *ibpd,
return ERR_PTR(ret); return ERR_PTR(ret);
} }
if (gid_attr.ndev) { if (is_vlan_dev(gid_attr.ndev))
if (is_vlan_dev(gid_attr.ndev)) vlan_tag = vlan_dev_vlan_id(gid_attr.ndev);
vlan_tag = vlan_dev_vlan_id(gid_attr.ndev); dev_put(gid_attr.ndev);
dev_put(gid_attr.ndev);
}
if (vlan_tag < 0x1000) if (vlan_tag < 0x1000)
vlan_tag |= (rdma_ah_get_sl(ah_attr) & vlan_tag |= (rdma_ah_get_sl(ah_attr) &

View File

@ -101,12 +101,10 @@ static struct ib_ah *create_iboe_ah(struct ib_pd *pd,
if (ret) if (ret)
return ERR_PTR(ret); return ERR_PTR(ret);
eth_zero_addr(ah->av.eth.s_mac); eth_zero_addr(ah->av.eth.s_mac);
if (gid_attr.ndev) { if (is_vlan_dev(gid_attr.ndev))
if (is_vlan_dev(gid_attr.ndev)) vlan_tag = vlan_dev_vlan_id(gid_attr.ndev);
vlan_tag = vlan_dev_vlan_id(gid_attr.ndev); memcpy(ah->av.eth.s_mac, gid_attr.ndev->dev_addr, ETH_ALEN);
memcpy(ah->av.eth.s_mac, gid_attr.ndev->dev_addr, ETH_ALEN); dev_put(gid_attr.ndev);
dev_put(gid_attr.ndev);
}
if (vlan_tag < 0x1000) if (vlan_tag < 0x1000)
vlan_tag |= (rdma_ah_get_sl(ah_attr) & 7) << 13; vlan_tag |= (rdma_ah_get_sl(ah_attr) & 7) << 13;
ah->av.eth.port_pd = cpu_to_be32(to_mpd(pd)->pdn | ah->av.eth.port_pd = cpu_to_be32(to_mpd(pd)->pdn |

View File

@ -2370,7 +2370,7 @@ static int __mlx4_ib_modify_qp(void *src, enum mlx4_ib_source_type src_type,
status = ib_get_cached_gid(&dev->ib_dev, port_num, status = ib_get_cached_gid(&dev->ib_dev, port_num,
index, &gid, &gid_attr); index, &gid, &gid_attr);
if (!status && gid_attr.ndev) { if (!status) {
vlan = rdma_vlan_dev_vlan_id(gid_attr.ndev); vlan = rdma_vlan_dev_vlan_id(gid_attr.ndev);
memcpy(smac, gid_attr.ndev->dev_addr, ETH_ALEN); memcpy(smac, gid_attr.ndev->dev_addr, ETH_ALEN);
dev_put(gid_attr.ndev); dev_put(gid_attr.ndev);

View File

@ -525,9 +525,6 @@ __be16 mlx5_get_roce_udp_sport(struct mlx5_ib_dev *dev, u8 port_num,
if (ib_get_cached_gid(&dev->ib_dev, port_num, index, &gid, &attr)) if (ib_get_cached_gid(&dev->ib_dev, port_num, index, &gid, &attr))
return 0; return 0;
if (!attr.ndev)
return 0;
dev_put(attr.ndev); dev_put(attr.ndev);
if (attr.gid_type != IB_GID_TYPE_ROCE_UDP_ENCAP) if (attr.gid_type != IB_GID_TYPE_ROCE_UDP_ENCAP)
@ -547,9 +544,6 @@ int mlx5_get_roce_gid_type(struct mlx5_ib_dev *dev, u8 port_num,
if (ret) if (ret)
return ret; return ret;
if (!attr.ndev)
return -ENODEV;
dev_put(attr.ndev); dev_put(attr.ndev);
*gid_type = attr.gid_type; *gid_type = attr.gid_type;

View File

@ -193,11 +193,9 @@ struct ib_ah *ocrdma_create_ah(struct ib_pd *ibpd, struct rdma_ah_attr *attr,
__func__, status); __func__, status);
goto av_conf_err; goto av_conf_err;
} }
if (sgid_attr.ndev) { if (is_vlan_dev(sgid_attr.ndev))
if (is_vlan_dev(sgid_attr.ndev)) vlan_tag = vlan_dev_vlan_id(sgid_attr.ndev);
vlan_tag = vlan_dev_vlan_id(sgid_attr.ndev); dev_put(sgid_attr.ndev);
dev_put(sgid_attr.ndev);
}
/* Get network header type for this GID */ /* Get network header type for this GID */
ah->hdr_type = ib_gid_to_network_type(sgid_attr.gid_type, &sgid); ah->hdr_type = ib_gid_to_network_type(sgid_attr.gid_type, &sgid);

View File

@ -2527,7 +2527,7 @@ static int ocrdma_set_av_params(struct ocrdma_qp *qp,
status = ib_get_cached_gid(&dev->ibdev, 1, grh->sgid_index, status = ib_get_cached_gid(&dev->ibdev, 1, grh->sgid_index,
&sgid, &sgid_attr); &sgid, &sgid_attr);
if (!status && sgid_attr.ndev) { if (!status) {
vlan_id = rdma_vlan_dev_vlan_id(sgid_attr.ndev); vlan_id = rdma_vlan_dev_vlan_id(sgid_attr.ndev);
memcpy(mac_addr, sgid_attr.ndev->dev_addr, ETH_ALEN); memcpy(mac_addr, sgid_attr.ndev->dev_addr, ETH_ALEN);
dev_put(sgid_attr.ndev); dev_put(sgid_attr.ndev);

View File

@ -412,13 +412,11 @@ static inline int qedr_gsi_build_header(struct qedr_dev *dev,
return rc; return rc;
} }
if (sgid_attr.ndev) { vlan_id = rdma_vlan_dev_vlan_id(sgid_attr.ndev);
vlan_id = rdma_vlan_dev_vlan_id(sgid_attr.ndev); if (vlan_id < VLAN_CFI_MASK)
if (vlan_id < VLAN_CFI_MASK) has_vlan = true;
has_vlan = true;
dev_put(sgid_attr.ndev); dev_put(sgid_attr.ndev);
}
has_udp = (sgid_attr.gid_type == IB_GID_TYPE_ROCE_UDP_ENCAP); has_udp = (sgid_attr.gid_type == IB_GID_TYPE_ROCE_UDP_ENCAP);
if (!has_udp) { if (!has_udp) {

View File

@ -1093,43 +1093,41 @@ static inline int get_gid_info_from_table(struct ib_qp *ibqp,
if (rc) if (rc)
return rc; return rc;
if (gid_attr.ndev) { qp_params->vlan_id = rdma_vlan_dev_vlan_id(gid_attr.ndev);
qp_params->vlan_id = rdma_vlan_dev_vlan_id(gid_attr.ndev);
dev_put(gid_attr.ndev); dev_put(gid_attr.ndev);
nw_type = ib_gid_to_network_type(gid_attr.gid_type, &gid); nw_type = ib_gid_to_network_type(gid_attr.gid_type, &gid);
switch (nw_type) { switch (nw_type) {
case RDMA_NETWORK_IPV6: case RDMA_NETWORK_IPV6:
memcpy(&qp_params->sgid.bytes[0], &gid.raw[0], memcpy(&qp_params->sgid.bytes[0], &gid.raw[0],
sizeof(qp_params->sgid)); sizeof(qp_params->sgid));
memcpy(&qp_params->dgid.bytes[0], memcpy(&qp_params->dgid.bytes[0],
&grh->dgid, &grh->dgid,
sizeof(qp_params->dgid)); sizeof(qp_params->dgid));
qp_params->roce_mode = ROCE_V2_IPV6; qp_params->roce_mode = ROCE_V2_IPV6;
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_IB:
memcpy(&qp_params->sgid.bytes[0], &gid.raw[0], memcpy(&qp_params->sgid.bytes[0], &gid.raw[0],
sizeof(qp_params->sgid)); sizeof(qp_params->sgid));
memcpy(&qp_params->dgid.bytes[0], memcpy(&qp_params->dgid.bytes[0],
&grh->dgid, &grh->dgid,
sizeof(qp_params->dgid)); sizeof(qp_params->dgid));
qp_params->roce_mode = ROCE_V1; qp_params->roce_mode = ROCE_V1;
break; break;
case RDMA_NETWORK_IPV4: case RDMA_NETWORK_IPV4:
memset(&qp_params->sgid, 0, sizeof(qp_params->sgid)); memset(&qp_params->sgid, 0, sizeof(qp_params->sgid));
memset(&qp_params->dgid, 0, sizeof(qp_params->dgid)); memset(&qp_params->dgid, 0, sizeof(qp_params->dgid));
ipv4_addr = qedr_get_ipv4_from_gid(gid.raw); ipv4_addr = qedr_get_ipv4_from_gid(gid.raw);
qp_params->sgid.ipv4_addr = ipv4_addr; qp_params->sgid.ipv4_addr = ipv4_addr;
ipv4_addr = ipv4_addr =
qedr_get_ipv4_from_gid(grh->dgid.raw); qedr_get_ipv4_from_gid(grh->dgid.raw);
qp_params->dgid.ipv4_addr = ipv4_addr; qp_params->dgid.ipv4_addr = ipv4_addr;
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);
qp_params->roce_mode = ROCE_V2_IPV4; qp_params->roce_mode = ROCE_V2_IPV4;
break; break;
}
} }
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {

View File

@ -256,9 +256,7 @@ static int rxe_init_av(struct rxe_dev *rxe, struct rdma_ah_attr *attr,
rxe_av_from_attr(rdma_ah_get_port_num(attr), av, attr); rxe_av_from_attr(rdma_ah_get_port_num(attr), av, attr);
rxe_av_fill_ip_info(av, attr, &sgid_attr, &sgid); rxe_av_fill_ip_info(av, attr, &sgid_attr, &sgid);
dev_put(sgid_attr.ndev);
if (sgid_attr.ndev)
dev_put(sgid_attr.ndev);
return 0; return 0;
} }