|
19 | 19 | * Copyright (c) 2009 IBM Corporation. All rights reserved. |
20 | 20 | * Copyright (c) 2013-2015 Intel, Inc. All rights reserved |
21 | 21 | * Copyright (c) 2013-2015 NVIDIA Corporation. All rights reserved. |
22 | | - * Copyright (c) 2014-2015 Research Organization for Information Science |
23 | | - * and Technology (RIST). All rights reserved. |
| 22 | + * Copyright (c) 2014-2018 Research Organization for Information Science |
| 23 | + * and Technology (RIST). All rights reserved. |
24 | 24 | * Copyright (c) 2014 Bull SAS. All rights reserved |
25 | 25 | * $COPYRIGHT$ |
26 | 26 | * |
@@ -1040,6 +1040,14 @@ int mca_btl_openib_add_procs( |
1040 | 1040 | int btl_rank = 0; |
1041 | 1041 | volatile mca_btl_base_endpoint_t* endpoint; |
1042 | 1042 |
|
| 1043 | + |
| 1044 | + if (! openib_btl->allowed) { |
| 1045 | + opal_bitmap_clear_all_bits(reachable); |
| 1046 | + opal_show_help("help-mpi-btl-openib.txt", "ib port not selected", |
| 1047 | + true, opal_process_info.nodename, |
| 1048 | + ibv_get_device_name(openib_btl->device->ib_dev), openib_btl->port_num); |
| 1049 | + } |
| 1050 | + |
1043 | 1051 | btl_rank = get_openib_btl_params(openib_btl, &lcl_subnet_id_port_cnt); |
1044 | 1052 | if( 0 > btl_rank ){ |
1045 | 1053 | return OPAL_ERR_NOT_FOUND; |
@@ -1639,75 +1647,77 @@ static int mca_btl_openib_finalize_resources(struct mca_btl_base_module_t* btl) |
1639 | 1647 | return OPAL_SUCCESS; |
1640 | 1648 | } |
1641 | 1649 |
|
1642 | | - /* Release all QPs */ |
1643 | | - if (NULL != openib_btl->device->endpoints) { |
1644 | | - for (ep_index=0; |
1645 | | - ep_index < opal_pointer_array_get_size(openib_btl->device->endpoints); |
1646 | | - ep_index++) { |
1647 | | - endpoint=(mca_btl_openib_endpoint_t *)opal_pointer_array_get_item(openib_btl->device->endpoints, |
| 1650 | + if (openib_btl->allowed) { |
| 1651 | + /* Release all QPs */ |
| 1652 | + if (NULL != openib_btl->device->endpoints) { |
| 1653 | + for (ep_index=0; |
| 1654 | + ep_index < opal_pointer_array_get_size(openib_btl->device->endpoints); |
| 1655 | + ep_index++) { |
| 1656 | + endpoint=(mca_btl_openib_endpoint_t *)opal_pointer_array_get_item(openib_btl->device->endpoints, |
1648 | 1657 | ep_index); |
1649 | | - if(!endpoint) { |
1650 | | - BTL_VERBOSE(("In finalize, got another null endpoint")); |
1651 | | - continue; |
1652 | | - } |
1653 | | - if(endpoint->endpoint_btl != openib_btl) { |
1654 | | - continue; |
1655 | | - } |
1656 | | - for(i = 0; i < openib_btl->device->eager_rdma_buffers_count; i++) { |
1657 | | - if(openib_btl->device->eager_rdma_buffers[i] == endpoint) { |
1658 | | - openib_btl->device->eager_rdma_buffers[i] = NULL; |
1659 | | - OBJ_RELEASE(endpoint); |
| 1658 | + if(!endpoint) { |
| 1659 | + BTL_VERBOSE(("In finalize, got another null endpoint")); |
| 1660 | + continue; |
1660 | 1661 | } |
| 1662 | + if(endpoint->endpoint_btl != openib_btl) { |
| 1663 | + continue; |
| 1664 | + } |
| 1665 | + for(i = 0; i < openib_btl->device->eager_rdma_buffers_count; i++) { |
| 1666 | + if(openib_btl->device->eager_rdma_buffers[i] == endpoint) { |
| 1667 | + openib_btl->device->eager_rdma_buffers[i] = NULL; |
| 1668 | + OBJ_RELEASE(endpoint); |
| 1669 | + } |
| 1670 | + } |
| 1671 | + opal_pointer_array_set_item(openib_btl->device->endpoints, |
| 1672 | + ep_index, NULL); |
| 1673 | + assert(((opal_object_t*)endpoint)->obj_reference_count == 1); |
| 1674 | + OBJ_RELEASE(endpoint); |
1661 | 1675 | } |
1662 | | - opal_pointer_array_set_item(openib_btl->device->endpoints, |
1663 | | - ep_index, NULL); |
1664 | | - assert(((opal_object_t*)endpoint)->obj_reference_count == 1); |
1665 | | - OBJ_RELEASE(endpoint); |
1666 | 1676 | } |
1667 | | - } |
1668 | | - |
1669 | | - /* Release SRQ resources */ |
1670 | | - for(qp = 0; qp < mca_btl_openib_component.num_qps; qp++) { |
1671 | | - if(!BTL_OPENIB_QP_TYPE_PP(qp)) { |
1672 | | - MCA_BTL_OPENIB_CLEAN_PENDING_FRAGS( |
1673 | | - &openib_btl->qps[qp].u.srq_qp.pending_frags[0]); |
1674 | | - MCA_BTL_OPENIB_CLEAN_PENDING_FRAGS( |
1675 | | - &openib_btl->qps[qp].u.srq_qp.pending_frags[1]); |
1676 | | - if (NULL != openib_btl->qps[qp].u.srq_qp.srq) { |
1677 | | - opal_mutex_t *lock = |
1678 | | - &mca_btl_openib_component.srq_manager.lock; |
1679 | 1677 |
|
1680 | | - opal_hash_table_t *srq_addr_table = |
1681 | | - &mca_btl_openib_component.srq_manager.srq_addr_table; |
1682 | | - |
1683 | | - opal_mutex_lock(lock); |
1684 | | - if (OPAL_SUCCESS != |
1685 | | - opal_hash_table_remove_value_ptr(srq_addr_table, |
1686 | | - &openib_btl->qps[qp].u.srq_qp.srq, |
1687 | | - sizeof(struct ibv_srq *))) { |
1688 | | - BTL_VERBOSE(("Failed to remove SRQ %d entry from hash table.", qp)); |
1689 | | - rc = OPAL_ERROR; |
1690 | | - } |
1691 | | - opal_mutex_unlock(lock); |
1692 | | - if (0 != ibv_destroy_srq(openib_btl->qps[qp].u.srq_qp.srq)) { |
1693 | | - BTL_VERBOSE(("Failed to close SRQ %d", qp)); |
1694 | | - rc = OPAL_ERROR; |
| 1678 | + /* Release SRQ resources */ |
| 1679 | + for(qp = 0; qp < mca_btl_openib_component.num_qps; qp++) { |
| 1680 | + if(!BTL_OPENIB_QP_TYPE_PP(qp)) { |
| 1681 | + MCA_BTL_OPENIB_CLEAN_PENDING_FRAGS( |
| 1682 | + &openib_btl->qps[qp].u.srq_qp.pending_frags[0]); |
| 1683 | + MCA_BTL_OPENIB_CLEAN_PENDING_FRAGS( |
| 1684 | + &openib_btl->qps[qp].u.srq_qp.pending_frags[1]); |
| 1685 | + if (NULL != openib_btl->qps[qp].u.srq_qp.srq) { |
| 1686 | + opal_mutex_t *lock = |
| 1687 | + &mca_btl_openib_component.srq_manager.lock; |
| 1688 | + |
| 1689 | + opal_hash_table_t *srq_addr_table = |
| 1690 | + &mca_btl_openib_component.srq_manager.srq_addr_table; |
| 1691 | + |
| 1692 | + opal_mutex_lock(lock); |
| 1693 | + if (OPAL_SUCCESS != |
| 1694 | + opal_hash_table_remove_value_ptr(srq_addr_table, |
| 1695 | + &openib_btl->qps[qp].u.srq_qp.srq, |
| 1696 | + sizeof(struct ibv_srq *))) { |
| 1697 | + BTL_VERBOSE(("Failed to remove SRQ %d entry from hash table.", qp)); |
| 1698 | + rc = OPAL_ERROR; |
| 1699 | + } |
| 1700 | + opal_mutex_unlock(lock); |
| 1701 | + if (0 != ibv_destroy_srq(openib_btl->qps[qp].u.srq_qp.srq)) { |
| 1702 | + BTL_VERBOSE(("Failed to close SRQ %d", qp)); |
| 1703 | + rc = OPAL_ERROR; |
| 1704 | + } |
1695 | 1705 | } |
1696 | | - } |
1697 | 1706 |
|
1698 | | - OBJ_DESTRUCT(&openib_btl->qps[qp].u.srq_qp.pending_frags[0]); |
1699 | | - OBJ_DESTRUCT(&openib_btl->qps[qp].u.srq_qp.pending_frags[1]); |
| 1707 | + OBJ_DESTRUCT(&openib_btl->qps[qp].u.srq_qp.pending_frags[0]); |
| 1708 | + OBJ_DESTRUCT(&openib_btl->qps[qp].u.srq_qp.pending_frags[1]); |
| 1709 | + } |
1700 | 1710 | } |
1701 | | - } |
1702 | 1711 |
|
1703 | | - /* Finalize the CPC modules on this openib module */ |
1704 | | - for (i = 0; i < openib_btl->num_cpcs; ++i) { |
1705 | | - if (NULL != openib_btl->cpcs[i]->cbm_finalize) { |
1706 | | - openib_btl->cpcs[i]->cbm_finalize(openib_btl, openib_btl->cpcs[i]); |
| 1712 | + /* Finalize the CPC modules on this openib module */ |
| 1713 | + for (i = 0; i < openib_btl->num_cpcs; ++i) { |
| 1714 | + if (NULL != openib_btl->cpcs[i]->cbm_finalize) { |
| 1715 | + openib_btl->cpcs[i]->cbm_finalize(openib_btl, openib_btl->cpcs[i]); |
| 1716 | + } |
| 1717 | + free(openib_btl->cpcs[i]); |
1707 | 1718 | } |
1708 | | - free(openib_btl->cpcs[i]); |
| 1719 | + free(openib_btl->cpcs); |
1709 | 1720 | } |
1710 | | - free(openib_btl->cpcs); |
1711 | 1721 |
|
1712 | 1722 | /* Release device if there are no more users */ |
1713 | 1723 | if(!(--openib_btl->device->btls)) { |
|
0 commit comments