aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/core/cache.c
diff options
context:
space:
mode:
authorJack Wang <jinpu.wang@profitbricks.com>2017-01-02 07:17:36 -0500
committerDoug Ledford <dledford@redhat.com>2017-01-12 22:59:55 -0500
commitaaaca121c7cf9217ab81d9db0a04835d52aabebe (patch)
treeefaef9192a68a244e50d44903a13d687df8c2ec2 /drivers/infiniband/core/cache.c
parent27d41d29c7f093f6f77843624fbb080c1b4a8b9c (diff)
RDMA/core: add port state cache
We need a port state cache in ib_core, later we will use in rdma_cm. Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com> Reviewed-by: Michael Wang <yun.wang@profitbricks.com> Acked-by: Sean Hefty <sean.hefty@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
Diffstat (limited to 'drivers/infiniband/core/cache.c')
-rw-r--r--drivers/infiniband/core/cache.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/infiniband/core/cache.c b/drivers/infiniband/core/cache.c
index ae04826e82fc..87fd7c39fbc0 100644
--- a/drivers/infiniband/core/cache.c
+++ b/drivers/infiniband/core/cache.c
@@ -1105,6 +1105,8 @@ static void ib_cache_update(struct ib_device *device,
1105 } 1105 }
1106 1106
1107 device->cache.lmc_cache[port - rdma_start_port(device)] = tprops->lmc; 1107 device->cache.lmc_cache[port - rdma_start_port(device)] = tprops->lmc;
1108 device->cache.port_state_cache[port - rdma_start_port(device)] =
1109 tprops->state;
1108 1110
1109 write_unlock_irq(&device->cache.lock); 1111 write_unlock_irq(&device->cache.lock);
1110 1112
@@ -1164,7 +1166,11 @@ int ib_cache_setup_one(struct ib_device *device)
1164 (rdma_end_port(device) - 1166 (rdma_end_port(device) -
1165 rdma_start_port(device) + 1), 1167 rdma_start_port(device) + 1),
1166 GFP_KERNEL); 1168 GFP_KERNEL);
1167 if (!device->cache.pkey_cache || 1169 device->cache.port_state_cache = kmalloc(sizeof *device->cache.port_state_cache *
1170 (rdma_end_port(device) -
1171 rdma_start_port(device) + 1),
1172 GFP_KERNEL);
1173 if (!device->cache.pkey_cache || !device->cache.port_state_cache ||
1168 !device->cache.lmc_cache) { 1174 !device->cache.lmc_cache) {
1169 err = -ENOMEM; 1175 err = -ENOMEM;
1170 goto free; 1176 goto free;
@@ -1190,6 +1196,7 @@ err:
1190free: 1196free:
1191 kfree(device->cache.pkey_cache); 1197 kfree(device->cache.pkey_cache);
1192 kfree(device->cache.lmc_cache); 1198 kfree(device->cache.lmc_cache);
1199 kfree(device->cache.port_state_cache);
1193 return err; 1200 return err;
1194} 1201}
1195 1202
@@ -1211,6 +1218,7 @@ void ib_cache_release_one(struct ib_device *device)
1211 gid_table_release_one(device); 1218 gid_table_release_one(device);
1212 kfree(device->cache.pkey_cache); 1219 kfree(device->cache.pkey_cache);
1213 kfree(device->cache.lmc_cache); 1220 kfree(device->cache.lmc_cache);
1221 kfree(device->cache.port_state_cache);
1214} 1222}
1215 1223
1216void ib_cache_cleanup_one(struct ib_device *device) 1224void ib_cache_cleanup_one(struct ib_device *device)