Index: sys/sys/bus_dma.h =================================================================== --- sys/sys/bus_dma.h +++ sys/sys/bus_dma.h @@ -282,13 +282,17 @@ void bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map); /* - * Perform a synchronization operation on the given map. + * Perform a synchronization operation on the given map. If the map + * is NULL we have a fully IO-coherent system. Place a memory barrier + * then to ensure all data accesses are visible before going any further. */ void _bus_dmamap_sync(bus_dma_tag_t, bus_dmamap_t, bus_dmasync_op_t); #define bus_dmamap_sync(dmat, dmamap, op) \ do { \ if ((dmamap) != NULL) \ _bus_dmamap_sync(dmat, dmamap, op); \ + else \ + mb(); \ } while (0) /*