RDMA: Introduce and use GID attr helper to read RoCE L2 fields
Instead of RoCE drivers figuring out vlan, smac fields while working on QP/AH, provide a helper routine to read the L2 fields such as vlan_id and source mac address. This moves logic from mlx5 driver to core for wider usage for RoCE ports. This is a preparation patch to allow detaching netdev in subsequent patch. 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:

committed by
Jason Gunthorpe

parent
8f97486024
commit
a70c07397f
@@ -175,14 +175,15 @@ int ocrdma_create_ah(struct ib_ah *ibah, struct rdma_ah_attr *attr, u32 flags,
|
||||
if (atomic_cmpxchg(&dev->update_sl, 1, 0))
|
||||
ocrdma_init_service_level(dev);
|
||||
|
||||
sgid_attr = attr->grh.sgid_attr;
|
||||
status = rdma_read_gid_l2_fields(sgid_attr, &vlan_tag, NULL);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
status = ocrdma_alloc_av(dev, ah);
|
||||
if (status)
|
||||
goto av_err;
|
||||
|
||||
sgid_attr = attr->grh.sgid_attr;
|
||||
if (is_vlan_dev(sgid_attr->ndev))
|
||||
vlan_tag = vlan_dev_vlan_id(sgid_attr->ndev);
|
||||
|
||||
/* Get network header type for this GID */
|
||||
ah->hdr_type = rdma_gid_attr_network_type(sgid_attr);
|
||||
|
||||
|
@@ -2496,7 +2496,7 @@ static int ocrdma_set_av_params(struct ocrdma_qp *qp,
|
||||
int status;
|
||||
struct rdma_ah_attr *ah_attr = &attrs->ah_attr;
|
||||
const struct ib_gid_attr *sgid_attr;
|
||||
u32 vlan_id = 0xFFFF;
|
||||
u16 vlan_id = 0xFFFF;
|
||||
u8 mac_addr[6], hdr_type;
|
||||
union {
|
||||
struct sockaddr _sockaddr;
|
||||
@@ -2526,8 +2526,9 @@ static int ocrdma_set_av_params(struct ocrdma_qp *qp,
|
||||
sizeof(cmd->params.dgid));
|
||||
|
||||
sgid_attr = ah_attr->grh.sgid_attr;
|
||||
vlan_id = rdma_vlan_dev_vlan_id(sgid_attr->ndev);
|
||||
memcpy(mac_addr, sgid_attr->ndev->dev_addr, ETH_ALEN);
|
||||
status = rdma_read_gid_l2_fields(sgid_attr, &vlan_id, &mac_addr[0]);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
qp->sgid_idx = grh->sgid_index;
|
||||
memcpy(&cmd->params.sgid[0], &sgid_attr->gid.raw[0],
|
||||
|
Reference in New Issue
Block a user