Currently, the lock on an extended CQ is still taken even if the user sets the IBV_CREATE_CQ_ATTR_SINGLE_THREADED flag. This is because the MLX5_CQ_FLAGS_SINGLE_THREADED flag is not set before mlx5_cq_fill_pfns. This patch sets the MLX5_CQ_FLAGS_SINGLE_THREADED flag after allocating the extended CQ and before calling mlx5_cq_fill_pfns, allowing correct control on the lock in mlx5_start_poll and mlx5_end_poll. Thanks, Signed-off-by: Rohit Zambre <rzambre@xxxxxxx> --- providers/mlx5/verbs.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/providers/mlx5/verbs.c b/providers/mlx5/verbs.c index 4dd40b2..c3dcee8 100644 --- a/providers/mlx5/verbs.c +++ b/providers/mlx5/verbs.c @@ -653,6 +653,10 @@ static struct ibv_cq_ex *create_cq(struct ibv_context *context, return NULL; } + if (cq_attr->comp_mask & IBV_CQ_INIT_ATTR_MASK_FLAGS && + cq_attr->flags & IBV_CREATE_CQ_ATTR_SINGLE_THREADED) + cq->flags |= MLX5_CQ_FLAGS_SINGLE_THREADED; + if (cq_alloc_flags & MLX5_CQ_FLAGS_EXTENDED) { rc = mlx5_cq_fill_pfns(cq, cq_attr, mctx); if (rc) { @@ -698,9 +702,6 @@ static struct ibv_cq_ex *create_cq(struct ibv_context *context, cq->cqe_sz = cqe_sz; cq->flags = cq_alloc_flags; - if (cq_attr->comp_mask & IBV_CQ_INIT_ATTR_MASK_FLAGS && - cq_attr->flags & IBV_CREATE_CQ_ATTR_SINGLE_THREADED) - cq->flags |= MLX5_CQ_FLAGS_SINGLE_THREADED; cmd.buf_addr = (uintptr_t) cq->buf_a.buf; cmd.db_addr = (uintptr_t) cq->dbrec; cmd.cqe_size = cqe_sz; -- 1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html