On Wed, Feb 03, 2010 at 09:20:05AM -0600, Steve Wise wrote:
> 
> >diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
> >index a2d5aad..76dce2b 100644
> >--- a/drivers/infiniband/core/cma.c
> >+++ b/drivers/infiniband/core/cma.c
> >@@ -348,15 +348,28 @@ static int cma_acquire_dev(struct rdma_id_private 
> >*id_priv)
> >     union ib_gid gid;
> >     int ret = -ENODEV;
> >-    rdma_addr_get_sgid(dev_addr, &gid);
> >-    list_for_each_entry(cma_dev, &dev_list, list) {
> >-            ret = ib_find_cached_gid(cma_dev->device, &gid,
> >-                                     &id_priv->id.port_num, NULL);
> >-            if (!ret) {
> >-                    cma_attach_to_dev(id_priv, cma_dev);
> >-                    break;
> >+    if (dev_addr->dev_type != ARPHRD_INFINIBAND) {
> >+            rocee_addr_get_sgid(dev_addr, &gid);
> >+            list_for_each_entry(cma_dev, &dev_list, list) {
> >+                    ret = ib_find_cached_gid(cma_dev->device, &gid,
> >+                                             &id_priv->id.port_num, NULL);
> >+                    if (!ret)
> >+                            break;
> >+            }
> 
> The above if statement is true for iwarp devices, so this patch is
> just wrong.   rocee__addr_get_sgid() should only be used for ROCEE
> interfaces, correct?

No, the idea is this: for non ARPHRD_INFINIBAND devices (e.g. rocee or
iwarp) I assume first this rocee, get the rocee gid, and check if this
gid appears in any device's gid table. It the mac address belongs to a
rocee device then it will be found; if it belongs to an iwarp device
then it won't be found. In the later case I build the gid in the pre
rocee patches fashion and search again.
> 
> 
> 
> >+    } else {
> >+            memcpy(&gid, dev_addr->src_dev_addr +
> >+                   rdma_addr_gid_offset(dev_addr), sizeof gid);
> >+            list_for_each_entry(cma_dev, &dev_list, list) {
> >+                    ret = ib_find_cached_gid(cma_dev->device, &gid,
> >+                                             &id_priv->id.port_num, NULL);
> >+                    if (!ret)
> >+                            break;
> >             }
> >     }
> >+
> >+    if (!ret)
> >+            cma_attach_to_dev(id_priv, cma_dev);
> >+
> >     return ret;
> > }
_______________________________________________
ewg mailing list
ewg@lists.openfabrics.org
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg

Reply via email to