Blob Blame History Raw
From: Li Zhijian <lizhijian@fujitsu.com>
Date: Wed, 20 Jul 2022 04:56:05 -0400
Subject: RDMA/rxe: Update wqe_index for each wqe error completion
Patch-mainline: v6.0-rc1
Git-commit: dea4266f7bf2fc76e49b2e521feccd6c1dbca8c5
References: jsc#PED-1111

Previously, if user space keeps sending abnormal wqe, queue.index will
keep increasing while qp->req.wqe_index doesn't. Once
qp->req.wqe_index==queue.index in next round, req_next_wqe() will treat
queue as empty. In such case, no new completion would be generated.

Update wqe_index for each wqe completion so that req_next_wqe() can get
next wqe properly.

Link: https://lore.kernel.org/r/1658307368-1851-2-git-send-email-lizhijian@fujitsu.com
Signed-off-by: Li Zhijian <lizhijian@fujitsu.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
---
 drivers/infiniband/sw/rxe/rxe_req.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/drivers/infiniband/sw/rxe/rxe_req.c
+++ b/drivers/infiniband/sw/rxe/rxe_req.c
@@ -802,6 +802,8 @@ done:
 	ret = 0;
 	goto out;
 err:
+	/* update wqe_index for each wqe completion */
+	qp->req.wqe_index = queue_next_index(qp->sq.queue, qp->req.wqe_index);
 	wqe->state = wqe_state_error;
 	rxe_run_task(&qp->comp.task, 0);
 exit: