@@ -1747,11 +1747,28 @@ ucp_update_memtype_md_map(uint64_t mem_types_map, ucs_memory_type_t mem_type,
17471747 }
17481748}
17491749
1750+ /* Returns the MDs that are part of the fallback mechanism */
1751+ static ucp_md_map_t ucp_fill_fallback_reg_nonblock_mds (ucp_context_h context )
1752+ {
1753+ ucp_md_map_t md_map = 0 ;
1754+ ucp_rsc_index_t tl_idx ;
1755+
1756+ for (tl_idx = 0 ; tl_idx < context -> num_tls ; tl_idx ++ ) {
1757+ if (context -> tl_rscs [tl_idx ].tl_rsc .dev_type == UCT_DEVICE_TYPE_NET ) {
1758+ /* Find all memory domains with at least one network device. */
1759+ md_map |= UCS_BIT (context -> tl_rscs [tl_idx ].md_index );
1760+ }
1761+ }
1762+
1763+ return (md_map == 0 ) ? ~md_map : md_map ;
1764+ }
1765+
17501766static void ucp_fill_resources_reg_md_map_update (ucp_context_h context )
17511767{
17521768 UCS_STRING_BUFFER_ONSTACK (strb , 256 );
17531769 ucp_md_map_t reg_block_md_map ;
17541770 ucp_md_map_t reg_nonblock_md_map ;
1771+ ucp_md_map_t fallback_reg_nonblock_md_map ;
17551772 ucs_memory_type_t mem_type ;
17561773 ucp_md_index_t md_index ;
17571774 const uct_md_attr_v2_t * md_attr ;
@@ -1767,6 +1784,8 @@ static void ucp_fill_resources_reg_md_map_update(ucp_context_h context)
17671784 }
17681785 }
17691786
1787+ fallback_reg_nonblock_md_map = ucp_fill_fallback_reg_nonblock_mds (context );
1788+
17701789 ucs_memory_type_for_each (mem_type ) {
17711790 reg_block_md_map = 0 ;
17721791 reg_nonblock_md_map = 0 ;
@@ -1806,7 +1825,8 @@ static void ucp_fill_resources_reg_md_map_update(ucp_context_h context)
18061825 * buffers for rndv pipeline protocols). */
18071826 context -> reg_block_md_map [mem_type ] = reg_block_md_map ;
18081827
1809- if ((reg_nonblock_md_map == 0 ) && context -> config .ext .reg_nb_fallback ) {
1828+ if (context -> config .ext .reg_nb_fallback &&
1829+ ((reg_nonblock_md_map & fallback_reg_nonblock_md_map ) == 0 )) {
18101830 /* Fallback to blocking registration if no MD supports non-blocking
18111831 * registration */
18121832 reg_nonblock_md_map = reg_block_md_map ;
0 commit comments