IB/Verbs: Reform mcast related part in IB-core cma
authorMichael Wang <yun.wang@profitbricks.com>
Tue, 5 May 2015 12:50:29 +0000 (14:50 +0200)
committerDoug Ledford <dledford@redhat.com>
Mon, 18 May 2015 17:35:04 +0000 (13:35 -0400)
Use raw management helpers to reform mcast related part in IB-core cma.

Signed-off-by: Michael Wang <yun.wang@profitbricks.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Tested-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Sean Hefty <sean.hefty@intel.com>
Reviewed-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Tested-by: Doug Ledford <dledford@redhat.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/core/cma.c

index f619e9b..5736386 100644 (file)
@@ -1004,17 +1004,12 @@ static void cma_leave_mc_groups(struct rdma_id_private *id_priv)
                mc = container_of(id_priv->mc_list.next,
                                  struct cma_multicast, list);
                list_del(&mc->list);
-               switch (rdma_port_get_link_layer(id_priv->cma_dev->device, id_priv->id.port_num)) {
-               case IB_LINK_LAYER_INFINIBAND:
+               if (rdma_protocol_ib(id_priv->cma_dev->device,
+                                     id_priv->id.port_num)) {
                        ib_sa_free_multicast(mc->multicast.ib);
                        kfree(mc);
-                       break;
-               case IB_LINK_LAYER_ETHERNET:
+               } else
                        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,
        list_add(&mc->list, &id_priv->mc_list);
        spin_unlock(&id_priv->lock);
 
-       switch (rdma_node_get_transport(id->device->node_type)) {
-       case RDMA_TRANSPORT_IB:
-               switch (rdma_port_get_link_layer(id->device, id->port_num)) {
-               case IB_LINK_LAYER_INFINIBAND:
-                       ret = cma_join_ib_multicast(id_priv, mc);
-                       break;
-               case IB_LINK_LAYER_ETHERNET:
-                       kref_init(&mc->mcref);
-                       ret = cma_iboe_join_multicast(id_priv, mc);
-                       break;
-               default:
-                       ret = -EINVAL;
-               }
-               break;
-       default:
+       if (rdma_protocol_iboe(id->device, id->port_num)) {
+               kref_init(&mc->mcref);
+               ret = cma_iboe_join_multicast(id_priv, mc);
+       } else if (rdma_protocol_ib(id->device, id->port_num))
+               ret = cma_join_ib_multicast(id_priv, mc);
+       else
                ret = -ENOSYS;
-               break;
-       }
 
        if (ret) {
                spin_lock_irq(&id_priv->lock);
@@ -3366,19 +3350,15 @@ void rdma_leave_multicast(struct rdma_cm_id *id, struct sockaddr *addr)
                                ib_detach_mcast(id->qp,
                                                &mc->multicast.ib->rec.mgid,
                                                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)) {
-                               case IB_LINK_LAYER_INFINIBAND:
-                                       ib_sa_free_multicast(mc->multicast.ib);
-                                       kfree(mc);
-                                       break;
-                               case IB_LINK_LAYER_ETHERNET:
-                                       kref_put(&mc->mcref, release_mc);
-                                       break;
-                               default:
-                                       break;
-                               }
-                       }
+
+                       BUG_ON(id_priv->cma_dev->device != id->device);
+
+                       if (rdma_protocol_ib(id->device, id->port_num)) {
+                               ib_sa_free_multicast(mc->multicast.ib);
+                               kfree(mc);
+                       } else if (rdma_protocol_iboe(id->device, id->port_num))
+                               kref_put(&mc->mcref, release_mc);
+
                        return;
                }
        }