@@ -813,7 +813,8 @@ void test_ibv_cq_ex_read_ignore_removed_peer()
813
813
#endif
814
814
815
815
static void test_efa_cq_read (struct efa_resource * resource , fi_addr_t * addr ,
816
- int ibv_wc_opcode , int status , int vendor_error )
816
+ int ibv_wc_opcode , int status , int vendor_error ,
817
+ struct efa_context * ctx )
817
818
{
818
819
int ret ;
819
820
size_t raw_addr_len = sizeof (struct efa_ep_addr );
@@ -847,7 +848,9 @@ static void test_efa_cq_read(struct efa_resource *resource, fi_addr_t *addr,
847
848
if (ibv_wc_opcode == IBV_WC_RECV ) {
848
849
ibv_cqx = container_of (base_ep -> util_ep .rx_cq , struct efa_cq , util_cq )-> ibv_cq .ibv_cq_ex ;
849
850
ibv_cqx -> start_poll = & efa_mock_ibv_start_poll_return_mock ;
850
- ibv_cqx -> wr_id = (uintptr_t )12345 ;
851
+ ctx -> completion_flags = FI_RECV | FI_MSG ;
852
+ ctx -> addr = 0x12345678 ;
853
+ ibv_cqx -> wr_id = (uintptr_t ) ctx ;
851
854
will_return (efa_mock_ibv_start_poll_return_mock , 0 );
852
855
ibv_cqx -> status = status ;
853
856
} else {
@@ -894,16 +897,19 @@ void test_efa_cq_read_send_success(struct efa_resource **state)
894
897
{
895
898
struct efa_resource * resource = * state ;
896
899
struct efa_unit_test_buff send_buff ;
900
+ struct fi_context2 * ctx ;
897
901
struct fi_cq_data_entry cq_entry ;
898
902
fi_addr_t addr ;
899
903
int ret ;
900
904
901
- test_efa_cq_read (resource , & addr , IBV_WC_SEND , IBV_WC_SUCCESS , 0 );
905
+ ctx = malloc (sizeof (struct fi_context2 ));
906
+ assert_non_null (ctx );
907
+ test_efa_cq_read (resource , & addr , IBV_WC_SEND , IBV_WC_SUCCESS , 0 , (struct efa_context * )ctx );
902
908
efa_unit_test_buff_construct (& send_buff , resource , 4096 /* buff_size */ );
903
909
904
910
assert_int_equal (g_ibv_submitted_wr_id_cnt , 0 );
905
911
ret = fi_send (resource -> ep , send_buff .buff , send_buff .size ,
906
- fi_mr_desc (send_buff .mr ), addr , ( void * ) 12345 );
912
+ fi_mr_desc (send_buff .mr ), addr , ctx );
907
913
assert_int_equal (ret , 0 );
908
914
assert_int_equal (g_ibv_submitted_wr_id_cnt , 1 );
909
915
@@ -913,6 +919,7 @@ void test_efa_cq_read_send_success(struct efa_resource **state)
913
919
assert_int_equal (ret , 1 );
914
920
915
921
efa_unit_test_buff_destruct (& send_buff );
922
+ free (ctx );
916
923
}
917
924
918
925
/**
@@ -924,20 +931,26 @@ void test_efa_cq_read_recv_success(struct efa_resource **state)
924
931
struct efa_resource * resource = * state ;
925
932
struct efa_unit_test_buff recv_buff ;
926
933
struct fi_cq_data_entry cq_entry ;
934
+ struct fi_context2 * ctx ;
927
935
fi_addr_t addr ;
928
936
int ret ;
929
937
930
- test_efa_cq_read (resource , & addr , IBV_WC_RECV , IBV_WC_SUCCESS , 0 );
938
+ ctx = malloc (sizeof (struct fi_context2 ));
939
+ assert_non_null (ctx );
940
+ test_efa_cq_read (resource , & addr , IBV_WC_RECV , IBV_WC_SUCCESS , 0 , (struct efa_context * )ctx );
931
941
efa_unit_test_buff_construct (& recv_buff , resource , 4096 /* buff_size */ );
932
942
933
943
ret = fi_recv (resource -> ep , recv_buff .buff , recv_buff .size ,
934
- fi_mr_desc (recv_buff .mr ), addr , NULL );
944
+ fi_mr_desc (recv_buff .mr ), addr , ctx );
935
945
assert_int_equal (ret , 0 );
936
946
937
947
ret = fi_cq_read (resource -> cq , & cq_entry , 1 );
938
948
assert_int_equal (ret , 1 );
939
949
950
+ assert (cq_entry .flags == FI_RECV | FI_MSG );
951
+
940
952
efa_unit_test_buff_destruct (& recv_buff );
953
+ free (ctx );
941
954
}
942
955
943
956
static void efa_cq_check_cq_err_entry (struct efa_resource * resource , int vendor_error ) {
@@ -974,16 +987,19 @@ void test_efa_cq_read_send_failure(struct efa_resource **state)
974
987
struct efa_resource * resource = * state ;
975
988
struct efa_unit_test_buff send_buff ;
976
989
struct fi_cq_data_entry cq_entry ;
990
+ struct fi_context2 * ctx ;
977
991
fi_addr_t addr ;
978
992
int ret ;
979
993
994
+ ctx = malloc (sizeof (struct fi_context2 ));
995
+ assert_non_null (ctx );
980
996
test_efa_cq_read (resource , & addr , IBV_WC_SEND , IBV_WC_GENERAL_ERR ,
981
- EFA_IO_COMP_STATUS_LOCAL_ERROR_UNRESP_REMOTE );
997
+ EFA_IO_COMP_STATUS_LOCAL_ERROR_UNRESP_REMOTE , ( struct efa_context * ) ctx );
982
998
efa_unit_test_buff_construct (& send_buff , resource , 4096 /* buff_size */ );
983
999
984
1000
assert_int_equal (g_ibv_submitted_wr_id_cnt , 0 );
985
1001
ret = fi_send (resource -> ep , send_buff .buff , send_buff .size ,
986
- fi_mr_desc (send_buff .mr ), addr , ( void * ) 12345 );
1002
+ fi_mr_desc (send_buff .mr ), addr , ctx );
987
1003
assert_int_equal (ret , 0 );
988
1004
assert_int_equal (g_ibv_submitted_wr_id_cnt , 1 );
989
1005
@@ -996,6 +1012,7 @@ void test_efa_cq_read_send_failure(struct efa_resource **state)
996
1012
EFA_IO_COMP_STATUS_LOCAL_ERROR_UNRESP_REMOTE );
997
1013
998
1014
efa_unit_test_buff_destruct (& send_buff );
1015
+ free (ctx );
999
1016
}
1000
1017
1001
1018
/**
@@ -1011,15 +1028,18 @@ void test_efa_cq_read_recv_failure(struct efa_resource **state)
1011
1028
struct efa_resource * resource = * state ;
1012
1029
struct efa_unit_test_buff recv_buff ;
1013
1030
struct fi_cq_data_entry cq_entry ;
1031
+ struct fi_context2 * ctx ;
1014
1032
fi_addr_t addr ;
1015
1033
int ret ;
1016
1034
1035
+ ctx = malloc (sizeof (struct fi_context2 ));
1036
+ assert_non_null (ctx );
1017
1037
test_efa_cq_read (resource , & addr , IBV_WC_RECV , IBV_WC_GENERAL_ERR ,
1018
- EFA_IO_COMP_STATUS_LOCAL_ERROR_UNRESP_REMOTE );
1038
+ EFA_IO_COMP_STATUS_LOCAL_ERROR_UNRESP_REMOTE , ( struct efa_context * ) ctx );
1019
1039
efa_unit_test_buff_construct (& recv_buff , resource , 4096 /* buff_size */ );
1020
1040
1021
1041
ret = fi_recv (resource -> ep , recv_buff .buff , recv_buff .size ,
1022
- fi_mr_desc (recv_buff .mr ), addr , NULL );
1042
+ fi_mr_desc (recv_buff .mr ), addr , ctx );
1023
1043
assert_int_equal (ret , 0 );
1024
1044
1025
1045
ret = fi_cq_read (resource -> cq , & cq_entry , 1 );
@@ -1029,4 +1049,5 @@ void test_efa_cq_read_recv_failure(struct efa_resource **state)
1029
1049
EFA_IO_COMP_STATUS_LOCAL_ERROR_UNRESP_REMOTE );
1030
1050
1031
1051
efa_unit_test_buff_destruct (& recv_buff );
1052
+ free (ctx );
1032
1053
}
0 commit comments