Commit 5c9a5282 authored by Michael Wang's avatar Michael Wang Committed by Doug Ledford

IB/Verbs: Reform mcast related part in IB-core cma

Use raw management helpers to reform mcast related part in IB-core cma.
Signed-off-by: default avatarMichael Wang <yun.wang@profitbricks.com>
Reviewed-by: default avatarIra Weiny <ira.weiny@intel.com>
Tested-by: default avatarIra Weiny <ira.weiny@intel.com>
Reviewed-by: default avatarSean Hefty <sean.hefty@intel.com>
Reviewed-by: default avatarJason Gunthorpe <jgunthorpe@obsidianresearch.com>
Tested-by: default avatarDoug Ledford <dledford@redhat.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent c72f2189
...@@ -1004,17 +1004,12 @@ static void cma_leave_mc_groups(struct rdma_id_private *id_priv) ...@@ -1004,17 +1004,12 @@ static void cma_leave_mc_groups(struct rdma_id_private *id_priv)
mc = container_of(id_priv->mc_list.next, mc = container_of(id_priv->mc_list.next,
struct cma_multicast, list); struct cma_multicast, list);
list_del(&mc->list); list_del(&mc->list);
switch (rdma_port_get_link_layer(id_priv->cma_dev->device, id_priv->id.port_num)) { if (rdma_protocol_ib(id_priv->cma_dev->device,
case IB_LINK_LAYER_INFINIBAND: id_priv->id.port_num)) {
ib_sa_free_multicast(mc->multicast.ib); ib_sa_free_multicast(mc->multicast.ib);
kfree(mc); kfree(mc);
break; } else
case IB_LINK_LAYER_ETHERNET:
kref_put(&mc->mcref, release_mc); kref_put(&mc->mcref, release_mc);
break;
default:
break;
}
} }
} }
...@@ -3321,24 +3316,13 @@ int rdma_join_multicast(struct rdma_cm_id *id, struct sockaddr *addr, ...@@ -3321,24 +3316,13 @@ int rdma_join_multicast(struct rdma_cm_id *id, struct sockaddr *addr,
list_add(&mc->list, &id_priv->mc_list); list_add(&mc->list, &id_priv->mc_list);
spin_unlock(&id_priv->lock); spin_unlock(&id_priv->lock);
switch (rdma_node_get_transport(id->device->node_type)) { if (rdma_protocol_iboe(id->device, id->port_num)) {
case RDMA_TRANSPORT_IB: kref_init(&mc->mcref);
switch (rdma_port_get_link_layer(id->device, id->port_num)) { ret = cma_iboe_join_multicast(id_priv, mc);
case IB_LINK_LAYER_INFINIBAND: } else if (rdma_protocol_ib(id->device, id->port_num))
ret = cma_join_ib_multicast(id_priv, mc); ret = cma_join_ib_multicast(id_priv, mc);
break; else
case IB_LINK_LAYER_ETHERNET:
kref_init(&mc->mcref);
ret = cma_iboe_join_multicast(id_priv, mc);
break;
default:
ret = -EINVAL;
}
break;
default:
ret = -ENOSYS; ret = -ENOSYS;
break;
}
if (ret) { if (ret) {
spin_lock_irq(&id_priv->lock); spin_lock_irq(&id_priv->lock);
...@@ -3366,19 +3350,15 @@ void rdma_leave_multicast(struct rdma_cm_id *id, struct sockaddr *addr) ...@@ -3366,19 +3350,15 @@ void rdma_leave_multicast(struct rdma_cm_id *id, struct sockaddr *addr)
ib_detach_mcast(id->qp, ib_detach_mcast(id->qp,
&mc->multicast.ib->rec.mgid, &mc->multicast.ib->rec.mgid,
be16_to_cpu(mc->multicast.ib->rec.mlid)); be16_to_cpu(mc->multicast.ib->rec.mlid));
if (rdma_node_get_transport(id_priv->cma_dev->device->node_type) == RDMA_TRANSPORT_IB) {
switch (rdma_port_get_link_layer(id->device, id->port_num)) { BUG_ON(id_priv->cma_dev->device != id->device);
case IB_LINK_LAYER_INFINIBAND:
ib_sa_free_multicast(mc->multicast.ib); if (rdma_protocol_ib(id->device, id->port_num)) {
kfree(mc); ib_sa_free_multicast(mc->multicast.ib);
break; kfree(mc);
case IB_LINK_LAYER_ETHERNET: } else if (rdma_protocol_iboe(id->device, id->port_num))
kref_put(&mc->mcref, release_mc); kref_put(&mc->mcref, release_mc);
break;
default:
break;
}
}
return; return;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment