]> git.baikalelectronics.ru Git - kernel.git/commit
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)
commit1b6f24335c42a67aac79b3f2bc0781b7a5931063
treedddb4697631f4669eadce9c65c0441cbf0c26f5d
parentb55b6ca6d03c2b4d51da623a2c8173eea1a4cc35
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: 3e1cf5f469ef ("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