@@ -444,6 +444,8 @@ ucp_wireup_match_p2p_lanes(ucp_ep_h ep,
444444 const unsigned * addr_indices ,
445445 ucp_lane_index_t * lanes2remote )
446446{
447+ UCS_STRING_BUFFER_ONSTACK (lane_strb , 64 );
448+ ucp_context_h context = ep -> worker -> context ;
447449 const ucp_address_entry_t * address ;
448450 unsigned address_index ;
449451 ucp_lane_index_t lane , remote_lane , num_lanes ;
@@ -474,21 +476,29 @@ ucp_wireup_match_p2p_lanes(ucp_ep_h ep,
474476 /* Select next remote ep address within the address_index as specified
475477 * by addr_indices argument
476478 */
477- address_index = addr_indices [lane ];
478- address = & remote_address -> address_list [address_index ];
479- ep_addr_index = ep_addr_indexes [address_index ]++ ;
480- ucs_assertv (ep_addr_index < address -> num_ep_addrs ,
481- "lane=%d/%d tl_name_csum=0x%02x address_index=%u "
482- "ep_addr_index=%u num_ep_addrs=%u" ,
483- lane , num_lanes , address -> tl_name_csum , address_index ,
484- ep_addr_index , address -> num_ep_addrs );
479+ address_index = addr_indices [lane ];
480+ address = & remote_address -> address_list [address_index ];
481+ ep_addr_index = ep_addr_indexes [address_index ]++ ;
482+ if (ep_addr_index >= address -> num_ep_addrs ) {
483+ /* The peer packs one ep address per own lane on that resource, so
484+ * this ep selected more lanes towards it than the peer provides */
485+ ucs_fatal (UCP_EP_LANE_FMT " -> addr[%u] %s: no ep address %u,"
486+ " only %u provided" ,
487+ UCP_EP_LANE_ARG (ep , lane , & lane_strb ), address_index ,
488+ ucp_find_tl_name_by_csum (context , address -> tl_name_csum ),
489+ ep_addr_index , address -> num_ep_addrs );
490+ }
491+
485492 remote_lane = address -> ep_addrs [ep_addr_index ].lane ;
486493 lanes2remote [lane ] = remote_lane ;
487494
488495 if (used_remote_lanes & UCS_BIT (remote_lane )) {
489- ucs_fatal ("ep %p: remote lane %d is used more than once" , ep ,
496+ ucs_fatal (UCP_EP_LANE_FMT " -> addr[%u]: remote lane %d is"
497+ " used more than once" ,
498+ UCP_EP_LANE_ARG (ep , lane , & lane_strb ), address_index ,
490499 remote_lane );
491500 }
501+
492502 used_remote_lanes |= UCS_BIT (remote_lane );
493503
494504 ucs_trace ("ep %p: lane[%d]->remote_lane[%d] (address[%d].ep_address[%d])" ,
@@ -524,6 +534,7 @@ ucp_wireup_connect_local(ucp_ep_h ep,
524534 const ucp_unpacked_address_t * remote_address ,
525535 const ucp_lane_index_t * lanes2remote )
526536{
537+ UCS_STRING_BUFFER_ONSTACK (lane_strb , 64 );
527538 ucp_lane_index_t lane , remote_lane ;
528539 const ucp_address_entry_t * address_entry ;
529540 const ucp_address_entry_ep_addr_t * ep_entry ;
@@ -542,8 +553,9 @@ ucp_wireup_connect_local(ucp_ep_h ep,
542553 status = ucp_wireup_find_remote_p2p_addr (ep , remote_lane , remote_address ,
543554 & address_entry , & ep_entry );
544555 if (status != UCS_OK ) {
545- ucs_error ("ep %p: no remote ep address for lane[%d]->remote_lane[%d]" ,
546- ep , lane , remote_lane );
556+ ucs_error (UCP_EP_LANE_FMT ": no remote ep address for remote"
557+ " lane %d" ,
558+ UCP_EP_LANE_ARG (ep , lane , & lane_strb ), remote_lane );
547559 goto out ;
548560 }
549561
0 commit comments