On Mon, May 10, 2021 at 11:05 PM Christoph Hellwig hch@lst.de wrote:
+static inline bool is_dev_swiotlb_force(struct device *dev) +{ +#ifdef CONFIG_DMA_RESTRICTED_POOL
if (dev->dma_io_tlb_mem)
return true;
+#endif /* CONFIG_DMA_RESTRICTED_POOL */
return false;
+}
/* If SWIOTLB is active, use its maximum mapping size */ if (is_swiotlb_active(dev) &&
(dma_addressing_limited(dev) || swiotlb_force == SWIOTLB_FORCE))
(dma_addressing_limited(dev) || swiotlb_force == SWIOTLB_FORCE ||
is_dev_swiotlb_force(dev)))
This is a mess. I think the right way is to have an always_bounce flag in the io_tlb_mem structure instead. Then the global swiotlb_force can go away and be replace with this and the fact that having no io_tlb_mem structure at all means forced no buffering (after a little refactoring).
Will do in the next version.
dri-devel@lists.freedesktop.org