diff options
author | Michael S. Tsirkin <mst@mellanox.co.il> | 2006-08-21 19:40:12 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2006-09-22 18:22:53 -0400 |
commit | c1a0b23bf477c2e1068905f4e2b5c3cee139e853 (patch) | |
tree | 68357e32e8b6542647f639da8ca3859b4cb3b59b /drivers/infiniband/core/cma.c | |
parent | 2439a6e65ff09729c3b4215f134dc5cd4e8a30c0 (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.c | 7 |
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 | ||
65 | static struct ib_sa_client sa_client; | ||
65 | static LIST_HEAD(dev_list); | 66 | static LIST_HEAD(dev_list); |
66 | static LIST_HEAD(listen_any_list); | 67 | static LIST_HEAD(listen_any_list); |
67 | static DEFINE_MUTEX(lock); | 68 | static 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 | ||
2207 | err: | 2210 | err: |
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: | |||
2212 | static void cma_cleanup(void) | 2216 | static 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); |