The following reply was made to PR sparc64/6557; it has been noted by GNATS.
From: Mark Kettenis <mark.kette...@xs4all.nl> To: t...@daybefore.net Cc: gn...@openbsd.org Subject: Re: sparc64/6557: DMA error with ral(4) Date: Sun, 13 Feb 2011 21:47:44 +0100 (CET) Does the diff below help? Index: rt2661.c =================================================================== RCS file: /cvs/src/sys/dev/ic/rt2661.c,v retrieving revision 1.63 diff -u -p -r1.63 rt2661.c --- rt2661.c 7 Sep 2010 16:21:42 -0000 1.63 +++ rt2661.c 13 Feb 2011 20:46:16 -0000 @@ -1004,19 +1004,19 @@ rt2661_tx_dma_intr(struct rt2661_softc * !(letoh32(desc->flags) & RT2661_TX_VALID)) break; - bus_dmamap_sync(sc->sc_dmat, data->map, 0, - data->map->dm_mapsize, BUS_DMASYNC_POSTWRITE); - bus_dmamap_unload(sc->sc_dmat, data->map); - m_freem(data->m); - data->m = NULL; - /* node reference is released in rt2661_tx_intr() */ - /* descriptor is no longer valid */ desc->flags &= ~htole32(RT2661_TX_VALID); bus_dmamap_sync(sc->sc_dmat, txq->map, txq->next * RT2661_TX_DESC_SIZE, RT2661_TX_DESC_SIZE, BUS_DMASYNC_PREWRITE); + + bus_dmamap_sync(sc->sc_dmat, data->map, 0, + data->map->dm_mapsize, BUS_DMASYNC_POSTWRITE); + bus_dmamap_unload(sc->sc_dmat, data->map); + m_freem(data->m); + data->m = NULL; + /* node reference is released in rt2661_tx_intr() */ DPRINTFN(15, ("tx dma done q=%p idx=%u\n", txq, txq->next));