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