check/cleanup CQ and completion channels during dat_ia_close Signed-off-by: Arlin Davis <arlin.r.da...@intel.com> --- dapl/openib_cma/dapl_ib_util.c | 22 ++++++++++++++++------ 1 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/dapl/openib_cma/dapl_ib_util.c b/dapl/openib_cma/dapl_ib_util.c index 9d97ae1..00aa5fb 100755 --- a/dapl/openib_cma/dapl_ib_util.c +++ b/dapl/openib_cma/dapl_ib_util.c @@ -373,12 +373,6 @@ DAT_RETURN dapls_ib_close_hca(IN DAPL_HCA *hca_ptr) dapl_dbg_log(DAPL_DBG_TYPE_UTIL," close_hca: %p->%p\n", hca_ptr,hca_ptr->ib_hca_handle); - if (hca_ptr->ib_hca_handle != IB_INVALID_HANDLE) { - if (rdma_destroy_id(hca_ptr->ib_trans.cm_id)) - return(dapl_convert_errno(errno,"ib_close_device")); - hca_ptr->ib_hca_handle = IB_INVALID_HANDLE; - } - dapl_os_lock(&g_hca_lock); if (g_ib_thread_state != IB_THREAD_RUN) { dapl_os_unlock(&g_hca_lock); @@ -410,6 +404,22 @@ DAT_RETURN dapls_ib_close_hca(IN DAPL_HCA *hca_ptr) nanosleep (&sleep, &remain); } bail: + if (hca_ptr->ib_trans.ib_cq) + ibv_destroy_comp_channel(hca_ptr->ib_trans.ib_cq); + + if (hca_ptr->ib_trans.ib_cq_empty) { + struct ibv_comp_channel *channel; + channel = hca_ptr->ib_trans.ib_cq_empty->channel; + ibv_destroy_cq(hca_ptr->ib_trans.ib_cq_empty); + ibv_destroy_comp_channel(channel); + } + + if (hca_ptr->ib_hca_handle != IB_INVALID_HANDLE) { + if (rdma_destroy_id(hca_ptr->ib_trans.cm_id)) + return (dapl_convert_errno(errno, "ib_close_device")); + hca_ptr->ib_hca_handle = IB_INVALID_HANDLE; + } + return (DAT_SUCCESS); } -- 1.5.2.5 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html