Skip to content

Commit

Permalink
RDMA/rxe: Generate error completion for error requester QP state
Browse files Browse the repository at this point in the history
As per IBTA specification, all subsequent WQEs while QP is in error state
should be completed with a flush error.

Here we check QP_STATE_ERROR after req_next_wqe() so that rxe_completer()
has chance to be called where it will set CQ state to FLUSH ERROR and the
completion can associate with its WQE.

Link: https://lore.kernel.org/r/1658307368-1851-3-git-send-email-lizhijian@fujitsu.com
Signed-off-by: Li Zhijian <lizhijian@fujitsu.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
  • Loading branch information
zhijianli88 authored and jgunthorpe committed Aug 2, 2022
1 parent dea4266 commit ae720bd
Showing 1 changed file with 12 additions and 1 deletion.
13 changes: 12 additions & 1 deletion drivers/infiniband/sw/rxe/rxe_req.c
Original file line number Diff line number Diff line change
Expand Up @@ -635,9 +635,20 @@ int rxe_requester(void *arg)
if (!rxe_get(qp))
return -EAGAIN;

if (unlikely(!qp->valid || qp->req.state == QP_STATE_ERROR))
if (unlikely(!qp->valid))
goto exit;

if (unlikely(qp->req.state == QP_STATE_ERROR)) {
wqe = req_next_wqe(qp);
if (wqe)
/*
* Generate an error completion for error qp state
*/
goto err;
else
goto exit;
}

if (unlikely(qp->req.state == QP_STATE_RESET)) {
qp->req.wqe_index = queue_get_consumer(q,
QUEUE_TYPE_FROM_CLIENT);
Expand Down

0 comments on commit ae720bd

Please sign in to comment.