@@ -421,6 +421,10 @@ nixlLibfabricRail::nixlLibfabricRail(const std::string &device,
421421 // TCP provider doesn't support FI_MR_PROV_KEY or FI_MR_VIRT_ADDR, use basic mode
422422 hints->domain_attr ->mr_mode = FI_MR_LOCAL | FI_MR_ALLOCATED;
423423 hints->domain_attr ->mr_key_size = 0 ; // Let provider decide
424+ } else if (provider == " cxi" ) {
425+ hints->caps |= FI_RMA_EVENT;
426+ hints->domain_attr ->mr_mode =
427+ FI_MR_LOCAL | FI_MR_HMEM | FI_MR_VIRT_ADDR | FI_MR_ALLOCATED | FI_MR_PROV_KEY | FI_MR_ENDPOINT;
424428 } else {
425429 // EFA and other providers support advanced memory registration
426430 hints->domain_attr ->mr_mode =
@@ -1347,8 +1351,15 @@ nixlLibfabricRail::registerMemory(void *buffer,
13471351 iov.iov_len = length;
13481352 mr_attr.mr_iov = &iov;
13491353 mr_attr.iov_count = 1 ;
1354+ int ret = 0 ;
1355+
1356+ if (provider_name == " cxi" ) {
1357+ ret = fi_mr_regattr (domain, &mr_attr, FI_RMA_EVENT, &mr);
1358+ }
1359+ else {
1360+ ret = fi_mr_regattr (domain, &mr_attr, 0 , &mr);
1361+ }
13501362
1351- int ret = fi_mr_regattr (domain, &mr_attr, 0 , &mr);
13521363 if (ret) {
13531364 NIXL_ERROR << " fi_mr_reg failed on rail " << rail_id << " : " << fi_strerror (-ret)
13541365 << " (buffer=" << buffer << " , length=" << length
@@ -1357,6 +1368,24 @@ nixlLibfabricRail::registerMemory(void *buffer,
13571368 }
13581369
13591370 *mr_out = mr;
1371+
1372+ if (info->domain_attr ->mr_mode & FI_MR_ENDPOINT) {
1373+ ret = fi_mr_bind (mr, &endpoint->fid , 0 );
1374+ if (ret) {
1375+ NIXL_ERROR << " fi_mr_bind failed on rail " << rail_id << " : " << fi_strerror (-ret);
1376+ fi_close (&mr->fid );
1377+ return NIXL_ERR_BACKEND;
1378+ }
1379+
1380+ ret = fi_mr_enable (mr);
1381+ if (ret) {
1382+ NIXL_ERROR << " fi_mr_enable failed on rail " << rail_id << " : " << fi_strerror (-ret);
1383+ fi_close (&mr->fid );
1384+ return NIXL_ERR_BACKEND;
1385+ }
1386+ }
1387+
1388+
13601389 *key_out = fi_mr_key (mr);
13611390
13621391 NIXL_TRACE << " Memory Registration SUCCESS: rail=" << rail_id << " provider=" << provider_name
0 commit comments