diff --git a/prov/rxm/src/rxm_domain.c b/prov/rxm/src/rxm_domain.c index 8fe324f24c7..84042899946 100644 --- a/prov/rxm/src/rxm_domain.c +++ b/prov/rxm/src/rxm_domain.c @@ -844,6 +844,8 @@ int rxm_domain_open(struct fid_fabric *fabric, struct fi_info *info, struct rxm_fabric *rxm_fabric; struct fi_info *msg_info, *base_info; struct fi_peer_domain_context peer_context; + struct fi_collective_attr attr; + int ret; rxm_domain = calloc(1, sizeof(*rxm_domain)); @@ -893,7 +895,18 @@ int rxm_domain_open(struct fid_fabric *fabric, struct fi_info *info, FI_PEER, &peer_context); if (ret) goto err5; - rxm_domain->offload_coll_mask = 1; + + attr.op = FI_MIN; + attr.datatype = FI_INT8; + attr.datatype_attr.count =1; + attr.datatype_attr.size =1; + attr.mode = 0; + for (int i = FI_BARRIER; i < FI_GATHER; i++) { + ret = fi_query_collective(rxm_domain->offload_coll_domain, + i, &attr, 0); + if (FI_SUCCESS == ret) + rxm_domain->offload_coll_mask |= BIT(i); + } } } diff --git a/prov/rxm/src/rxm_ep.c b/prov/rxm/src/rxm_ep.c index 8d4262dbd24..ae3031419eb 100644 --- a/prov/rxm/src/rxm_ep.c +++ b/prov/rxm/src/rxm_ep.c @@ -1885,6 +1885,7 @@ int rxm_endpoint(struct fid_domain *domain, struct fi_info *info, peer_context.peer_ops = NULL; if (rxm_domain->offload_coll_mask) { + rxm_fabric->offload_coll_info->mode |= FI_PEER_TRANSFER; ret = fi_endpoint(rxm_domain->offload_coll_domain, rxm_fabric->offload_coll_info, &rxm_ep->offload_coll_ep,