Skip to content
This repository has been archived by the owner on Sep 5, 2023. It is now read-only.

rpma: replace rdma_create_qp() with rdma_create_qp_ex() #2084

Merged
merged 2 commits into from
Nov 28, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions src/peer.c
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ rpma_peer_setup_qp(struct rpma_peer *peer, struct rdma_cm_id *id, struct rpma_cq

struct ibv_cq *ibv_cq = rpma_cq_get_ibv_cq(cq);

struct ibv_qp_init_attr qp_init_attr;
struct ibv_qp_init_attr_ex qp_init_attr;
qp_init_attr.qp_context = NULL;
qp_init_attr.send_cq = ibv_cq;
qp_init_attr.recv_cq = rcq ? rpma_cq_get_ibv_cq(rcq) : ibv_cq;
Expand All @@ -186,14 +186,17 @@ rpma_peer_setup_qp(struct rpma_peer *peer, struct rdma_cm_id *id, struct rpma_cq
*/
qp_init_attr.sq_sig_all = 0;

qp_init_attr.comp_mask = IBV_QP_INIT_ATTR_PD;
qp_init_attr.pd = peer->pd;

/*
* The actual capabilities and properties of the created QP are returned through
* qp_init_attr.
*/
RPMA_FAULT_INJECTION(RPMA_E_PROVIDER, {});
if (rdma_create_qp(id, peer->pd, &qp_init_attr)) {
if (rdma_create_qp_ex(id, &qp_init_attr)) {
RPMA_LOG_ERROR_WITH_ERRNO(errno,
"rdma_create_qp(max_send_wr=%" PRIu32
"rdma_create_qp_ex(max_send_wr=%" PRIu32
", max_recv_wr=%" PRIu32
", max_send/recv_sge=%i, max_inline_data=%i, qp_type=IBV_QPT_RC, sq_sig_all=0)",
sq_size, rq_size, RPMA_MAX_SGE,
Expand Down
4 changes: 2 additions & 2 deletions tests/drd.supp
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,6 @@
fun:rxe_create_qp
fun:UnknownInlinedFun
fun:rdma_create_qp_ex
fun:rdma_create_qp
...
}

Expand Down Expand Up @@ -444,7 +443,7 @@
...
obj:*librxe-rdmav34.so*
...
fun:rdma_create_qp
fun:rdma_create_qp_ex
fun:rpma_peer_setup_qp
...
}
Expand Down Expand Up @@ -509,6 +508,7 @@
{
General suppression related to SoftRoCE issue with mutex
drd:MutexErr
...
fun:pthread_mutex_init@*
...
fun:rpma_srq_new
Expand Down
4 changes: 1 addition & 3 deletions tests/memcheck-libibverbs-librdmacm.supp
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,6 @@
fun:calloc
...
fun:rdma_create_qp_ex
fun:rdma_create_qp
fun:rpma_peer_setup_qp
fun:rpma_conn_req_new_from_id
fun:rpma_conn_req_new
Expand Down Expand Up @@ -188,7 +187,6 @@
fun:calloc
...
fun:rdma_create_qp_ex
fun:rdma_create_qp
fun:rpma_peer_setup_qp
fun:rpma_conn_req_new_from_id
fun:rpma_conn_req_new_from_cm_event
Expand Down Expand Up @@ -279,7 +277,7 @@
Memcheck:Cond
fun:ibv_icmd_create_srq
fun:ibv_cmd_create_srq
obj:*/libmlx5.so*
...
fun:ibv_create_srq*
fun:rpma_peer_create_srq
fun:rpma_srq_new
Expand Down
8 changes: 4 additions & 4 deletions tests/unit/common/mocks-rdma_cm.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,12 @@ int Mock_ctrl_defer_destruction = MOCK_CTRL_NO_DEFER;
const struct rdma_cm_id Cmid_zero = {0};

/*
* rdma_create_qp -- rdma_create_qp() mock
* rdma_create_qp_ex -- rdma_create_qp_ex() mock
*/
int
rdma_create_qp(struct rdma_cm_id *id, struct ibv_pd *pd,
struct ibv_qp_init_attr *qp_init_attr)
rdma_create_qp_ex(struct rdma_cm_id *id, struct ibv_qp_init_attr_ex *qp_init_attr)
{
check_expected_ptr(id);
check_expected_ptr(pd);
assert_non_null(qp_init_attr);
check_expected(qp_init_attr->qp_context);
check_expected(qp_init_attr->send_cq);
Expand All @@ -51,6 +49,8 @@ rdma_create_qp(struct rdma_cm_id *id, struct ibv_pd *pd,
check_expected(qp_init_attr->cap.max_inline_data);
assert_int_equal(qp_init_attr->qp_type, IBV_QPT_RC);
assert_int_equal(qp_init_attr->sq_sig_all, 0);
check_expected(qp_init_attr->comp_mask);
check_expected(qp_init_attr->pd);

errno = mock_type(int);
if (errno)
Expand Down
41 changes: 21 additions & 20 deletions tests/unit/peer/peer-create_qp.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,10 @@ static struct rpma_cq *rcqs[] = {
static int num_rcqs = sizeof(rcqs) / sizeof(rcqs[0]);

/*
* configure_create_qp -- configure common mock for rdma_create_qp()
* configure_create_qp_ex -- configure common mock for rdma_create_qp_ex()
*/
static void
configure_create_qp(struct rpma_cq *rcq)
configure_create_qp_ex(struct rpma_cq *rcq)
{
will_return(rpma_conn_cfg_get_sq_size, &Get_args);
will_return(rpma_conn_cfg_get_rq_size, &Get_args);
Expand All @@ -55,25 +55,26 @@ configure_create_qp(struct rpma_cq *rcq)
expect_value(rpma_cq_get_ibv_cq, cq, rcq);
will_return(rpma_cq_get_ibv_cq, MOCK_GET_IBV_RCQ(rcq));
}
expect_value(rdma_create_qp, id, MOCK_CM_ID);
expect_value(rdma_create_qp, pd, MOCK_IBV_PD);
expect_value(rdma_create_qp, qp_init_attr->qp_context, NULL);
expect_value(rdma_create_qp, qp_init_attr->send_cq,
expect_value(rdma_create_qp_ex, id, MOCK_CM_ID);
expect_value(rdma_create_qp_ex, qp_init_attr->qp_context, NULL);
expect_value(rdma_create_qp_ex, qp_init_attr->send_cq,
MOCK_IBV_CQ);
expect_value(rdma_create_qp, qp_init_attr->recv_cq,
expect_value(rdma_create_qp_ex, qp_init_attr->recv_cq,
rcq ? MOCK_GET_IBV_RCQ(rcq) : MOCK_IBV_CQ);
expect_value(rdma_create_qp, qp_init_attr->srq, Get_args.srq ?
expect_value(rdma_create_qp_ex, qp_init_attr->srq, Get_args.srq ?
MOCK_IBV_SRQ : NULL);
expect_value(rdma_create_qp, qp_init_attr->cap.max_send_wr,
expect_value(rdma_create_qp_ex, qp_init_attr->cap.max_send_wr,
MOCK_SQ_SIZE_CUSTOM);
expect_value(rdma_create_qp, qp_init_attr->cap.max_recv_wr,
expect_value(rdma_create_qp_ex, qp_init_attr->cap.max_recv_wr,
MOCK_RQ_SIZE_CUSTOM);
expect_value(rdma_create_qp, qp_init_attr->cap.max_send_sge,
expect_value(rdma_create_qp_ex, qp_init_attr->cap.max_send_sge,
RPMA_MAX_SGE);
expect_value(rdma_create_qp, qp_init_attr->cap.max_recv_sge,
expect_value(rdma_create_qp_ex, qp_init_attr->cap.max_recv_sge,
RPMA_MAX_SGE);
expect_value(rdma_create_qp, qp_init_attr->cap.max_inline_data,
expect_value(rdma_create_qp_ex, qp_init_attr->cap.max_inline_data,
RPMA_MAX_INLINE_DATA);
expect_value(rdma_create_qp_ex, qp_init_attr->comp_mask, IBV_QP_INIT_ATTR_PD);
expect_value(rdma_create_qp_ex, qp_init_attr->pd, MOCK_IBV_PD);
}

/*
Expand Down Expand Up @@ -123,18 +124,18 @@ create_qp__cq_NULL(void **pprestate)
}

/*
* create_qp__rdma_create_qp_ERRNO -- rdma_create_qp() fails with MOCK_ERRNO
* create_qp__rdma_create_qp_ex_ERRNO -- rdma_create_qp_ex() fails with MOCK_ERRNO
*/
static void
create_qp__rdma_create_qp_ERRNO(void **pprestate)
create_qp__rdma_create_qp_ex_ERRNO(void **pprestate)
{
struct prestate *prestate = *pprestate;

for (int i = 0; i < num_rcqs; i++) {
/* configure mock */
Get_args.srq = (i == 2) ? MOCK_RPMA_SRQ : NULL;
configure_create_qp(rcqs[i]);
will_return(rdma_create_qp, MOCK_ERRNO);
configure_create_qp_ex(rcqs[i]);
will_return(rdma_create_qp_ex, MOCK_ERRNO);

/* run test */
int ret = rpma_peer_setup_qp(prestate->peer, MOCK_CM_ID, MOCK_RPMA_CQ,
Expand All @@ -156,8 +157,8 @@ create_qp__success(void **pprestate)
for (int i = 0; i < num_rcqs; i++) {
/* configure mock */
Get_args.srq = (i == 2) ? MOCK_RPMA_SRQ : NULL;
configure_create_qp(rcqs[i]);
will_return(rdma_create_qp, MOCK_OK);
configure_create_qp_ex(rcqs[i]);
will_return(rdma_create_qp_ex, MOCK_OK);

/* run test */
int ret = rpma_peer_setup_qp(prestate->peer, MOCK_CM_ID, MOCK_RPMA_CQ,
Expand All @@ -179,7 +180,7 @@ main(int argc, char *argv[])
cmocka_unit_test_prestate_setup_teardown(create_qp__cq_NULL,
setup__peer, teardown__peer, &prestate_OdpCapable),
cmocka_unit_test_prestate_setup_teardown(
create_qp__rdma_create_qp_ERRNO,
create_qp__rdma_create_qp_ex_ERRNO,
setup__peer, teardown__peer, &prestate_OdpCapable),
cmocka_unit_test_prestate_setup_teardown(create_qp__success,
setup__peer, teardown__peer, &prestate_OdpCapable),
Expand Down