RDMA/rxe: Fix deadlock in rxe_do_local_ops()
authorBob Pearson <rpearsonhpe@gmail.com>
Mon, 23 May 2022 22:32:52 +0000 (17:32 -0500)
committerJason Gunthorpe <jgg@nvidia.com>
Thu, 30 Jun 2022 20:00:23 +0000 (17:00 -0300)
commit7cb33d1bc1ac8e51fd88928f96674d392f8e07c4
treedddb4697631f4669eadce9c65c0441cbf0c26f5d
parentdc1848388137d20e5786b976caa49a26889f36f3
RDMA/rxe: Fix deadlock in rxe_do_local_ops()

When a local operation (invalidate mr, reg mr, bind mw) is finished there
will be no ack packet coming from a responder to cause the wqe to be
completed. This may happen anyway if a subsequent wqe performs
IO. Currently if the wqe is signalled the completer tasklet is scheduled
immediately but not otherwise.

This leads to a deadlock if the next wqe has the fence bit set in send
flags and the operation is not signalled. This patch removes the condition
that the wqe must be signalled in order to schedule the completer tasklet
which is the simplest fix for this deadlock and is fairly low cost. This
is the analog for local operations of always setting the ackreq bit in all
last or only request packets even if the operation is not signalled.

Link: https://lore.kernel.org/r/20220523223251.15350-1-rpearsonhpe@gmail.com
Reported-by: Jenny Hack <jhack@hpe.com>
Fixes: c1a411268a4b ("RDMA/rxe: Move local ops to subroutine")
Signed-off-by: Bob Pearson <rpearsonhpe@gmail.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/sw/rxe/rxe_req.c