@@ -368,7 +368,8 @@ static void uct_ib_mlx5dv_dci_qp_init_attr(uct_ib_qp_init_attr_t *qp_attr,
368
368
369
369
ucs_status_t uct_dc_mlx5_iface_create_dci (uct_dc_mlx5_iface_t * iface ,
370
370
uct_dci_index_t dci_index ,
371
- uint8_t num_dci_channels )
371
+ uint8_t num_dci_channels ,
372
+ uct_dc_dci_t * * dci_p )
372
373
{
373
374
uct_ib_iface_t * ib_iface = & iface -> super .super .super ;
374
375
uct_ib_mlx5_qp_attr_t attr = {};
@@ -455,11 +456,6 @@ ucs_status_t uct_dc_mlx5_iface_create_dci(uct_dc_mlx5_iface_t *iface,
455
456
goto err_qp ;
456
457
}
457
458
458
- ucs_assertv_always (!uct_dc_mlx5_is_dci_valid (
459
- uct_dc_mlx5_iface_dci (iface , dci_index )),
460
- "iface=%p dci_index=%d" , iface , dci_index );
461
- ucs_array_elem (& iface -> tx .dcis , dci_index ) = dci ;
462
-
463
459
if (uct_dc_mlx5_iface_is_policy_shared (iface )) {
464
460
ucs_arbiter_group_init (& dci -> arb_group );
465
461
} else {
@@ -477,6 +473,7 @@ ucs_status_t uct_dc_mlx5_iface_create_dci(uct_dc_mlx5_iface_t *iface,
477
473
478
474
uct_rc_txqp_available_set (& dci -> txqp , dci -> txwq .bb_max );
479
475
476
+ * dci_p = dci ;
480
477
return UCS_OK ;
481
478
482
479
err :
@@ -759,11 +756,10 @@ static void uct_dc_mlx5_iface_dci_pool_destroy(uct_dc_mlx5_dci_pool_t *dci_pool)
759
756
ucs_array_cleanup_dynamic (& dci_pool -> stack );
760
757
}
761
758
762
- void uct_dc_mlx5_destroy_dci (uct_dc_mlx5_iface_t * iface , uint16_t dci_index )
759
+ void uct_dc_mlx5_destroy_dci (uct_dc_mlx5_iface_t * iface , uct_dc_dci_t * dci )
763
760
{
764
761
uct_ib_mlx5_md_t * md = ucs_derived_of (iface -> super .super .super .super .md ,
765
762
uct_ib_mlx5_md_t );
766
- uct_dc_dci_t * dci = uct_dc_mlx5_iface_dci (iface , dci_index );
767
763
768
764
uct_rc_txqp_cleanup (& iface -> super .super , & dci -> txqp );
769
765
uct_ib_mlx5_destroy_qp (md , & dci -> txwq .super );
@@ -774,17 +770,16 @@ void uct_dc_mlx5_destroy_dci(uct_dc_mlx5_iface_t *iface, uint16_t dci_index)
774
770
uct_ib_mlx5_qp_mmio_cleanup (& dci -> txwq .super , dci -> txwq .reg );
775
771
776
772
ucs_free (dci );
777
- ucs_array_elem (& iface -> tx .dcis , dci_index ) = NULL ;
778
773
}
779
774
780
775
static void uct_dc_mlx5_iface_dcis_destroy (uct_dc_mlx5_iface_t * iface )
781
776
{
782
- uct_dc_dci_t * dci UCS_V_UNUSED ;
783
777
uct_dci_index_t dci_index ;
784
778
uint8_t pool_index ;
779
+ uct_dc_dci_t * dci ;
785
780
786
781
uct_dc_iface_for_each_valid_dci (dci_index , dci , iface ) {
787
- uct_dc_mlx5_destroy_dci (iface , dci_index );
782
+ uct_dc_mlx5_destroy_dci (iface , dci );
788
783
}
789
784
790
785
for (pool_index = 0 ; pool_index < iface -> tx .num_dci_pools ; pool_index ++ ) {
@@ -885,19 +880,13 @@ uct_dc_mlx5_iface_init_dcis_array(uct_dc_mlx5_iface_t *iface,
885
880
return status ;
886
881
}
887
882
888
- ucs_array_length (& iface -> tx .dcis ) = 0 ;
889
-
890
- status = uct_dc_mlx5_iface_create_dci (iface , 0 , 1 );
883
+ status = uct_dc_mlx5_iface_create_dci (iface , 0 , 1 , & dci );
891
884
if (status != UCS_OK ) {
892
885
return status ;
893
886
}
894
887
895
- dci = uct_dc_mlx5_iface_dci (iface , 0 );
896
-
897
888
iface -> tx .bb_max = dci -> txwq .bb_max ;
898
- uct_dc_mlx5_destroy_dci (iface , 0 );
899
-
900
- ucs_array_length (& iface -> tx .dcis ) = 0 ;
889
+ uct_dc_mlx5_destroy_dci (iface , dci );
901
890
902
891
return UCS_OK ;
903
892
}
@@ -1603,7 +1592,7 @@ static UCS_CLASS_INIT_FUNC(uct_dc_mlx5_iface_t, uct_md_h tl_md, uct_worker_h wor
1603
1592
self -> tx .ndci = uct_dc_mlx5_iface_is_hw_dcs (self ) ? 1 : config -> ndci ;
1604
1593
1605
1594
if (config -> dcis_initial_capacity == UCS_ULUNITS_AUTO ) {
1606
- max_capacity = uct_dc_mlx5_iface_is_dci_rand (self ) ? SIZE_MAX : 1 ;
1595
+ max_capacity = uct_dc_mlx5_iface_is_dci_rand (self ) ? SIZE_MAX : 0 ;
1607
1596
} else {
1608
1597
max_capacity = config -> dcis_initial_capacity ;
1609
1598
}
0 commit comments