aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2022-05-26 20:38:20 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2022-05-26 21:32:54 +0000
commit8020c05683f266c5513cfe8ad3e58e7e06f85ffa (patch)
tree4e66d13235306821f038783804f4c9fef0dea690
parent75e7e3ce34d9782d825f7b3579afd82e3de55b5e (diff)
downloadsrc-8020c05683f266c5513cfe8ad3e58e7e06f85ffa.tar.gz
src-8020c05683f266c5513cfe8ad3e58e7e06f85ffa.zip
cxgbei: Adjust the calculation for the maximum ISO payload.
Round down the maximim ISO payload by the current MSS. Otherwise the round up by MSS when calculating the 16-bit maximum payload len passed along in the FLOWC work request can overflow. Discussed with: np Sponsored by: Chelsio Communications
-rw-r--r--sys/dev/cxgbe/cxgbei/icl_cxgbei.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/dev/cxgbe/cxgbei/icl_cxgbei.c b/sys/dev/cxgbe/cxgbei/icl_cxgbei.c
index f7b06a472200..1b896516d546 100644
--- a/sys/dev/cxgbe/cxgbei/icl_cxgbei.c
+++ b/sys/dev/cxgbe/cxgbei/icl_cxgbei.c
@@ -1103,7 +1103,7 @@ icl_cxgbei_conn_handoff(struct icl_conn *ic, int fd)
struct tcpcb *tp;
struct toepcb *toep;
cap_rights_t rights;
- u_int max_rx_pdu_len, max_tx_pdu_len;
+ u_int max_iso_payload, max_rx_pdu_len, max_tx_pdu_len;
int error, max_iso_pdus;
MPASS(icc->icc_signature == CXGBEI_CONN_SIGNATURE);
@@ -1195,7 +1195,9 @@ icl_cxgbei_conn_handoff(struct icl_conn *ic, int fd)
if (icc->sc->tt.iso && chip_id(icc->sc) >= CHELSIO_T5 &&
!is_memfree(icc->sc)) {
- max_iso_pdus = CXGBEI_MAX_ISO_PAYLOAD / max_tx_pdu_len;
+ max_iso_payload = rounddown(CXGBEI_MAX_ISO_PAYLOAD,
+ tp->t_maxseg);
+ max_iso_pdus = max_iso_payload / max_tx_pdu_len;
ic->ic_hw_isomax = max_iso_pdus *
ic->ic_max_send_data_segment_length;
} else