Commit aaaca121 authored by Jack Wang's avatar Jack Wang Committed by Doug Ledford

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: default avatarJack Wang <jinpu.wang@profitbricks.com>
Reviewed-by: default avatarMichael Wang <yun.wang@profitbricks.com>
Acked-by: default avatarSean Hefty <sean.hefty@intel.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent 27d41d29
...@@ -1105,6 +1105,8 @@ static void ib_cache_update(struct ib_device *device, ...@@ -1105,6 +1105,8 @@ static void ib_cache_update(struct ib_device *device,
} }
device->cache.lmc_cache[port - rdma_start_port(device)] = tprops->lmc; device->cache.lmc_cache[port - rdma_start_port(device)] = tprops->lmc;
device->cache.port_state_cache[port - rdma_start_port(device)] =
tprops->state;
write_unlock_irq(&device->cache.lock); write_unlock_irq(&device->cache.lock);
...@@ -1164,7 +1166,11 @@ int ib_cache_setup_one(struct ib_device *device) ...@@ -1164,7 +1166,11 @@ int ib_cache_setup_one(struct ib_device *device)
(rdma_end_port(device) - (rdma_end_port(device) -
rdma_start_port(device) + 1), rdma_start_port(device) + 1),
GFP_KERNEL); GFP_KERNEL);
if (!device->cache.pkey_cache || device->cache.port_state_cache = kmalloc(sizeof *device->cache.port_state_cache *
(rdma_end_port(device) -
rdma_start_port(device) + 1),
GFP_KERNEL);
if (!device->cache.pkey_cache || !device->cache.port_state_cache ||
!device->cache.lmc_cache) { !device->cache.lmc_cache) {
err = -ENOMEM; err = -ENOMEM;
goto free; goto free;
...@@ -1190,6 +1196,7 @@ int ib_cache_setup_one(struct ib_device *device) ...@@ -1190,6 +1196,7 @@ int ib_cache_setup_one(struct ib_device *device)
free: free:
kfree(device->cache.pkey_cache); kfree(device->cache.pkey_cache);
kfree(device->cache.lmc_cache); kfree(device->cache.lmc_cache);
kfree(device->cache.port_state_cache);
return err; return err;
} }
...@@ -1211,6 +1218,7 @@ void ib_cache_release_one(struct ib_device *device) ...@@ -1211,6 +1218,7 @@ void ib_cache_release_one(struct ib_device *device)
gid_table_release_one(device); gid_table_release_one(device);
kfree(device->cache.pkey_cache); kfree(device->cache.pkey_cache);
kfree(device->cache.lmc_cache); kfree(device->cache.lmc_cache);
kfree(device->cache.port_state_cache);
} }
void ib_cache_cleanup_one(struct ib_device *device) void ib_cache_cleanup_one(struct ib_device *device)
......
...@@ -1781,6 +1781,7 @@ struct ib_cache { ...@@ -1781,6 +1781,7 @@ struct ib_cache {
struct ib_pkey_cache **pkey_cache; struct ib_pkey_cache **pkey_cache;
struct ib_gid_table **gid_cache; struct ib_gid_table **gid_cache;
u8 *lmc_cache; u8 *lmc_cache;
enum ib_port_state *port_state_cache;
}; };
struct ib_dma_mapping_ops { struct ib_dma_mapping_ops {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment