Changes all ib_xxx_cached_gid funcitons to use device structure instead
of cache structure.

Signed-off-by: Goldwyn Rodrigues <[email protected]>
---
 drivers/infiniband/core/cache.c |   41 +++++++++++++++++++++-----------------
 include/rdma/ib_cache.h         |    4 +-
 include/rdma/ib_verbs.h         |    2 +
 3 files changed, 27 insertions(+), 20 deletions(-)

diff --git a/drivers/infiniband/core/cache.c b/drivers/infiniband/core/cache.c
index efe6d00..4797b2b 100644
--- a/drivers/infiniband/core/cache.c
+++ b/drivers/infiniband/core/cache.c
@@ -71,44 +71,44 @@ static inline int end_port(struct ib_device *device)
                0 : device->phys_port_cnt;
 }
 
-int ib_get_cached_gid(struct ib_device *device,
+int ib_get_cached_gid(struct ib_cache *cache,
                      u8                port_num,
                      int               index,
                      union ib_gid     *gid)
 {
-       struct ib_gid_cache *cache;
+       struct ib_gid_cache *gc;
        unsigned long flags;
        int ret = 0;
 
-       if (port_num < start_port(device) || port_num > end_port(device))
+       if (port_num < cache->start_port || port_num > cache->end_port)
                return -EINVAL;
 
-       read_lock_irqsave(&device->cache.lock, flags);
+       read_lock_irqsave(&cache->lock, flags);
 
-       cache = device->cache.gid_cache[port_num - start_port(device)];
+       gc = cache->gid_cache[port_num - cache->start_port];
 
-       if (!test_bit(index, cache->valid_bm)) {
+       if (!test_bit(index, gc->valid_bm)) {
                ret = -ENOENT;
                goto out;
        }
 
-       if (index < 0 || index >= cache->table_len)
+       if (index < 0 || index >= gc->table_len)
                ret = -EINVAL;
        else
-               *gid = cache->table[index];
+               *gid = gc->table[index];
 
 out:
-       read_unlock_irqrestore(&device->cache.lock, flags);
+       read_unlock_irqrestore(&cache->lock, flags);
        return ret;
 }
 EXPORT_SYMBOL(ib_get_cached_gid);
 
-int ib_find_cached_gid(struct ib_device *device,
+int ib_find_cached_gid(struct ib_cache *cache,
                       union ib_gid     *gid,
                       u8               *port_num,
                       u16              *index)
 {
-       struct ib_gid_cache *cache;
+       struct ib_gid_cache *gc;
        unsigned long flags;
        int p, i;
        int ret = -ENOENT;
@@ -117,13 +117,15 @@ int ib_find_cached_gid(struct ib_device *device,
        if (index)
                *index = -1;
 
-       read_lock_irqsave(&device->cache.lock, flags);
+       read_lock_irqsave(&cache->lock, flags);
 
-       for (p = 0; p <= end_port(device) - start_port(device); ++p) {
-               cache = device->cache.gid_cache[p];
-               for (i = 0; i < cache->table_len; ++i) {
-                       if (!memcmp(gid, &cache->table[i], sizeof *gid)) {
-                               *port_num = p + start_port(device);
+       for (p = 0; p <= cache->end_port - cache->start_port; ++p) {
+               gc = cache->gid_cache[p];
+               for (i = 0; i < gc->table_len; ++i) {
+                       if (!test_bit(i, gc->valid_bm))
+                               continue;
+                       if (!memcmp(gid, &gc->table[i], sizeof *gid)) {
+                               *port_num = p + cache->start_port;
                                if (index)
                                        *index = i;
                                ret = 0;
@@ -132,7 +134,7 @@ int ib_find_cached_gid(struct ib_device *device,
                }
        }
 found:
-       read_unlock_irqrestore(&device->cache.lock, flags);
+       read_unlock_irqrestore(&cache->lock, flags);
 
        return ret;
 }
@@ -320,6 +322,9 @@ static void ib_cache_setup_one(struct ib_device *device)
 {
        int p;
 
+       device->cache.start_port = start_port(device);
+       device->cache.end_port = end_port(device);
+
        rwlock_init(&device->cache.lock);
 
        device->cache.pkey_cache =
diff --git a/include/rdma/ib_cache.h b/include/rdma/ib_cache.h
index e0c360f..c18d2ed 100644
--- a/include/rdma/ib_cache.h
+++ b/include/rdma/ib_cache.h
@@ -47,7 +47,7 @@
  * ib_get_cached_gid() fetches the specified GID table entry stored in
  * the local software cache.
  */
-int ib_get_cached_gid(struct ib_device    *device,
+int ib_get_cached_gid(struct ib_cache     *cache,
                      u8                   port_num,
                      int                  index,
                      union ib_gid        *gid);
@@ -64,7 +64,7 @@ int ib_get_cached_gid(struct ib_device    *device,
  * ib_find_cached_gid() searches for the specified GID value in
  * the local software cache.
  */
-int ib_find_cached_gid(struct ib_device *device,
+int ib_find_cached_gid(struct ib_cache  *cache,
                       union ib_gid     *gid,
                       u8               *port_num,
                       u16              *index);
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index 630b09f..d047906 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -1010,6 +1010,8 @@ enum ib_mad_result {
 struct ib_cache {
        rwlock_t                lock;
        struct ib_event_handler event_handler;
+       u8                      start_port;
+       u8                      end_port;
        struct ib_pkey_cache  **pkey_cache;
        struct ib_gid_cache   **gid_cache;
 };
-- 
1.7.6


-- 
Goldwyn
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to