@@ -582,6 +582,8 @@ static int mlx5_init_context(struct verbs_device *vdev,
}
memset(&req, 0, sizeof(req));
+ memset(&resp, 0, sizeof(resp));
+
req.total_num_uuars = tot_uuars;
req.num_low_latency_uuars = low_lat_uuars;
if (ibv_cmd_get_context(&context->ibv_ctx, &req.ibv_req, sizeof req,
@@ -600,6 +602,7 @@ static int mlx5_init_context(struct verbs_device *vdev,
context->max_recv_wr = resp.max_recv_wr;
context->max_srq_recv_wr = resp.max_srq_recv_wr;
+ context->cqe_version = resp.cqe_version;
if (context->cqe_version) {
if (context->cqe_version == 1)
mlx5_ctx_ops.poll_cq = mlx5_poll_cq_v1;
@@ -909,8 +909,7 @@ static int init_attr_v2(struct ibv_context *context, struct mlx5_qp *qp,
cmd.rq_wqe_shift = qp->rq.wqe_shift;
cmd.uidx = usr_idx;
err = ibv_cmd_create_qp_ex2(context, &qp->verbs_qp, sizeof(qp->verbs_qp),
- attr, &cmd.ibv_cmd, sizeof(cmd.ibv_cmd),
- offsetof(struct mlx5_create_qp_ex, uidx),
+ attr, &cmd.ibv_cmd, sizeof(cmd.ibv_cmd), sizeof(cmd),
&resp.ibv_resp, sizeof(resp.ibv_resp),
sizeof(resp));
if (!err)
@@ -944,8 +943,7 @@ static int init_attr_v1(struct ibv_context *context, struct mlx5_qp *qp,
cmd.uidx = usr_idx;
err = ibv_cmd_create_qp_ex(context, &qp->verbs_qp, sizeof(qp->verbs_qp),
- attr, &cmd.ibv_cmd,
- offsetof(struct mlx5_create_qp, uidx),
+ attr, &cmd.ibv_cmd, sizeof(cmd),
&resp.ibv_resp, sizeof(resp));
if (!err)
*uuar_index = resp.uuar_index;
@@ -1426,8 +1424,7 @@ mlx5_create_xrc_srq(struct ibv_context *context,
}
err = ibv_cmd_create_srq_ex(context, &msrq->vsrq, sizeof(msrq->vsrq),
- attr, &cmd.ibv_cmd,
- offsetof(struct mlx5_create_srq_ex, uidx),
+ attr, &cmd.ibv_cmd, sizeof(cmd),
&resp.ibv_resp, sizeof(resp));
if (err)
goto err_free_uidx;