diff options
| author | Dmitry Salychev <dsl@FreeBSD.org> | 2026-03-28 18:57:45 +0000 |
|---|---|---|
| committer | Dmitry Salychev <dsl@FreeBSD.org> | 2026-03-29 18:34:09 +0000 |
| commit | 5812415bee55a9063508b02fda9418b0eadb0bb4 (patch) | |
| tree | bd7ace71abc076f55047f5dd2e47c39670e7326d | |
| parent | c78e653b49f7039bb8c84a6ad79be21b90aaf464 (diff) | |
dpaa2: Perform bus_dma pre-write sync before enqueue operation
Without a proper synchronization payload of the egress TCP segments
can be corrupted as tuexen@ described in
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=292006#c31.
This patch is indirectly related to 292006 because a properly enabled
and announced support for the TX checksum offloading hides potentially
corrupted frame payload.
NOTE: Returned back with updated placeholders.
PR: 292006
Reported by: tuexen@
Reviewed by: tuexen@
Tested by: dsl@, tuexen@
Differential Revision: https://reviews.freebsd.org/D56144
MFC after: 3 days
| -rw-r--r-- | sys/dev/dpaa2/dpaa2_ni.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/dev/dpaa2/dpaa2_ni.c b/sys/dev/dpaa2/dpaa2_ni.c index c72e68b8a62f..49e72c8ee14f 100644 --- a/sys/dev/dpaa2/dpaa2_ni.c +++ b/sys/dev/dpaa2/dpaa2_ni.c @@ -3004,6 +3004,9 @@ dpaa2_ni_tx(struct dpaa2_ni_softc *sc, struct dpaa2_channel *ch, goto err_unload; } + bus_dmamap_sync(buf->dmat, buf->dmap, BUS_DMASYNC_PREWRITE); + bus_dmamap_sync(sgt->dmat, sgt->dmap, BUS_DMASYNC_PREWRITE); + /* TODO: Enqueue several frames in a single command */ for (int i = 0; i < DPAA2_NI_ENQUEUE_RETRIES; i++) { /* TODO: Return error codes instead of # of frames */ @@ -3013,9 +3016,6 @@ dpaa2_ni_tx(struct dpaa2_ni_softc *sc, struct dpaa2_channel *ch, } } - bus_dmamap_sync(buf->dmat, buf->dmap, BUS_DMASYNC_PREWRITE); - bus_dmamap_sync(sgt->dmat, sgt->dmap, BUS_DMASYNC_PREWRITE); - if (rc != 1) { fq->chan->tx_dropped++; if_inc_counter(sc->ifp, IFCOUNTER_OERRORS, 1); |
