aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/core/cma.c
diff options
context:
space:
mode:
authorMichael S. Tsirkin <mst@mellanox.co.il>2006-08-21 19:40:12 -0400
committerRoland Dreier <rolandd@cisco.com>2006-09-22 18:22:53 -0400
commitc1a0b23bf477c2e1068905f4e2b5c3cee139e853 (patch)
tree68357e32e8b6542647f639da8ca3859b4cb3b59b /drivers/infiniband/core/cma.c
parent2439a6e65ff09729c3b4215f134dc5cd4e8a30c0 (diff)
IB/sa: Require SA registration
Require users to register with SA module, to prevent the sa_query module text from going away while an SA query callback is still running. Update all in-tree users for the new interface. Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il> Signed-off-by: Sean Hefty <sean.hefty@intel.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/core/cma.c')
-rw-r--r--drivers/infiniband/core/cma.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index 488fa1d642a..1178bd434d1 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -62,6 +62,7 @@ static struct ib_client cma_client = {
62 .remove = cma_remove_one 62 .remove = cma_remove_one
63}; 63};
64 64
65static struct ib_sa_client sa_client;
65static LIST_HEAD(dev_list); 66static LIST_HEAD(dev_list);
66static LIST_HEAD(listen_any_list); 67static LIST_HEAD(listen_any_list);
67static DEFINE_MUTEX(lock); 68static DEFINE_MUTEX(lock);
@@ -1323,7 +1324,7 @@ static int cma_query_ib_route(struct rdma_id_private *id_priv, int timeout_ms,
1323 path_rec.pkey = cpu_to_be16(ib_addr_get_pkey(addr)); 1324 path_rec.pkey = cpu_to_be16(ib_addr_get_pkey(addr));
1324 path_rec.numb_path = 1; 1325 path_rec.numb_path = 1;
1325 1326
1326 id_priv->query_id = ib_sa_path_rec_get(id_priv->id.device, 1327 id_priv->query_id = ib_sa_path_rec_get(&sa_client, id_priv->id.device,
1327 id_priv->id.port_num, &path_rec, 1328 id_priv->id.port_num, &path_rec,
1328 IB_SA_PATH_REC_DGID | IB_SA_PATH_REC_SGID | 1329 IB_SA_PATH_REC_DGID | IB_SA_PATH_REC_SGID |
1329 IB_SA_PATH_REC_PKEY | IB_SA_PATH_REC_NUMB_PATH, 1330 IB_SA_PATH_REC_PKEY | IB_SA_PATH_REC_NUMB_PATH,
@@ -2199,12 +2200,15 @@ static int cma_init(void)
2199 if (!cma_wq) 2200 if (!cma_wq)
2200 return -ENOMEM; 2201 return -ENOMEM;
2201 2202
2203 ib_sa_register_client(&sa_client);
2204
2202 ret = ib_register_client(&cma_client); 2205 ret = ib_register_client(&cma_client);
2203 if (ret) 2206 if (ret)
2204 goto err; 2207 goto err;
2205 return 0; 2208 return 0;
2206 2209
2207err: 2210err:
2211 ib_sa_unregister_client(&sa_client);
2208 destroy_workqueue(cma_wq); 2212 destroy_workqueue(cma_wq);
2209 return ret; 2213 return ret;
2210} 2214}
@@ -2212,6 +2216,7 @@ err:
2212static void cma_cleanup(void) 2216static void cma_cleanup(void)
2213{ 2217{
2214 ib_unregister_client(&cma_client); 2218 ib_unregister_client(&cma_client);
2219 ib_sa_unregister_client(&sa_client);
2215 destroy_workqueue(cma_wq); 2220 destroy_workqueue(cma_wq);
2216 idr_destroy(&sdp_ps); 2221 idr_destroy(&sdp_ps);
2217 idr_destroy(&tcp_ps); 2222 idr_destroy(&tcp_ps);