/* * Open the component */ static int iboffload_open(void) { int rc; /* local variables */ mca_bcol_iboffload_component_t *cm = &mca_bcol_iboffload_component; IBOFFLOAD_VERBOSE(10, ("Open Iboffload component.\n")); cm->super.priority = 100; cm->super.n_net_contexts = 0; cm->super.network_contexts = NULL; OBJ_CONSTRUCT(&cm->recv_wrs.lock, opal_mutex_t); /* construct lists */ OBJ_CONSTRUCT(&cm->devices, opal_pointer_array_t); rc = opal_pointer_array_init(&cm->devices, 10, INT_MAX, 10); if (OMPI_SUCCESS != rc) { goto close_device; } /* load mca parametres */ rc = mca_bcol_iboffload_register_params(); if (OMPI_SUCCESS != rc) { goto close_device; } /* Register the progress function */ rc = opal_progress_register(mca_bcol_iboffload_component_progress); if (OMPI_SUCCESS != rc) { IBOFFLOAD_ERROR(("Failed to register the progress function" " for iboffload component.\n")); goto close_device; } map_ompi_to_ib_dtype(); map_ompi_to_ib_op_type(); /* The init_done set to true on first component usage */ cm->init_done = false; return OMPI_SUCCESS; close_device: OBJ_DESTRUCT(&cm->devices); OBJ_DESTRUCT(&cm->recv_wrs.lock); return rc; }
/* * Open the component */ static int iboffload_open(void) { int rc; /* local variables */ mca_bcol_iboffload_component_t *cm = &mca_bcol_iboffload_component; IBOFFLOAD_VERBOSE(10, ("Open Iboffload component.\n")); (void) mca_bcol_iboffload_verify_params(); cm->super.priority = 100; cm->super.n_net_contexts = 0; cm->super.network_contexts = NULL; OBJ_CONSTRUCT(&cm->recv_wrs.lock, opal_mutex_t); /* construct lists */ OBJ_CONSTRUCT(&cm->devices, opal_pointer_array_t); rc = opal_pointer_array_init(&cm->devices, 10, INT_MAX, 10); if (OMPI_SUCCESS != rc) { goto close_device; } /* Check MCA parameters */ if (0 != (mca_bcol_iboffload_component.exchange_tree_order & (mca_bcol_iboffload_component.exchange_tree_order - 1))) { IBOFFLOAD_ERROR(("Warning: ibcol_iboffload_exchange_tree_order is %d which is not a power of 2, setting it to 2", mca_bcol_iboffload_component.exchange_tree_order)); mca_bcol_iboffload_component.exchange_tree_order = 2; } /* Pasha: Since we do not have max inline check like in openib, I will put some dummy check here. All mlnx devices support at least 512b */ if (mca_bcol_iboffload_component.max_inline_data > 512) { IBOFFLOAD_ERROR(("Warning the inline %d, is to big and unsupported", mca_bcol_iboffload_component.max_inline_data)); rc = OMPI_ERROR; goto close_device; } /* Register the progress function */ rc = opal_progress_register(mca_bcol_iboffload_component_progress); if (OMPI_SUCCESS != rc) { IBOFFLOAD_ERROR(("Failed to register the progress function" " for iboffload component.\n")); goto close_device; } map_ompi_to_ib_dtype(); map_ompi_to_ib_op_type(); /* The init_done set to true on first component usage */ cm->init_done = false; return OMPI_SUCCESS; close_device: OBJ_DESTRUCT(&cm->devices); OBJ_DESTRUCT(&cm->recv_wrs.lock); return rc; }