Page MenuHomeFreeBSD

D54841.diff
No OneTemporary

D54841.diff

diff --git a/sys/compat/linuxkpi/common/src/linux_pci.c b/sys/compat/linuxkpi/common/src/linux_pci.c
--- a/sys/compat/linuxkpi/common/src/linux_pci.c
+++ b/sys/compat/linuxkpi/common/src/linux_pci.c
@@ -1720,9 +1720,26 @@
}
LINUX_DMA_PCTRIE_REMOVE(&priv->ptree, dma_addr);
- if ((attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0)
- dma_sync_single_for_cpu(dev, dma_addr, len, direction);
+ if ((attrs & DMA_ATTR_SKIP_CPU_SYNC) != 0)
+ goto skip_sync;
+ /* dma_sync_single_for_cpu() unrolled to avoid lock recursicn. */
+ switch (direction) {
+ case DMA_BIDIRECTIONAL:
+ bus_dmamap_sync(obj->dmat, obj->dmamap, BUS_DMASYNC_POSTREAD);
+ bus_dmamap_sync(obj->dmat, obj->dmamap, BUS_DMASYNC_PREREAD);
+ break;
+ case DMA_TO_DEVICE:
+ bus_dmamap_sync(obj->dmat, obj->dmamap, BUS_DMASYNC_POSTWRITE);
+ break;
+ case DMA_FROM_DEVICE:
+ bus_dmamap_sync(obj->dmat, obj->dmamap, BUS_DMASYNC_POSTREAD);
+ break;
+ default:
+ break;
+ }
+
+skip_sync:
bus_dmamap_unload(obj->dmat, obj->dmamap);
bus_dmamap_destroy(obj->dmat, obj->dmamap);
DMA_PRIV_UNLOCK(priv);

File Metadata

Mime Type
text/plain
Expires
Mon, Aug 24, 12:17 PM (16 h, 41 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
37183397
Default Alt Text
D54841.diff (1 KB)

Event Timeline