@@ -511,7 +511,10 @@ struct ibv_mr *efa_mr_reg_ibv_dmabuf_mr(struct ibv_pd *pd, uint64_t offset,
511
511
static struct ibv_mr * efa_mr_reg_ibv_mr (struct efa_mr * efa_mr , struct fi_mr_attr * mr_attr ,
512
512
int access , const uint64_t flags )
513
513
{
514
- if (flags & FI_MR_DMABUF )
514
+ if (flags & FI_MR_DMABUF ) {
515
+ assert (efa_mr -> domain -> hmem_info [mr_attr -> iface ].is_dmabuf_supported );
516
+ EFA_INFO (FI_LOG_MR , "FI_MR_DMABUF is set. Registering dmabuf mr with fd %d, offset %lu, len: %zu\n" ,
517
+ mr_attr -> dmabuf -> fd , mr_attr -> dmabuf -> offset , mr_attr -> dmabuf -> len );
515
518
return efa_mr_reg_ibv_dmabuf_mr (
516
519
efa_mr -> domain -> ibv_pd ,
517
520
mr_attr -> dmabuf -> offset ,
@@ -520,64 +523,32 @@ static struct ibv_mr *efa_mr_reg_ibv_mr(struct efa_mr *efa_mr, struct fi_mr_attr
520
523
mr_attr -> dmabuf -> fd ,
521
524
access
522
525
);
526
+ }
523
527
524
- /*
525
- * TODO: remove the synapseai and neuron blocks by onboarding the
526
- * ofi_hmem_get_dmabuf_fd API.
527
- */
528
- #if HAVE_SYNAPSEAI
529
- if (efa_mr_is_synapseai (efa_mr )) {
530
- int dmabuf_fd ;
531
- uint64_t offset ;
532
- int ret ;
533
-
534
- ret = synapseai_get_dmabuf_fd (mr_attr -> mr_iov -> iov_base ,
535
- (uint64_t ) mr_attr -> mr_iov -> iov_len ,
536
- & dmabuf_fd , & offset );
528
+ int dmabuf_fd ;
529
+ uint64_t offset ;
530
+ int ret ;
531
+
532
+ if (efa_mr -> domain -> hmem_info [mr_attr -> iface ].is_dmabuf_supported ) {
533
+ ret = ofi_hmem_get_dmabuf_fd (
534
+ mr_attr -> iface ,
535
+ mr_attr -> mr_iov -> iov_base ,
536
+ (uint64_t ) mr_attr -> mr_iov -> iov_len ,
537
+ & dmabuf_fd , & offset );
537
538
if (ret != FI_SUCCESS ) {
538
- EFA_WARN (FI_LOG_MR , "Unable to get dmabuf fd for Gaudi device buffer \n" );
539
+ EFA_WARN (FI_LOG_MR , "Unable to get dmabuf fd for device buffer \n" );
539
540
return NULL ;
540
541
}
542
+ EFA_INFO (FI_LOG_MR , "Registering dmabuf mr with fd %d, offset: %lu, len: %zu, \n" ,
543
+ dmabuf_fd , offset , mr_attr -> mr_iov -> iov_len );
541
544
return efa_mr_reg_ibv_dmabuf_mr (efa_mr -> domain -> ibv_pd , offset ,
542
545
mr_attr -> mr_iov -> iov_len ,
543
546
(uint64_t )mr_attr -> mr_iov -> iov_base ,
544
547
dmabuf_fd , access );
545
548
}
546
- #endif
547
-
548
- #if HAVE_NEURON
549
- if (efa_mr_is_neuron (efa_mr )) {
550
- int dmabuf_fd ;
551
- uint64_t offset ;
552
- int ret ;
553
-
554
- ret = neuron_get_dmabuf_fd (
555
- mr_attr -> mr_iov -> iov_base ,
556
- mr_attr -> mr_iov -> iov_len ,
557
- & dmabuf_fd ,
558
- & offset );
559
-
560
- if (ret == FI_SUCCESS ) {
561
- /* Success => invoke ibv_reg_dmabuf_mr */
562
- return efa_mr_reg_ibv_dmabuf_mr (
563
- efa_mr -> domain -> ibv_pd , 0 ,
564
- mr_attr -> mr_iov -> iov_len ,
565
- (uint64_t )mr_attr -> mr_iov -> iov_base ,
566
- dmabuf_fd , access );
567
- } else if (ret == - FI_ENOPROTOOPT ) {
568
- /* Protocol not availabe => fallback */
569
- EFA_INFO (FI_LOG_MR ,
570
- "Unable to get dmabuf fd for Neuron device buffer, "
571
- "Fall back to ibv_reg_mr\n" );
572
- return ibv_reg_mr (
573
- efa_mr -> domain -> ibv_pd ,
574
- (void * )mr_attr -> mr_iov -> iov_base ,
575
- mr_attr -> mr_iov -> iov_len , access );
576
- }
577
- return NULL ;
578
- }
579
- #endif
580
549
550
+ assert (efa_mr -> domain -> hmem_info [mr_attr -> iface ].p2p_supported_by_device );
551
+ EFA_INFO (FI_LOG_MR , "Dmabuf is not supported. Registering memory via ibv_reg_mr \n" );
581
552
return ibv_reg_mr (efa_mr -> domain -> ibv_pd ,
582
553
(void * )mr_attr -> mr_iov -> iov_base ,
583
554
mr_attr -> mr_iov -> iov_len , access );
0 commit comments