Re: [PATCH] RDMA/rxe: Fix a race condition related to the QP error state

Leon Romanovsky
2018-01-11T19:00:45Z

[-- Attachment #1: Type: text/plain, Size: 922 bytes --]

On Thu, Jan 11, 2018 at 04:02:33PM +0000, Bart Van Assche wrote:
> On Thu, 2018-01-11 at 08:22 +0200, Leon Romanovsky wrote:
> > The proposed patch definitely decreases the chance of races, but it is not fixing them.
> > There is a chance to have change in qp state immediately after your "if ..." check.
>
> Hello Leon,
>
> Please have a look at rxe_qp_error() and you will see that the patch I posted
> is a proper fix. In the scenario you described rxe_qp_error() will trigger a
> run of rxe_completer().

Bart,

What am I missing?

CPU1 CPU2
if (unlikely....
<---
/* move the qp to the error state */
void rxe_qp_error(struct rxe_qp *qp)
{
qp->req.state = QP_STATE_ERROR;
qp->resp.state = QP_STATE_ERROR;
qp->attr.qp_state = IB_QPS_ERR;
--->
rxe_run_task(&qp->req.task, must_sched);

It is more or less the same as without "if (unlikely..."

Thanks

>
> Bart.

[-- Attachment #2: signature.asc --]