git: 8daa60945080 - stable/14 - if_genet: don't load DMA mapping when tx_queue is full
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 04 Jul 2024 13:32:25 UTC
The branch stable/14 has been updated by mhorne:
URL: https://cgit.FreeBSD.org/src/commit/?id=8daa60945080c602f2a65ed2a0f2333c15bd947e
commit 8daa60945080c602f2a65ed2a0f2333c15bd947e
Author: Mitchell Horne <mhorne@FreeBSD.org>
AuthorDate: 2024-06-27 17:26:54 +0000
Commit: Mitchell Horne <mhorne@FreeBSD.org>
CommitDate: 2024-07-04 13:31:54 +0000
if_genet: don't load DMA mapping when tx_queue is full
gen_encap() always calls bus_dmamap_load_mbuf_sg() into 'map' (which is
the current tx_queue). If the tx_queue is full, it will load with a
'map' that already has a currently active mapping. This violates the
busdma(9) KPI.
Checking for a full queue and returning ENOBUFS will allow
gen_start_locked() to set the IFF_DRV_OACTIVE faster without having to
needlessly check if the mbuf will fit (it won't).
PR: 256482
Reviewed by: mhorne
MFC after: 1 week
Submitted by: ghuckriede@blackberry.com
(cherry picked from commit a35f66510917f5ac21c11e9642174cda7718fbc6)
---
sys/arm64/broadcom/genet/if_genet.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/sys/arm64/broadcom/genet/if_genet.c b/sys/arm64/broadcom/genet/if_genet.c
index 40fc096208c6..8fb46a7552f1 100644
--- a/sys/arm64/broadcom/genet/if_genet.c
+++ b/sys/arm64/broadcom/genet/if_genet.c
@@ -1070,6 +1070,10 @@ gen_encap(struct gen_softc *sc, struct mbuf **mp)
GEN_ASSERT_LOCKED(sc);
q = &sc->tx_queue[DEF_TXQUEUE];
+ if (q->queued == q->nentries) {
+ /* tx_queue is full */
+ return (ENOBUFS);
+ }
m = *mp;