diff options
author | Jack Wang <jinpu.wang@profitbricks.com> | 2017-01-02 07:17:36 -0500 |
---|---|---|
committer | Doug Ledford <dledford@redhat.com> | 2017-01-12 22:59:55 -0500 |
commit | aaaca121c7cf9217ab81d9db0a04835d52aabebe (patch) | |
tree | efaef9192a68a244e50d44903a13d687df8c2ec2 /drivers/infiniband/core/cache.c | |
parent | 27d41d29c7f093f6f77843624fbb080c1b4a8b9c (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.c | 10 |
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: | |||
1190 | free: | 1196 | free: |
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 | ||
1216 | void ib_cache_cleanup_one(struct ib_device *device) | 1224 | void ib_cache_cleanup_one(struct ib_device *device) |