Drop the 211.7.x security-ahead patches superseded by the RHEL 211.8.1..211.16.1 backports (1100-1104), add those backports (1106-1161) from centos-stream-10 and upstream linux-6.12.y. Keep the smb cifs.spnego ahead-fix (1105). Bump to 211.16.1.
128 lines
4.1 KiB
Diff
128 lines
4.1 KiB
Diff
From 36c9223728944bf2e60709bd6c233c9bc0d1b56e Mon Sep 17 00:00:00 2001
|
|
From: Sreekanth Reddy <sreeredd@redhat.com>
|
|
Date: Fri, 8 Aug 2025 15:43:19 -0700
|
|
Subject: [PATCH] RDMA/bnxt_re: Support 2G message size
|
|
|
|
JIRA: https://issues.redhat.com/browse/RHEL-108694
|
|
|
|
commit 0aed817380d620987b2d5c573fdd2f01c30976a4
|
|
Author: Selvin Xavier <selvin.xavier@broadcom.com>
|
|
Date: Fri Jul 4 10:08:56 2025 +0530
|
|
|
|
RDMA/bnxt_re: Support 2G message size
|
|
|
|
bnxt_qplib_put_sges is calculating the length in
|
|
a signed int. So handling the 2G message size
|
|
is not working since it is considered as negative.
|
|
|
|
Use a unsigned number to calculate the total message
|
|
length. As per the spec, IB message size shall be
|
|
between zero and 2^31 bytes (inclusive). So adding
|
|
a check for 2G message size.
|
|
|
|
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
|
|
Signed-off-by: Shravya KN <shravya.k-n@broadcom.com>
|
|
Link: https://patch.msgid.link/20250704043857.19158-3-kalesh-anakkur.purayil@broadcom.com
|
|
Reviewed-by: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
|
|
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
|
|
Signed-off-by: Leon Romanovsky <leon@kernel.org>
|
|
|
|
Signed-off-by: Sreekanth Reddy <sreeredd@redhat.com>
|
|
|
|
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_fp.c b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
|
|
index be34c605d516..dfe3177123e5 100644
|
|
--- a/drivers/infiniband/hw/bnxt_re/qplib_fp.c
|
|
+++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
|
|
@@ -1750,9 +1750,9 @@ static void bnxt_qplib_fill_psn_search(struct bnxt_qplib_qp *qp,
|
|
}
|
|
}
|
|
|
|
-static int bnxt_qplib_put_inline(struct bnxt_qplib_qp *qp,
|
|
- struct bnxt_qplib_swqe *wqe,
|
|
- u16 *idx)
|
|
+static unsigned int bnxt_qplib_put_inline(struct bnxt_qplib_qp *qp,
|
|
+ struct bnxt_qplib_swqe *wqe,
|
|
+ u32 *idx)
|
|
{
|
|
struct bnxt_qplib_hwq *hwq;
|
|
int len, t_len, offt;
|
|
@@ -1769,7 +1769,7 @@ static int bnxt_qplib_put_inline(struct bnxt_qplib_qp *qp,
|
|
il_src = (void *)wqe->sg_list[indx].addr;
|
|
t_len += len;
|
|
if (t_len > qp->max_inline_data)
|
|
- return -ENOMEM;
|
|
+ return BNXT_RE_INVAL_MSG_SIZE;
|
|
while (len) {
|
|
if (pull_dst) {
|
|
pull_dst = false;
|
|
@@ -1795,9 +1795,9 @@ static int bnxt_qplib_put_inline(struct bnxt_qplib_qp *qp,
|
|
return t_len;
|
|
}
|
|
|
|
-static u32 bnxt_qplib_put_sges(struct bnxt_qplib_hwq *hwq,
|
|
- struct bnxt_qplib_sge *ssge,
|
|
- u16 nsge, u16 *idx)
|
|
+static unsigned int bnxt_qplib_put_sges(struct bnxt_qplib_hwq *hwq,
|
|
+ struct bnxt_qplib_sge *ssge,
|
|
+ u32 nsge, u32 *idx)
|
|
{
|
|
struct sq_sge *dsge;
|
|
int indx, len = 0;
|
|
@@ -1878,14 +1878,12 @@ int bnxt_qplib_post_send(struct bnxt_qplib_qp *qp,
|
|
struct bnxt_qplib_hwq *hwq;
|
|
struct bnxt_qplib_swq *swq;
|
|
bool sch_handler = false;
|
|
+ u32 wqe_idx, slots, idx;
|
|
u16 wqe_sz, qdf = 0;
|
|
bool msn_update;
|
|
void *base_hdr;
|
|
void *ext_hdr;
|
|
__le32 temp32;
|
|
- u32 wqe_idx;
|
|
- u32 slots;
|
|
- u16 idx;
|
|
|
|
hwq = &sq->hwq;
|
|
if (qp->state != CMDQ_MODIFY_QP_NEW_STATE_RTS &&
|
|
@@ -1937,8 +1935,10 @@ int bnxt_qplib_post_send(struct bnxt_qplib_qp *qp,
|
|
else
|
|
data_len = bnxt_qplib_put_sges(hwq, wqe->sg_list, wqe->num_sge,
|
|
&idx);
|
|
- if (data_len < 0)
|
|
- goto queue_err;
|
|
+ if (data_len > BNXT_RE_MAX_MSG_SIZE) {
|
|
+ rc = -EINVAL;
|
|
+ goto done;
|
|
+ }
|
|
/* Make sure we update MSN table only for wired wqes */
|
|
msn_update = true;
|
|
/* Specifics */
|
|
@@ -2139,8 +2139,8 @@ int bnxt_qplib_post_recv(struct bnxt_qplib_qp *qp,
|
|
struct bnxt_qplib_hwq *hwq;
|
|
struct bnxt_qplib_swq *swq;
|
|
bool sch_handler = false;
|
|
- u16 wqe_sz, idx;
|
|
- u32 wqe_idx;
|
|
+ u32 wqe_idx, idx;
|
|
+ u16 wqe_sz;
|
|
int rc = 0;
|
|
|
|
hwq = &rq->hwq;
|
|
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_fp.h b/drivers/infiniband/hw/bnxt_re/qplib_fp.h
|
|
index 0d9487c889ff..ab125f1d949e 100644
|
|
--- a/drivers/infiniband/hw/bnxt_re/qplib_fp.h
|
|
+++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.h
|
|
@@ -346,6 +346,9 @@ struct bnxt_qplib_qp {
|
|
u8 tos_dscp;
|
|
};
|
|
|
|
+#define BNXT_RE_MAX_MSG_SIZE 0x80000000
|
|
+#define BNXT_RE_INVAL_MSG_SIZE 0xFFFFFFFF
|
|
+
|
|
#define BNXT_QPLIB_MAX_CQE_ENTRY_SIZE sizeof(struct cq_base)
|
|
|
|
#define CQE_CNT_PER_PG (PAGE_SIZE / BNXT_QPLIB_MAX_CQE_ENTRY_SIZE)
|
|
--
|
|
2.50.1 (Apple Git-155)
|
|
|