OSDN Git Service

IB/core: Reduce the places that use zgid
authorParav Pandit <parav@mellanox.com>
Tue, 22 May 2018 17:33:45 +0000 (20:33 +0300)
committerJason Gunthorpe <jgg@mellanox.com>
Thu, 24 May 2018 15:39:25 +0000 (09:39 -0600)
Instead of open coding memcmp() to check whether a given GID is zero or
not, use a helper function to do so, and replace instances of
memcpy(z,&zgid) with memset.

Signed-off-by: Parav Pandit <parav@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/core/cache.c
drivers/infiniband/hw/mlx4/main.c
drivers/infiniband/hw/mlx4/qp.c
include/rdma/ib_cache.h

index 5f1a833..82699f7 100644 (file)
@@ -125,6 +125,16 @@ const char *ib_cache_gid_type_str(enum ib_gid_type gid_type)
 }
 EXPORT_SYMBOL(ib_cache_gid_type_str);
 
+/** rdma_is_zero_gid - Check if given GID is zero or not.
+ * @gid:       GID to check
+ * Returns true if given GID is zero, returns false otherwise.
+ */
+bool rdma_is_zero_gid(const union ib_gid *gid)
+{
+       return !memcmp(gid, &zgid, sizeof(*gid));
+}
+EXPORT_SYMBOL(rdma_is_zero_gid);
+
 int ib_cache_gid_parse_type_str(const char *buf)
 {
        unsigned int i;
@@ -231,7 +241,7 @@ static int add_modify_gid(struct ib_gid_table *table,
                 * So ignore such behavior for IB link layer and don't
                 * fail the call, but don't add such entry to GID cache.
                 */
-               if (!memcmp(gid, &zgid, sizeof(*gid)))
+               if (rdma_is_zero_gid(gid))
                        return 0;
        }
 
@@ -264,7 +274,7 @@ static void del_gid(struct ib_device *ib_dev, u8 port,
 
        if (rdma_protocol_roce(ib_dev, port))
                del_roce_gid(ib_dev, port, table, ix);
-       memcpy(&table->data_vec[ix].gid, &zgid, sizeof(zgid));
+       memset(&table->data_vec[ix].gid, 0, sizeof(table->data_vec[ix].gid));
        memset(&table->data_vec[ix].attr, 0, sizeof(table->data_vec[ix].attr));
        table->data_vec[ix].context = NULL;
 }
@@ -363,7 +373,7 @@ static int __ib_cache_gid_add(struct ib_device *ib_dev, u8 port,
         * IB spec version 1.3 section 4.1.1 point (6) and
         * section 12.7.10 and section 12.7.20
         */
-       if (!memcmp(gid, &zgid, sizeof(*gid)))
+       if (rdma_is_zero_gid(gid))
                return -EINVAL;
 
        table = ib_dev->cache.ports[port - rdma_start_port(ib_dev)].gid;
@@ -724,8 +734,7 @@ static void cleanup_gid_table_port(struct ib_device *ib_dev, u8 port,
 
        mutex_lock(&table->lock);
        for (i = 0; i < table->sz; ++i) {
-               if (memcmp(&table->data_vec[i].gid, &zgid,
-                          sizeof(table->data_vec[i].gid))) {
+               if (!rdma_is_zero_gid(&table->data_vec[i].gid)) {
                        del_gid(ib_dev, port, table, i);
                        deleted = true;
                }
index 5b70744..bf12394 100644 (file)
@@ -276,7 +276,7 @@ static int mlx4_ib_add_gid(const union ib_gid *gid,
                        found = i;
                        break;
                }
-               if (free < 0 && !memcmp(&port_gid_table->gids[i].gid, &zgid, sizeof(*gid)))
+               if (free < 0 && rdma_is_zero_gid(&port_gid_table->gids[i].gid))
                        free = i; /* HW has space */
        }
 
@@ -345,7 +345,8 @@ static int mlx4_ib_del_gid(const struct ib_gid_attr *attr, void **context)
                if (!ctx->refcount) {
                        unsigned int real_index = ctx->real_index;
 
-                       memcpy(&port_gid_table->gids[real_index].gid, &zgid, sizeof(zgid));
+                       memset(&port_gid_table->gids[real_index].gid, 0,
+                              sizeof(port_gid_table->gids[real_index].gid));
                        kfree(port_gid_table->gids[real_index].ctx);
                        port_gid_table->gids[real_index].ctx = NULL;
                        hw_update = 1;
index 199648a..cd2c08c 100644 (file)
@@ -3078,7 +3078,7 @@ static int fill_gid_by_hw_index(struct mlx4_ib_dev *ibdev, u8 port_num,
        memcpy(gid, &port_gid_table->gids[index].gid, sizeof(*gid));
        *gid_type = port_gid_table->gids[index].gid_type;
        spin_unlock_irqrestore(&iboe->lock, flags);
-       if (!memcmp(gid, &zgid, sizeof(*gid)))
+       if (rdma_is_zero_gid(gid))
                return -ENOENT;
 
        return 0;
index eb49cc8..a5f2498 100644 (file)
@@ -149,4 +149,5 @@ int ib_get_cached_port_state(struct ib_device *device,
                              u8                port_num,
                              enum ib_port_state *port_active);
 
+bool rdma_is_zero_gid(const union ib_gid *gid);
 #endif /* _IB_CACHE_H */