aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/sw/rxe
diff options
context:
space:
mode:
authorLi Zhijian <lizhijian@fujitsu.com>2022-07-20 04:56:05 -0400
committerJason Gunthorpe <jgg@nvidia.com>2022-08-02 13:41:36 -0300
commitdea4266f7bf2fc76e49b2e521feccd6c1dbca8c5 (patch)
tree1f2a233cef221c6e42433722d63626e82a037d7e /drivers/infiniband/sw/rxe
parentRDMA/srpt: Fix a use-after-free (diff)
downloadlinux-dev-dea4266f7bf2fc76e49b2e521feccd6c1dbca8c5.tar.xz
linux-dev-dea4266f7bf2fc76e49b2e521feccd6c1dbca8c5.zip
RDMA/rxe: Update wqe_index for each wqe error completion
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>
Diffstat (limited to 'drivers/infiniband/sw/rxe')
-rw-r--r--drivers/infiniband/sw/rxe/rxe_req.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/infiniband/sw/rxe/rxe_req.c b/drivers/infiniband/sw/rxe/rxe_req.c
index 49e8f54db6f5..5a85687b9c72 100644
--- 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: