aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitchell Horne <mhorne@FreeBSD.org>2024-06-27 17:26:54 +0000
committerMitchell Horne <mhorne@FreeBSD.org>2024-06-27 17:44:36 +0000
commita35f66510917f5ac21c11e9642174cda7718fbc6 (patch)
tree892318d0e710eb7d16efc8ca8d3d2e7fdf7a26e9
parent3703e1a73e0e0367c04f47f793e46495e46e647b (diff)
downloadsrc-a35f66510917f5ac21c11e9642174cda7718fbc6.tar.gz
src-a35f66510917f5ac21c11e9642174cda7718fbc6.zip
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
-rw-r--r--sys/arm64/broadcom/genet/if_genet.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/arm64/broadcom/genet/if_genet.c b/sys/arm64/broadcom/genet/if_genet.c
index e102b6c3a95f..ccc35fe841df 100644
--- a/sys/arm64/broadcom/genet/if_genet.c
+++ b/sys/arm64/broadcom/genet/if_genet.c
@@ -1069,6 +1069,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;