Messages in this thread Patch in this message | | | Date | Tue, 20 Nov 2018 09:49:43 -0500 | From | Konrad Rzeszutek Wilk <> | Subject | Re: [PATCH 2/2] swiotlb: Skip cache maintenance on map error |
| |
On Tue, Nov 20, 2018 at 02:09:53PM +0000, Robin Murphy wrote: > If swiotlb_bounce_page() failed, calling arch_sync_dma_for_device() may > lead to such delights as performing cache maintenance on whatever > address phys_to_virt(SWIOTLB_MAP_ERROR) looks like, which is typically > outside the kernel memory map and goes about as well as expected. > > Don't do that.
+Stefano > > Fixes: a4a4330db46a ("swiotlb: add support for non-coherent DMA") > Signed-off-by: Robin Murphy <robin.murphy@arm.com> > --- > kernel/dma/swiotlb.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c > index 5731daa09a32..045930e32c0e 100644 > --- a/kernel/dma/swiotlb.c > +++ b/kernel/dma/swiotlb.c > @@ -679,7 +679,8 @@ dma_addr_t swiotlb_map_page(struct device *dev, struct page *page, > } > > if (!dev_is_dma_coherent(dev) && > - (attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0) > + (attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0 && > + dev_addr != DIRECT_MAPPING_ERROR) > arch_sync_dma_for_device(dev, phys, size, dir); > > return dev_addr; > -- > 2.19.1.dirty >
| |