RDMA/rxe: Fix mw bind to allow any consumer key portion
authorBob Pearson <rpearsonhpe@gmail.com>
Thu, 14 Jul 2022 20:46:20 +0000 (15:46 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 Aug 2022 12:23:56 +0000 (14:23 +0200)
[ Upstream commit 1603f89935ec86d40a7667e1250392626976ccc2 ]

The current implementation of rxe_check_bind_mw() in rxe_mw.c is incorrect
since it requires the new key portion provided by the mw consumer to be
different than the previous key portion. This is not required by the
IBA. Remove the test.

Link: https://lore.kernel.org/linux-rdma/fb4614e7-4cac-0dc7-3ef7-766dfd10e8f2@gmail.com/
Fixes: 32a577b4c3a9 ("Add support for bind MW work requests")
Link: https://lore.kernel.org/r/20220714204619.13396-1-rpearsonhpe@gmail.com
Signed-off-by: Bob Pearson <rpearsonhpe@gmail.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/infiniband/sw/rxe/rxe_mw.c

index a5e2ea7d80f0221dbf479a725aff08ff76ecd99f..933a0b29275b970de13f67e19e28344bbac6a10d 100644 (file)
@@ -71,8 +71,6 @@ int rxe_dealloc_mw(struct ib_mw *ibmw)
 static int rxe_check_bind_mw(struct rxe_qp *qp, struct rxe_send_wqe *wqe,
                         struct rxe_mw *mw, struct rxe_mr *mr)
 {
-       u32 key = wqe->wr.wr.mw.rkey & 0xff;
-
        if (mw->ibmw.type == IB_MW_TYPE_1) {
                if (unlikely(mw->state != RXE_MW_STATE_VALID)) {
                        pr_err_once(
@@ -110,11 +108,6 @@ static int rxe_check_bind_mw(struct rxe_qp *qp, struct rxe_send_wqe *wqe,
                }
        }
 
-       if (unlikely(key == (mw->rkey & 0xff))) {
-               pr_err_once("attempt to bind MW with same key\n");
-               return -EINVAL;
-       }
-
        /* remaining checks only apply to a nonzero MR */
        if (!mr)
                return 0;