@@ -766,8 +766,8 @@ static unsigned long uct_ib_device_get_ib_gid_index(uct_ib_md_t *md)
766766 }
767767}
768768
769- ucs_status_t uct_ib_device_port_check ( uct_ib_device_t * dev , uint8_t port_num ,
770- unsigned flags )
769+ static ucs_status_t
770+ uct_ib_device_port_check ( uct_ib_device_t * dev , uint8_t port_num , unsigned flags )
771771{
772772 uct_ib_md_t * md = ucs_container_of (dev , uct_ib_md_t , dev );
773773 const uct_ib_device_spec_t * dev_info ;
@@ -827,6 +827,11 @@ ucs_status_t uct_ib_device_port_check(uct_ib_device_t *dev, uint8_t port_num,
827827 status = uct_ib_device_query_gid (dev , port_num , gid_index , & gid ,
828828 UCS_LOG_LEVEL_DIAG );
829829 if (status != UCS_OK ) {
830+ if (status == UCS_ERR_INVALID_ADDR ) {
831+ ucs_trace ("%s:%d (%s) has invalid address" , uct_ib_device_name (dev ),
832+ port_num , dev_info -> name );
833+ }
834+
830835 return status ;
831836 }
832837
@@ -934,6 +939,10 @@ uct_ib_device_query_gid_info(struct ibv_context *ctx, const char *dev_name,
934939
935940 ret = ibv_query_gid (ctx , port_num , gid_index , & info -> gid );
936941 if (ret == 0 ) {
942+ if (!uct_ib_device_is_gid_valid (& info -> gid )) {
943+ return UCS_ERR_INVALID_ADDR ;
944+ }
945+
937946 ret = ucs_read_file (buf , sizeof (buf ) - 1 , 1 ,
938947 UCT_IB_DEVICE_SYSFS_GID_TYPE_FMT ,
939948 dev_name , port_num , gid_index );
@@ -1178,6 +1187,10 @@ uct_ib_device_select_gid(uct_ib_device_t *dev, uint8_t port_num,
11781187 status = uct_ib_device_query_gid_info (dev -> ibv_context ,
11791188 uct_ib_device_name (dev ),
11801189 port_num , i , & gid_info_tmp );
1190+ if (status == UCS_ERR_INVALID_ADDR ) {
1191+ continue ;
1192+ }
1193+
11811194 if (status != UCS_OK ) {
11821195 goto out ;
11831196 }
@@ -1430,18 +1443,14 @@ ucs_status_t uct_ib_device_query_gid(uct_ib_device_t *dev, uint8_t port_num,
14301443
14311444 status = uct_ib_device_query_gid_info (dev -> ibv_context , uct_ib_device_name (dev ),
14321445 port_num , gid_index , & gid_info );
1433- if (status != UCS_OK ) {
1434- return status ;
1435- }
1436-
1437- if (!uct_ib_device_is_gid_valid (& gid_info .gid )) {
1446+ if (status == UCS_OK ) {
1447+ * gid = gid_info .gid ;
1448+ } else if (status == UCS_ERR_INVALID_ADDR ) {
14381449 ucs_log (error_level , "invalid gid[%d] on %s:%d" , gid_index ,
14391450 uct_ib_device_name (dev ), port_num );
1440- return UCS_ERR_INVALID_ADDR ;
14411451 }
14421452
1443- * gid = gid_info .gid ;
1444- return UCS_OK ;
1453+ return status ;
14451454}
14461455
14471456const char * uct_ib_wc_status_str (enum ibv_wc_status wc_status )
0 commit comments