From 3ea45d65d42e5daf032164240abebec82e987f90 Mon Sep 17 00:00:00 2001
From: Mark Zhang <markzhang@nvidia.com>
Date: Mon, 20 Dec 2021 11:19:46 +0200
Subject: [PATCH] mlx5: Initialize wr_data when post a work request
[ Upstream commit 4c905646de3e75bdccada4abe9f0d273d76eaf50 ]
With raw_wqe feature enabled, the wc opcode will be set to
IBV_WC_DRIVER2 if the wr_data is set to it.
So if wr_data is not initialized, there's a chance that it happens to be
IBV_WC_DRIVER2, then the application gets this wc opcode unexpectedly.
Fixes: 8ff1c5c3c411 ("mlx5: Introduce mlx5dv_wr_raw_wqe builder")
Signed-off-by: Mark Zhang <markzhang@nvidia.com>
Signed-off-by: Yishai Hadas <yishaih@nvidia.com>
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
---
providers/mlx5/qp.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/providers/mlx5/qp.c b/providers/mlx5/qp.c
index 70c1afb2..8a99f504 100644
--- a/providers/mlx5/qp.c
+++ b/providers/mlx5/qp.c
@@ -871,6 +871,7 @@ static inline int _mlx5_post_send(struct ibv_qp *ibqp, struct ibv_send_wr *wr,
seg += sizeof *ctrl;
size = sizeof *ctrl / 16;
+ qp->sq.wr_data[idx] = 0;
switch (ibqp->qp_type) {
case IBV_QPT_XRC_SEND:
@@ -1251,6 +1252,8 @@ static inline void _common_wqe_init_op(struct ibv_qp_ex *ibqp, int ib_op,
mqp->sq.wr_data[idx] = IBV_WC_DRIVER1;
else if (mlx5_op == MLX5_OPCODE_MMO)
mqp->sq.wr_data[idx] = IBV_WC_DRIVER3;
+ else
+ mqp->sq.wr_data[idx] = 0;
ctrl = mlx5_get_send_wqe(mqp, idx);
*(uint32_t *)((void *)ctrl + 8) = 0;
--
2.31.1