Commit 798653a0 authored by Saravanan Vajravel's avatar Saravanan Vajravel Committed by Leon Romanovsky
Browse files

RDMA/bnxt_re: Add check for path mtu in modify_qp



When RDMA app configures path MTU, add a check in modify_qp verb
to make sure that it doesn't go beyond interface MTU. If this
check fails, driver will fail the modify_qp verb.

Fixes: 1ac5a404 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
Reviewed-by: default avatarKalesh AP <kalesh-anakkur.purayil@broadcom.com>
Signed-off-by: default avatarSaravanan Vajravel <saravanan.vajravel@broadcom.com>
Signed-off-by: default avatarSelvin Xavier <selvin.xavier@broadcom.com>
Link: https://patch.msgid.link/20241211083931.968831-3-kalesh-anakkur.purayil@broadcom.com


Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
parent 38651476
Loading
Loading
Loading
Loading
+14 −12
Original line number Diff line number Diff line
@@ -2162,18 +2162,20 @@ int bnxt_re_modify_qp(struct ib_qp *ib_qp, struct ib_qp_attr *qp_attr,
		}
	}

	if (qp_attr->qp_state == IB_QPS_RTR) {
		enum ib_mtu qpmtu;

		qpmtu = iboe_get_mtu(rdev->netdev->mtu);
		if (qp_attr_mask & IB_QP_PATH_MTU) {
		qp->qplib_qp.modify_flags |=
				CMDQ_MODIFY_QP_MODIFY_MASK_PATH_MTU;
		qp->qplib_qp.path_mtu = __from_ib_mtu(qp_attr->path_mtu);
		qp->qplib_qp.mtu = ib_mtu_enum_to_int(qp_attr->path_mtu);
	} else if (qp_attr->qp_state == IB_QPS_RTR) {
		qp->qplib_qp.modify_flags |=
			CMDQ_MODIFY_QP_MODIFY_MASK_PATH_MTU;
		qp->qplib_qp.path_mtu =
			__from_ib_mtu(iboe_get_mtu(rdev->netdev->mtu));
		qp->qplib_qp.mtu =
			ib_mtu_enum_to_int(iboe_get_mtu(rdev->netdev->mtu));
			if (ib_mtu_enum_to_int(qp_attr->path_mtu) >
			    ib_mtu_enum_to_int(qpmtu))
				return -EINVAL;
			qpmtu = qp_attr->path_mtu;
		}

		qp->qplib_qp.modify_flags |= CMDQ_MODIFY_QP_MODIFY_MASK_PATH_MTU;
		qp->qplib_qp.path_mtu = __from_ib_mtu(qpmtu);
		qp->qplib_qp.mtu = ib_mtu_enum_to_int(qpmtu);
	}

	if (qp_attr_mask & IB_QP_TIMEOUT) {