RDMA/smc: Replace ib_query_gid with rdma_get_gid_attr
authorJason Gunthorpe <jgg@mellanox.com>
Fri, 17 Aug 2018 22:45:51 +0000 (16:45 -0600)
committerJason Gunthorpe <jgg@mellanox.com>
Fri, 17 Aug 2018 22:45:51 +0000 (16:45 -0600)
All RDMA ULPs should be using rdma_get_gid_attr instead of
ib_query_gid. Convert SMC to use the new API.

In the process correct some confusion with gid_type - if attr->ndev is
!NULL then gid_type can never be IB_GID_TYPE_IB by
definition. IB_GID_TYPE_ROCE shares the same enum value and is probably
what was intended here.

Reviewed-by: Parav Pandit <parav@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
include/rdma/ib_cache.h
net/smc/smc_ib.c

index 3e11e7cc60b7457befa97bc8f589a23ad0ef1457..62e990b620aaf7c17f54f696c1390dbc60c4c8bd 100644 (file)
@@ -133,28 +133,4 @@ const struct ib_gid_attr *rdma_get_gid_attr(struct ib_device *device,
 void rdma_put_gid_attr(const struct ib_gid_attr *attr);
 void rdma_hold_gid_attr(const struct ib_gid_attr *attr);
 
-/*
- * This is to be removed. It only exists to make merging rdma and smc simpler.
- */
-static inline __deprecated int ib_query_gid(struct ib_device *device,
-                                           u8 port_num, int index,
-                                           union ib_gid *gid,
-                                           struct ib_gid_attr *attr_out)
-{
-       const struct ib_gid_attr *attr;
-
-       memset(attr_out, 0, sizeof(*attr_out));
-       attr = rdma_get_gid_attr(device, port_num, index);
-       if (IS_ERR(attr))
-               return PTR_ERR(attr);
-
-       if (attr->ndev)
-               dev_hold(attr->ndev);
-       *attr_out = *attr;
-
-       rdma_put_gid_attr(attr);
-
-       return 0;
-}
-
 #endif /* _IB_CACHE_H */
index 9bb5274a244e83e577617cb1ce71dc9c44d4d980..e519ef29c0ffcb74baf25753a58048504fedd813 100644 (file)
@@ -145,17 +145,21 @@ out:
 
 static int smc_ib_fill_mac(struct smc_ib_device *smcibdev, u8 ibport)
 {
-       struct ib_gid_attr gattr;
-       union ib_gid gid;
-       int rc;
+       const struct ib_gid_attr *attr;
+       int rc = 0;
 
-       rc = ib_query_gid(smcibdev->ibdev, ibport, 0, &gid, &gattr);
-       if (rc || !gattr.ndev)
+       attr = rdma_get_gid_attr(smcibdev->ibdev, ibport, 0);
+       if (IS_ERR(attr))
                return -ENODEV;
 
-       memcpy(smcibdev->mac[ibport - 1], gattr.ndev->dev_addr, ETH_ALEN);
-       dev_put(gattr.ndev);
-       return 0;
+       if (attr->ndev)
+               memcpy(smcibdev->mac[ibport - 1], attr->ndev->dev_addr,
+                      ETH_ALEN);
+       else
+               rc = -ENODEV;
+
+       rdma_put_gid_attr(attr);
+       return rc;
 }
 
 /* Create an identifier unique for this instance of SMC-R.
@@ -180,29 +184,27 @@ bool smc_ib_port_active(struct smc_ib_device *smcibdev, u8 ibport)
 int smc_ib_determine_gid(struct smc_ib_device *smcibdev, u8 ibport,
                         unsigned short vlan_id, u8 gid[], u8 *sgid_index)
 {
-       struct ib_gid_attr gattr;
-       union ib_gid _gid;
+       const struct ib_gid_attr *attr;
        int i;
 
        for (i = 0; i < smcibdev->pattr[ibport - 1].gid_tbl_len; i++) {
-               memset(&_gid, 0, SMC_GID_SIZE);
-               memset(&gattr, 0, sizeof(gattr));
-               if (ib_query_gid(smcibdev->ibdev, ibport, i, &_gid, &gattr))
+               attr = rdma_get_gid_attr(smcibdev->ibdev, ibport, i);
+               if (IS_ERR(attr))
                        continue;
-               if (!gattr.ndev)
-                       continue;
-               if (((!vlan_id && !is_vlan_dev(gattr.ndev)) ||
-                    (vlan_id && is_vlan_dev(gattr.ndev) &&
-                     vlan_dev_vlan_id(gattr.ndev) == vlan_id)) &&
-                   gattr.gid_type == IB_GID_TYPE_IB) {
+
+               if (attr->ndev &&
+                   ((!vlan_id && !is_vlan_dev(attr->ndev)) ||
+                    (vlan_id && is_vlan_dev(attr->ndev) &&
+                     vlan_dev_vlan_id(attr->ndev) == vlan_id)) &&
+                   attr->gid_type == IB_GID_TYPE_ROCE) {
                        if (gid)
-                               memcpy(gid, &_gid, SMC_GID_SIZE);
+                               memcpy(gid, &attr->gid, SMC_GID_SIZE);
                        if (sgid_index)
-                               *sgid_index = i;
-                       dev_put(gattr.ndev);
+                               *sgid_index = attr->index;
+                       rdma_put_gid_attr(attr);
                        return 0;
                }
-               dev_put(gattr.ndev);
+               rdma_put_gid_attr(attr);
        }
        return -ENODEV;
 }