diff options
author | Steve Wise <swise@opengridcomputing.com> | 2014-06-20 15:26:25 -0400 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2014-07-13 13:00:54 -0400 |
commit | 46c1376db1b85ae412a7917cec148c6e60f79428 (patch) | |
tree | fcc40218a1f7439007a3641842074f55254cd1ac | |
parent | 6b54d54dea82ae214e4a45a503c4ef755a8ecee8 (diff) |
RDMA/cxgb4: Call iwpm_init() only once
We need to only register with the iwpm core once. Currently it is
being done for every adapter, which causes a failure for each adapter
but the first, making multiple adapters unusable.
Fixes: 9eccfe109b27 ("RDMA/cxgb4: Add support for iWARP Port Mapper user space service")
Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
-rw-r--r-- | drivers/infiniband/hw/cxgb4/cm.c | 2 | ||||
-rw-r--r-- | drivers/infiniband/hw/cxgb4/device.c | 17 | ||||
-rw-r--r-- | drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 2 |
3 files changed, 12 insertions, 9 deletions
diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c index 6a93280250d1..768a0fb67dd6 100644 --- a/drivers/infiniband/hw/cxgb4/cm.c +++ b/drivers/infiniband/hw/cxgb4/cm.c | |||
@@ -3925,7 +3925,7 @@ int __init c4iw_cm_init(void) | |||
3925 | return 0; | 3925 | return 0; |
3926 | } | 3926 | } |
3927 | 3927 | ||
3928 | void __exit c4iw_cm_term(void) | 3928 | void c4iw_cm_term(void) |
3929 | { | 3929 | { |
3930 | WARN_ON(!list_empty(&timeout_list)); | 3930 | WARN_ON(!list_empty(&timeout_list)); |
3931 | flush_workqueue(workq); | 3931 | flush_workqueue(workq); |
diff --git a/drivers/infiniband/hw/cxgb4/device.c b/drivers/infiniband/hw/cxgb4/device.c index 16b75de4b2de..7db82b24302b 100644 --- a/drivers/infiniband/hw/cxgb4/device.c +++ b/drivers/infiniband/hw/cxgb4/device.c | |||
@@ -730,7 +730,6 @@ static void c4iw_dealloc(struct uld_ctx *ctx) | |||
730 | if (ctx->dev->rdev.oc_mw_kva) | 730 | if (ctx->dev->rdev.oc_mw_kva) |
731 | iounmap(ctx->dev->rdev.oc_mw_kva); | 731 | iounmap(ctx->dev->rdev.oc_mw_kva); |
732 | ib_dealloc_device(&ctx->dev->ibdev); | 732 | ib_dealloc_device(&ctx->dev->ibdev); |
733 | iwpm_exit(RDMA_NL_C4IW); | ||
734 | ctx->dev = NULL; | 733 | ctx->dev = NULL; |
735 | } | 734 | } |
736 | 735 | ||
@@ -827,12 +826,6 @@ static struct c4iw_dev *c4iw_alloc(const struct cxgb4_lld_info *infop) | |||
827 | setup_debugfs(devp); | 826 | setup_debugfs(devp); |
828 | } | 827 | } |
829 | 828 | ||
830 | ret = iwpm_init(RDMA_NL_C4IW); | ||
831 | if (ret) { | ||
832 | pr_err("port mapper initialization failed with %d\n", ret); | ||
833 | ib_dealloc_device(&devp->ibdev); | ||
834 | return ERR_PTR(ret); | ||
835 | } | ||
836 | 829 | ||
837 | return devp; | 830 | return devp; |
838 | } | 831 | } |
@@ -1333,6 +1326,15 @@ static int __init c4iw_init_module(void) | |||
1333 | pr_err("%s[%u]: Failed to add netlink callback\n" | 1326 | pr_err("%s[%u]: Failed to add netlink callback\n" |
1334 | , __func__, __LINE__); | 1327 | , __func__, __LINE__); |
1335 | 1328 | ||
1329 | err = iwpm_init(RDMA_NL_C4IW); | ||
1330 | if (err) { | ||
1331 | pr_err("port mapper initialization failed with %d\n", err); | ||
1332 | ibnl_remove_client(RDMA_NL_C4IW); | ||
1333 | c4iw_cm_term(); | ||
1334 | debugfs_remove_recursive(c4iw_debugfs_root); | ||
1335 | return err; | ||
1336 | } | ||
1337 | |||
1336 | cxgb4_register_uld(CXGB4_ULD_RDMA, &c4iw_uld_info); | 1338 | cxgb4_register_uld(CXGB4_ULD_RDMA, &c4iw_uld_info); |
1337 | 1339 | ||
1338 | return 0; | 1340 | return 0; |
@@ -1350,6 +1352,7 @@ static void __exit c4iw_exit_module(void) | |||
1350 | } | 1352 | } |
1351 | mutex_unlock(&dev_mutex); | 1353 | mutex_unlock(&dev_mutex); |
1352 | cxgb4_unregister_uld(CXGB4_ULD_RDMA); | 1354 | cxgb4_unregister_uld(CXGB4_ULD_RDMA); |
1355 | iwpm_exit(RDMA_NL_C4IW); | ||
1353 | ibnl_remove_client(RDMA_NL_C4IW); | 1356 | ibnl_remove_client(RDMA_NL_C4IW); |
1354 | c4iw_cm_term(); | 1357 | c4iw_cm_term(); |
1355 | debugfs_remove_recursive(c4iw_debugfs_root); | 1358 | debugfs_remove_recursive(c4iw_debugfs_root); |
diff --git a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h index 125bc5d1e175..361fff7a0742 100644 --- a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h +++ b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h | |||
@@ -908,7 +908,7 @@ int c4iw_destroy_ctrl_qp(struct c4iw_rdev *rdev); | |||
908 | int c4iw_register_device(struct c4iw_dev *dev); | 908 | int c4iw_register_device(struct c4iw_dev *dev); |
909 | void c4iw_unregister_device(struct c4iw_dev *dev); | 909 | void c4iw_unregister_device(struct c4iw_dev *dev); |
910 | int __init c4iw_cm_init(void); | 910 | int __init c4iw_cm_init(void); |
911 | void __exit c4iw_cm_term(void); | 911 | void c4iw_cm_term(void); |
912 | void c4iw_release_dev_ucontext(struct c4iw_rdev *rdev, | 912 | void c4iw_release_dev_ucontext(struct c4iw_rdev *rdev, |
913 | struct c4iw_dev_ucontext *uctx); | 913 | struct c4iw_dev_ucontext *uctx); |
914 | void c4iw_init_dev_ucontext(struct c4iw_rdev *rdev, | 914 | void c4iw_init_dev_ucontext(struct c4iw_rdev *rdev, |