From 2ac8620f447a6db8522b37ce4835968022605e43 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Thu, 23 Sep 2021 16:43:03 +0200 Subject: [PATCH] lx_emul: invalidate cache for DMA-read only After a DMA transaction do only invalidate cachelines from the corresponding DMA buffers if data got transfered from device to CPU, and not vice versa. Otherwise it might result in data corruption. Ref #4268 --- repos/dde_linux/src/lib/lx_emul/shadow/kernel/dma/mapping.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/dma/mapping.c b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/dma/mapping.c index 6caed93c10..a2ba1120fa 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/dma/mapping.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/dma/mapping.c @@ -100,6 +100,9 @@ void dma_unmap_sg_attrs(struct device * dev, int i; struct scatterlist *sg; + if (dir != DMA_FROM_DEVICE) + return; + for_each_sg(sgl, sg, nents, i) { lx_emul_mem_cache_invalidate(page_address(sg_page(sg)) + sg->offset, sg->length);