tl 291 opal/mca/btl/uct/btl_uct.h static inline bool mca_btl_uct_tl_supports_rdma (mca_btl_uct_tl_t *tl) tl 293 opal/mca/btl/uct/btl_uct.h return (MCA_BTL_UCT_TL_ATTR(tl, 0).cap.flags & (UCT_IFACE_FLAG_PUT_ZCOPY | UCT_IFACE_FLAG_GET_ZCOPY)) == tl 300 opal/mca/btl/uct/btl_uct.h static inline bool mca_btl_uct_tl_support_am (mca_btl_uct_tl_t *tl) tl 302 opal/mca/btl/uct/btl_uct.h return (MCA_BTL_UCT_TL_ATTR(tl, 0).cap.flags & (UCT_IFACE_FLAG_AM_SHORT | UCT_IFACE_FLAG_AM_BCOPY | UCT_IFACE_FLAG_AM_ZCOPY)); tl 310 opal/mca/btl/uct/btl_uct.h static inline bool mca_btl_uct_tl_supports_conn (mca_btl_uct_tl_t *tl) tl 312 opal/mca/btl/uct/btl_uct.h return (MCA_BTL_UCT_TL_ATTR(tl, 0).cap.flags & (UCT_IFACE_FLAG_AM_SHORT | UCT_IFACE_FLAG_CONNECT_TO_IFACE)) == tl 321 opal/mca/btl/uct/btl_uct.h static inline bool mca_btl_uct_tl_requires_connection_tl (mca_btl_uct_tl_t *tl) tl 323 opal/mca/btl/uct/btl_uct.h return !(MCA_BTL_UCT_TL_ATTR(tl, 0).cap.flags & UCT_IFACE_FLAG_CONNECT_TO_IFACE); tl 157 opal/mca/btl/uct/btl_uct_component.c static size_t mca_btl_uct_tl_modex_size (mca_btl_uct_tl_t *tl) tl 159 opal/mca/btl/uct/btl_uct_component.c const size_t size = strlen (tl->uct_tl_name) + 1; tl 161 opal/mca/btl/uct/btl_uct_component.c if (MCA_BTL_UCT_TL_ATTR(tl, 0).cap.flags & UCT_IFACE_FLAG_CONNECT_TO_IFACE) { tl 163 opal/mca/btl/uct/btl_uct_component.c return (4 + 3 + size + MCA_BTL_UCT_TL_ATTR(tl, 0).device_addr_len + MCA_BTL_UCT_TL_ATTR(tl, 0).iface_addr_len) & ~3; tl 166 opal/mca/btl/uct/btl_uct_component.c return (4 + 3 + size + MCA_BTL_UCT_TL_ATTR(tl, 0).device_addr_len) & ~3; tl 188 opal/mca/btl/uct/btl_uct_component.c static size_t mca_btl_uct_tl_modex_pack (mca_btl_uct_tl_t *tl, uint8_t *modex_data) tl 190 opal/mca/btl/uct/btl_uct_component.c mca_btl_uct_device_context_t *dev_context = tl->uct_dev_contexts[0]; tl 191 opal/mca/btl/uct/btl_uct_component.c size_t modex_size = mca_btl_uct_tl_modex_size (tl); tl 196 opal/mca/btl/uct/btl_uct_component.c strcpy ((char *) modex_data, tl->uct_tl_name); tl 197 opal/mca/btl/uct/btl_uct_component.c modex_data += strlen (tl->uct_tl_name) + 1; tl 205 opal/mca/btl/uct/btl_uct_component.c if (MCA_BTL_UCT_TL_ATTR(tl, 0).cap.flags & UCT_IFACE_FLAG_CONNECT_TO_IFACE) { tl 207 opal/mca/btl/uct/btl_uct_component.c modex_data += MCA_BTL_UCT_TL_ATTR(tl, 0).iface_addr_len; tl 211 opal/mca/btl/uct/btl_uct_component.c modex_data += MCA_BTL_UCT_TL_ATTR(tl, 0).device_addr_len; tl 470 opal/mca/btl/uct/btl_uct_component.c static int mca_btl_uct_tl_progress (mca_btl_uct_tl_t *tl, int starting_index) tl 474 opal/mca/btl/uct/btl_uct_component.c if (NULL == tl) { tl 478 opal/mca/btl/uct/btl_uct_component.c for (int j = 0 ; j < tl->max_device_contexts ; ++j) { tl 479 opal/mca/btl/uct/btl_uct_component.c if (tl->uct_dev_contexts[j]) { tl 480 opal/mca/btl/uct/btl_uct_component.c ret += mca_btl_uct_context_progress (tl->uct_dev_contexts[j]); tl 26 opal/mca/btl/uct/btl_uct_device_context.h mca_btl_uct_device_context_t *mca_btl_uct_context_create (mca_btl_uct_module_t *module, mca_btl_uct_tl_t *tl, int context_id, bool enable_progress); tl 87 opal/mca/btl/uct/btl_uct_device_context.h mca_btl_uct_module_get_tl_context_specific (mca_btl_uct_module_t *module, mca_btl_uct_tl_t *tl, int context_id) tl 89 opal/mca/btl/uct/btl_uct_device_context.h mca_btl_uct_device_context_t *context = tl->uct_dev_contexts[context_id]; tl 93 opal/mca/btl/uct/btl_uct_device_context.h context = tl->uct_dev_contexts[context_id]; tl 95 opal/mca/btl/uct/btl_uct_device_context.h context = tl->uct_dev_contexts[context_id] = mca_btl_uct_context_create (module, tl, context_id, true); tl 127 opal/mca/btl/uct/btl_uct_endpoint.c static int mca_btl_uct_endpoint_connect_iface (mca_btl_uct_module_t *uct_btl, mca_btl_uct_tl_t *tl, tl 137 opal/mca/btl/uct/btl_uct_endpoint.c device_addr = (uct_device_addr_t *) ((uintptr_t) iface_addr + MCA_BTL_UCT_TL_ATTR(tl, tl_context->context_id).iface_addr_len); tl 234 opal/mca/btl/uct/btl_uct_endpoint.c mca_btl_uct_tl_t *tl, mca_btl_uct_device_context_t *tl_context, tl 238 opal/mca/btl/uct/btl_uct_endpoint.c size_t request_length = sizeof (mca_btl_uct_conn_req_t) + MCA_BTL_UCT_TL_ATTR(tl, tl_context->context_id).ep_addr_len; tl 281 opal/mca/btl/uct/btl_uct_endpoint.c request->tl_index = tl->tl_index; tl 299 opal/mca/btl/uct/btl_uct_endpoint.c tl->uct_tl_name, tl_context->context_id, ep_addr)); tl 335 opal/mca/btl/uct/btl_uct_endpoint.c mca_btl_uct_tl_t *tl = (uct_btl->rdma_tl && tl_index == uct_btl->rdma_tl->tl_index) ? tl 337 opal/mca/btl/uct/btl_uct_endpoint.c mca_btl_uct_device_context_t *tl_context = mca_btl_uct_module_get_tl_context_specific (uct_btl, tl, context_id); tl 348 opal/mca/btl/uct/btl_uct_endpoint.c if (OPAL_UNLIKELY(NULL == tl)) { tl 401 opal/mca/btl/uct/btl_uct_endpoint.c tl_data = (tl == uct_btl->rdma_tl) ? rdma_tl_data : am_tl_data; tl 409 opal/mca/btl/uct/btl_uct_endpoint.c if (!mca_btl_uct_tl_requires_connection_tl (tl)) { tl 410 opal/mca/btl/uct/btl_uct_endpoint.c rc = mca_btl_uct_endpoint_connect_iface (uct_btl, tl, tl_context, tl_endpoint, tl_data); tl 412 opal/mca/btl/uct/btl_uct_endpoint.c rc = mca_btl_uct_endpoint_connect_endpoint (uct_btl, endpoint, tl, tl_context, tl_endpoint, tl 71 opal/mca/btl/uct/btl_uct_tl.c static void mca_btl_uct_module_set_atomic_flags (mca_btl_uct_module_t *module, mca_btl_uct_tl_t *tl) tl 73 opal/mca/btl/uct/btl_uct_tl.c uint64_t cap_flags = MCA_BTL_UCT_TL_ATTR(tl, 0).cap.flags; tl 76 opal/mca/btl/uct/btl_uct_tl.c uint64_t atomic_flags32 = MCA_BTL_UCT_TL_ATTR(tl, 0).cap.atomic32.fop_flags; tl 77 opal/mca/btl/uct/btl_uct_tl.c uint64_t atomic_flags64 = MCA_BTL_UCT_TL_ATTR(tl, 0).cap.atomic64.fop_flags; tl 120 opal/mca/btl/uct/btl_uct_tl.c static void mca_btl_uct_module_set_atomic_flags (mca_btl_uct_module_t *module, mca_btl_uct_tl_t *tl) tl 122 opal/mca/btl/uct/btl_uct_tl.c uint64_t cap_flags = MCA_BTL_UCT_TL_ATTR(tl, 0).cap.flags; tl 140 opal/mca/btl/uct/btl_uct_tl.c static void mca_btl_uct_tl_constructor (mca_btl_uct_tl_t *tl) tl 142 opal/mca/btl/uct/btl_uct_tl.c memset ((void *)((uintptr_t) tl + sizeof (tl->super)), 0, sizeof (*tl) - sizeof (tl->super)); tl 143 opal/mca/btl/uct/btl_uct_tl.c OBJ_CONSTRUCT(&tl->tl_lock, opal_mutex_t); tl 146 opal/mca/btl/uct/btl_uct_tl.c static void mca_btl_uct_tl_destructor (mca_btl_uct_tl_t *tl) tl 148 opal/mca/btl/uct/btl_uct_tl.c assert (((opal_object_t *) tl)->obj_reference_count == 0); tl 151 opal/mca/btl/uct/btl_uct_tl.c if (NULL != tl->uct_dev_contexts[context_id]) { tl 152 opal/mca/btl/uct/btl_uct_tl.c mca_btl_uct_context_destroy (tl->uct_dev_contexts[context_id]); tl 156 opal/mca/btl/uct/btl_uct_tl.c if (tl->uct_md) { tl 157 opal/mca/btl/uct/btl_uct_tl.c OBJ_RELEASE(tl->uct_md); tl 160 opal/mca/btl/uct/btl_uct_tl.c free (tl->uct_dev_contexts); tl 161 opal/mca/btl/uct/btl_uct_tl.c free (tl->uct_tl_name); tl 162 opal/mca/btl/uct/btl_uct_tl.c free (tl->uct_dev_name); tl 164 opal/mca/btl/uct/btl_uct_tl.c if (NULL != tl->uct_tl_config) { tl 165 opal/mca/btl/uct/btl_uct_tl.c uct_config_release (tl->uct_tl_config); tl 168 opal/mca/btl/uct/btl_uct_tl.c OBJ_DESTRUCT(&tl->tl_lock); tl 272 opal/mca/btl/uct/btl_uct_tl.c mca_btl_uct_device_context_t *mca_btl_uct_context_create (mca_btl_uct_module_t *module, mca_btl_uct_tl_t *tl, int context_id, bool enable_progress) tl 278 opal/mca/btl/uct/btl_uct_tl.c .mode = {.device = {.tl_name = tl->uct_tl_name, tl 279 opal/mca/btl/uct/btl_uct_tl.c .dev_name = tl->uct_dev_name}}}; tl 283 opal/mca/btl/uct/btl_uct_tl.c .mode = {.device = {.tl_name = tl->uct_tl_name, tl 284 opal/mca/btl/uct/btl_uct_tl.c .dev_name = tl->uct_dev_name}}}; tl 321 opal/mca/btl/uct/btl_uct_tl.c ucs_status = uct_iface_open (tl->uct_md->uct_md, context->uct_worker, &iface_params, tl 322 opal/mca/btl/uct/btl_uct_tl.c tl->uct_tl_config, &context->uct_iface); tl 337 opal/mca/btl/uct/btl_uct_tl.c if (context_id > 0 && tl == module->am_tl) { tl 338 opal/mca/btl/uct/btl_uct_tl.c BTL_VERBOSE(("installing AM handler for tl %p context id %d", (void *) tl, context_id)); tl 344 opal/mca/btl/uct/btl_uct_tl.c BTL_VERBOSE(("enabling progress for tl %p context id %d", (void *) tl, context_id)); tl 378 opal/mca/btl/uct/btl_uct_tl.c mca_btl_uct_tl_t *tl = OBJ_NEW(mca_btl_uct_tl_t); tl 380 opal/mca/btl/uct/btl_uct_tl.c if (OPAL_UNLIKELY(NULL == tl)) { tl 385 opal/mca/btl/uct/btl_uct_tl.c tl->uct_md = md; tl 388 opal/mca/btl/uct/btl_uct_tl.c tl->uct_tl_name = strdup (tl_desc->tl_name); tl 389 opal/mca/btl/uct/btl_uct_tl.c tl->uct_dev_name = strdup (tl_desc->dev_name); tl 390 opal/mca/btl/uct/btl_uct_tl.c tl->priority = priority; tl 392 opal/mca/btl/uct/btl_uct_tl.c tl->uct_dev_contexts = calloc (MCA_BTL_UCT_MAX_WORKERS, sizeof (tl->uct_dev_contexts[0])); tl 393 opal/mca/btl/uct/btl_uct_tl.c if (NULL == tl->uct_dev_contexts) { tl 394 opal/mca/btl/uct/btl_uct_tl.c OBJ_RELEASE(tl); tl 398 opal/mca/btl/uct/btl_uct_tl.c (void) uct_md_iface_config_read (md->uct_md, tl_desc->tl_name, NULL, NULL, &tl->uct_tl_config); tl 401 opal/mca/btl/uct/btl_uct_tl.c tl->uct_dev_contexts[0] = mca_btl_uct_context_create (module, tl, 0, false); tl 402 opal/mca/btl/uct/btl_uct_tl.c if (NULL == tl->uct_dev_contexts[0]) { tl 404 opal/mca/btl/uct/btl_uct_tl.c OBJ_RELEASE(tl); tl 409 opal/mca/btl/uct/btl_uct_tl.c (unsigned long) MCA_BTL_UCT_TL_ATTR(tl, 0).cap.flags)); tl 411 opal/mca/btl/uct/btl_uct_tl.c return tl; tl 414 opal/mca/btl/uct/btl_uct_tl.c static void mca_btl_uct_set_tl_rdma (mca_btl_uct_module_t *module, mca_btl_uct_tl_t *tl) tl 416 opal/mca/btl/uct/btl_uct_tl.c BTL_VERBOSE(("tl %s is suitable for RDMA", tl->uct_tl_name)); tl 418 opal/mca/btl/uct/btl_uct_tl.c mca_btl_uct_module_set_atomic_flags (module, tl); tl 420 opal/mca/btl/uct/btl_uct_tl.c module->super.btl_get_limit = MCA_BTL_UCT_TL_ATTR(tl, 0).cap.get.max_zcopy; tl 421 opal/mca/btl/uct/btl_uct_tl.c if (MCA_BTL_UCT_TL_ATTR(tl, 0).cap.get.max_bcopy) { tl 423 opal/mca/btl/uct/btl_uct_tl.c module->super.btl_get_local_registration_threshold = MCA_BTL_UCT_TL_ATTR(tl, 0).cap.get.max_bcopy; tl 426 opal/mca/btl/uct/btl_uct_tl.c module->super.btl_get_alignment = opal_next_poweroftwo_inclusive (MCA_BTL_UCT_TL_ATTR(tl, 0).cap.get.min_zcopy); tl 429 opal/mca/btl/uct/btl_uct_tl.c module->super.btl_put_limit = MCA_BTL_UCT_TL_ATTR(tl, 0).cap.put.max_zcopy; tl 433 opal/mca/btl/uct/btl_uct_tl.c module->super.btl_put_local_registration_threshold = MCA_BTL_UCT_TL_ATTR(tl, 0).cap.put.max_bcopy; tl 435 opal/mca/btl/uct/btl_uct_tl.c module->rdma_tl = tl; tl 436 opal/mca/btl/uct/btl_uct_tl.c OBJ_RETAIN(tl); tl 438 opal/mca/btl/uct/btl_uct_tl.c tl->tl_index = (module->am_tl && tl != module->am_tl) ? 1 : 0; tl 439 opal/mca/btl/uct/btl_uct_tl.c module->comm_tls[tl->tl_index] = tl; tl 440 opal/mca/btl/uct/btl_uct_tl.c if (tl->max_device_contexts <= 1) { tl 441 opal/mca/btl/uct/btl_uct_tl.c tl->max_device_contexts = mca_btl_uct_component.num_contexts_per_module; tl 445 opal/mca/btl/uct/btl_uct_tl.c static void mca_btl_uct_set_tl_am (mca_btl_uct_module_t *module, mca_btl_uct_tl_t *tl) tl 447 opal/mca/btl/uct/btl_uct_tl.c BTL_VERBOSE(("tl %s is suitable for active-messaging", tl->uct_tl_name)); tl 449 opal/mca/btl/uct/btl_uct_tl.c if (module->rdma_tl == tl) { tl 452 opal/mca/btl/uct/btl_uct_tl.c module->am_tl = tl; tl 453 opal/mca/btl/uct/btl_uct_tl.c OBJ_RETAIN(tl); tl 455 opal/mca/btl/uct/btl_uct_tl.c uct_iface_set_am_handler (tl->uct_dev_contexts[0]->uct_iface, MCA_BTL_UCT_FRAG, tl 456 opal/mca/btl/uct/btl_uct_tl.c mca_btl_uct_am_handler, tl->uct_dev_contexts[0], UCT_CB_FLAG_ASYNC); tl 458 opal/mca/btl/uct/btl_uct_tl.c tl->tl_index = (module->rdma_tl && tl != module->rdma_tl) ? 1 : 0; tl 459 opal/mca/btl/uct/btl_uct_tl.c module->comm_tls[tl->tl_index] = tl; tl 460 opal/mca/btl/uct/btl_uct_tl.c if (tl->max_device_contexts <= 1) { tl 461 opal/mca/btl/uct/btl_uct_tl.c tl->max_device_contexts = mca_btl_uct_component.num_contexts_per_module; tl 464 opal/mca/btl/uct/btl_uct_tl.c module->super.btl_max_send_size = MCA_BTL_UCT_TL_ATTR(tl, 0).cap.am.max_zcopy - sizeof (mca_btl_uct_am_header_t); tl 465 opal/mca/btl/uct/btl_uct_tl.c module->super.btl_eager_limit = MCA_BTL_UCT_TL_ATTR(tl, 0).cap.am.max_bcopy - sizeof (mca_btl_uct_am_header_t); tl 468 opal/mca/btl/uct/btl_uct_tl.c static int mca_btl_uct_set_tl_conn (mca_btl_uct_module_t *module, mca_btl_uct_tl_t *tl) tl 472 opal/mca/btl/uct/btl_uct_tl.c BTL_VERBOSE(("tl %s is suitable for making connections", tl->uct_tl_name)); tl 474 opal/mca/btl/uct/btl_uct_tl.c module->conn_tl = tl; tl 480 opal/mca/btl/uct/btl_uct_tl.c OBJ_RETAIN(tl); tl 482 opal/mca/btl/uct/btl_uct_tl.c if (!tl->max_device_contexts) { tl 485 opal/mca/btl/uct/btl_uct_tl.c tl->max_device_contexts = 1; tl 491 opal/mca/btl/uct/btl_uct_tl.c static int mca_btl_uct_evaluate_tl (mca_btl_uct_module_t *module, mca_btl_uct_tl_t *tl) tl 495 opal/mca/btl/uct/btl_uct_tl.c BTL_VERBOSE(("evaluating tl %s", tl->uct_tl_name)); tl 496 opal/mca/btl/uct/btl_uct_tl.c if (NULL == module->rdma_tl && mca_btl_uct_tl_supports_rdma (tl)) { tl 497 opal/mca/btl/uct/btl_uct_tl.c mca_btl_uct_set_tl_rdma (module, tl); tl 500 opal/mca/btl/uct/btl_uct_tl.c if (NULL == module->am_tl && mca_btl_uct_tl_support_am (tl)) { tl 501 opal/mca/btl/uct/btl_uct_tl.c mca_btl_uct_set_tl_am (module, tl); tl 504 opal/mca/btl/uct/btl_uct_tl.c if (NULL == module->conn_tl && mca_btl_uct_tl_supports_conn (tl)) { tl 505 opal/mca/btl/uct/btl_uct_tl.c rc = mca_btl_uct_set_tl_conn (module, tl); tl 511 opal/mca/btl/uct/btl_uct_tl.c if (tl == module->rdma_tl || tl == module->am_tl) { tl 512 opal/mca/btl/uct/btl_uct_tl.c BTL_VERBOSE(("tl has flags 0x%" PRIx64, MCA_BTL_UCT_TL_ATTR(tl, 0).cap.flags)); tl 513 opal/mca/btl/uct/btl_uct_tl.c module->super.btl_flags |= mca_btl_uct_module_flags (MCA_BTL_UCT_TL_ATTR(tl, 0).cap.flags); tl 519 opal/mca/btl/uct/btl_uct_tl.c module->super.btl_bandwidth = (uint32_t) (MCA_BTL_UCT_TL_ATTR(tl, 0).bandwidth / 1048576.0); tl 524 opal/mca/btl/uct/btl_uct_tl.c if (tl == module->rdma_tl || tl == module->am_tl || tl == module->conn_tl) { tl 526 opal/mca/btl/uct/btl_uct_tl.c mca_btl_uct_context_enable_progress (tl->uct_dev_contexts[0]); tl 535 opal/mca/btl/uct/btl_uct_tl.c mca_btl_uct_tl_t *tl; tl 591 opal/mca/btl/uct/btl_uct_tl.c tl = mca_btl_uct_create_tl (module, md, tl_descs + i, priority); tl 593 opal/mca/btl/uct/btl_uct_tl.c if (tl) { tl 594 opal/mca/btl/uct/btl_uct_tl.c opal_list_append (&tl_list, &tl->super); tl 608 opal/mca/btl/uct/btl_uct_tl.c OPAL_LIST_FOREACH(tl, &tl_list, mca_btl_uct_tl_t) { tl 609 opal/mca/btl/uct/btl_uct_tl.c mca_btl_uct_evaluate_tl (module, tl); tl 333 opal/mca/btl/uct/btl_uct_types.h #define MCA_BTL_UCT_TL_ATTR(tl, context_id) (tl)->uct_dev_contexts[(context_id)]->uct_iface_attr