/* * Simple utility in a .c file, mainly so that inline functions in .h * files don't need to include the show_help header file. */ void opal_btl_usnic_util_abort(const char *msg, const char *file, int line) { opal_show_help("help-mpi-btl-usnic.txt", "internal error after init", true, opal_process_info.nodename, file, line, msg); opal_btl_usnic_exit(NULL); /* Never returns */ }
/* * Construct/destruct an endpoint structure. */ static void endpoint_construct(mca_btl_base_endpoint_t* endpoint) { int i; endpoint->endpoint_module = NULL; endpoint->endpoint_proc = NULL; endpoint->endpoint_proc_index = -1; endpoint->endpoint_exiting = false; endpoint->endpoint_connectivity_checked = false; endpoint->endpoint_on_all_endpoints = false; for (i = 0; i < USNIC_NUM_CHANNELS; ++i) { endpoint->endpoint_remote_modex.ports[i] = 0; endpoint->endpoint_remote_addrs[i] = FI_ADDR_NOTAVAIL; } endpoint->endpoint_send_credits = 8; /* list of fragments queued to be sent */ OBJ_CONSTRUCT(&endpoint->endpoint_frag_send_queue, opal_list_t); endpoint->endpoint_next_frag_id = 1; endpoint->endpoint_acktime = 0; /* endpoint starts not-ready-to-send */ endpoint->endpoint_ready_to_send = 0; endpoint->endpoint_ack_needed = false; /* clear sent/received sequence number array */ memset(endpoint->endpoint_sent_segs, 0, sizeof(endpoint->endpoint_sent_segs)); memset(endpoint->endpoint_rcvd_segs, 0, sizeof(endpoint->endpoint_rcvd_segs)); /* * Make a new OPAL hotel for this module * "hotel" is a construct used for triggering segment retransmission * due to timeout */ OBJ_CONSTRUCT(&endpoint->endpoint_hotel, opal_hotel_t); opal_hotel_init(&endpoint->endpoint_hotel, WINDOW_SIZE, mca_btl_usnic_component.retrans_timeout, 0, opal_btl_usnic_ack_timeout); /* Setup this endpoint's list links */ OBJ_CONSTRUCT(&(endpoint->endpoint_ack_li), opal_list_item_t); OBJ_CONSTRUCT(&(endpoint->endpoint_endpoint_li), opal_list_item_t); endpoint->endpoint_ack_needed = false; /* fragment reassembly info */ endpoint->endpoint_rx_frag_info = calloc(sizeof(struct opal_btl_usnic_rx_frag_info_t), MAX_ACTIVE_FRAGS); assert(NULL != endpoint->endpoint_rx_frag_info); if (OPAL_UNLIKELY(endpoint->endpoint_rx_frag_info == NULL)) { BTL_ERROR(("calloc returned NULL -- this should not happen!")); opal_btl_usnic_exit(endpoint->endpoint_module); /* Does not return */ } }