in efawin/ibv_win_cmd.c [327:365]
int ibv_cmd_modify_qp(struct ibv_qp* qp, struct ibv_qp_attr* attr,
int attr_mask,
struct ibv_modify_qp* cmd, size_t cmd_size)
{
int err = 0;
EFA_MODIFY_QP_PARAMS params = { 0 };
EFA_QP_INFO result = { 0 };
struct ibv_qp* ibv_qp = NULL;
struct efa_dev* edev = to_efa_dev(qp->context->device);
params.QpHandle = qp->handle;
if (attr_mask & IBV_QP_STATE) {
params.ModifyMask |= EFA_MODIFY_QP_STATE_MASK;
params.QpState = attr->qp_state;
}
if (attr_mask & IBV_QP_CUR_STATE) {
params.ModifyMask |= EFA_MODIFY_QP_CUR_STATE_MASK;
params.QpCurState = attr->cur_qp_state;
}
if (attr_mask & IBV_QP_QKEY) {
params.ModifyMask |= EFA_MODIFY_QP_QKEY_MASK;
params.QKey = attr->qkey;
}
if (attr_mask & IBV_QP_SQ_PSN) {
params.ModifyMask |= EFA_MODIFY_QP_SQ_PSN_MASK;
params.SqPsn = attr->sq_psn;
}
if (attr_mask & IBV_QP_EN_SQD_ASYNC_NOTIFY) {
params.ModifyMask |= EFA_MODIFY_QP_SQ_DRAINED_ASYNC_NOTIFY_MASK;
params.SqDrainedAsyncNotify = attr->en_sqd_async_notify;
}
if (attr_mask & IBV_QP_RNR_RETRY) {
params.ModifyMask |= EFA_MODIFY_QP_RNR_RETRY_MASK;
params.RnrRetry = attr->rnr_retry;
}
err = efa_win_modify_qp(&edev->device, ¶ms);
return err;
}