@@ -75,6 +75,15 @@ static bool dma_coherent_ok(struct device *dev, phys_addr_t phys, size_t size)
7575 min_not_zero (dev -> coherent_dma_mask , dev -> bus_dma_limit );
7676}
7777
78+ static void __dma_direct_free_pages (struct device * dev , struct page * page ,
79+ size_t size )
80+ {
81+ if (IS_ENABLED (CONFIG_DMA_RESTRICTED_POOL ) &&
82+ swiotlb_free (dev , page , size ))
83+ return ;
84+ dma_free_contiguous (dev , page , size );
85+ }
86+
7887static struct page * __dma_direct_alloc_pages (struct device * dev , size_t size ,
7988 gfp_t gfp )
8089{
@@ -86,6 +95,16 @@ static struct page *__dma_direct_alloc_pages(struct device *dev, size_t size,
8695
8796 gfp |= dma_direct_optimal_gfp_mask (dev , dev -> coherent_dma_mask ,
8897 & phys_limit );
98+ if (IS_ENABLED (CONFIG_DMA_RESTRICTED_POOL ) &&
99+ is_swiotlb_for_alloc (dev )) {
100+ page = swiotlb_alloc (dev , size );
101+ if (page && !dma_coherent_ok (dev , page_to_phys (page ), size )) {
102+ __dma_direct_free_pages (dev , page , size );
103+ return NULL ;
104+ }
105+ return page ;
106+ }
107+
89108 page = dma_alloc_contiguous (dev , size , gfp );
90109 if (page && !dma_coherent_ok (dev , page_to_phys (page ), size )) {
91110 dma_free_contiguous (dev , page , size );
@@ -142,7 +161,7 @@ void *dma_direct_alloc(struct device *dev, size_t size,
142161 gfp |= __GFP_NOWARN ;
143162
144163 if ((attrs & DMA_ATTR_NO_KERNEL_MAPPING ) &&
145- !force_dma_unencrypted (dev )) {
164+ !force_dma_unencrypted (dev ) && ! is_swiotlb_for_alloc ( dev ) ) {
146165 page = __dma_direct_alloc_pages (dev , size , gfp & ~__GFP_ZERO );
147166 if (!page )
148167 return NULL ;
@@ -155,18 +174,23 @@ void *dma_direct_alloc(struct device *dev, size_t size,
155174 }
156175
157176 if (!IS_ENABLED (CONFIG_ARCH_HAS_DMA_SET_UNCACHED ) &&
158- !IS_ENABLED (CONFIG_DMA_DIRECT_REMAP ) &&
159- !dev_is_dma_coherent (dev ))
177+ !IS_ENABLED (CONFIG_DMA_DIRECT_REMAP ) && ! dev_is_dma_coherent ( dev ) &&
178+ !is_swiotlb_for_alloc (dev ))
160179 return arch_dma_alloc (dev , size , dma_handle , gfp , attrs );
161180
162181 /*
163182 * Remapping or decrypting memory may block. If either is required and
164183 * we can't block, allocate the memory from the atomic pools.
184+ * If restricted DMA (i.e., is_swiotlb_for_alloc) is required, one must
185+ * set up another device coherent pool by shared-dma-pool and use
186+ * dma_alloc_from_dev_coherent instead.
165187 */
166188 if (IS_ENABLED (CONFIG_DMA_COHERENT_POOL ) &&
167189 !gfpflags_allow_blocking (gfp ) &&
168190 (force_dma_unencrypted (dev ) ||
169- (IS_ENABLED (CONFIG_DMA_DIRECT_REMAP ) && !dev_is_dma_coherent (dev ))))
191+ (IS_ENABLED (CONFIG_DMA_DIRECT_REMAP ) &&
192+ !dev_is_dma_coherent (dev ))) &&
193+ !is_swiotlb_for_alloc (dev ))
170194 return dma_direct_alloc_from_pool (dev , size , dma_handle , gfp );
171195
172196 /* we always manually zero the memory once we are done */
@@ -237,7 +261,7 @@ void *dma_direct_alloc(struct device *dev, size_t size,
237261 return NULL ;
238262 }
239263out_free_pages :
240- dma_free_contiguous (dev , page , size );
264+ __dma_direct_free_pages (dev , page , size );
241265 return NULL ;
242266}
243267
@@ -247,15 +271,15 @@ void dma_direct_free(struct device *dev, size_t size,
247271 unsigned int page_order = get_order (size );
248272
249273 if ((attrs & DMA_ATTR_NO_KERNEL_MAPPING ) &&
250- !force_dma_unencrypted (dev )) {
274+ !force_dma_unencrypted (dev ) && ! is_swiotlb_for_alloc ( dev ) ) {
251275 /* cpu_addr is a struct page cookie, not a kernel address */
252276 dma_free_contiguous (dev , cpu_addr , size );
253277 return ;
254278 }
255279
256280 if (!IS_ENABLED (CONFIG_ARCH_HAS_DMA_SET_UNCACHED ) &&
257- !IS_ENABLED (CONFIG_DMA_DIRECT_REMAP ) &&
258- !dev_is_dma_coherent (dev )) {
281+ !IS_ENABLED (CONFIG_DMA_DIRECT_REMAP ) && ! dev_is_dma_coherent ( dev ) &&
282+ !is_swiotlb_for_alloc (dev )) {
259283 arch_dma_free (dev , size , cpu_addr , dma_addr , attrs );
260284 return ;
261285 }
@@ -273,7 +297,7 @@ void dma_direct_free(struct device *dev, size_t size,
273297 else if (IS_ENABLED (CONFIG_ARCH_HAS_DMA_CLEAR_UNCACHED ))
274298 arch_dma_clear_uncached (cpu_addr , size );
275299
276- dma_free_contiguous (dev , dma_direct_to_page (dev , dma_addr ), size );
300+ __dma_direct_free_pages (dev , dma_direct_to_page (dev , dma_addr ), size );
277301}
278302
279303struct page * dma_direct_alloc_pages (struct device * dev , size_t size ,
@@ -283,7 +307,8 @@ struct page *dma_direct_alloc_pages(struct device *dev, size_t size,
283307 void * ret ;
284308
285309 if (IS_ENABLED (CONFIG_DMA_COHERENT_POOL ) &&
286- force_dma_unencrypted (dev ) && !gfpflags_allow_blocking (gfp ))
310+ force_dma_unencrypted (dev ) && !gfpflags_allow_blocking (gfp ) &&
311+ !is_swiotlb_for_alloc (dev ))
287312 return dma_direct_alloc_from_pool (dev , size , dma_handle , gfp );
288313
289314 page = __dma_direct_alloc_pages (dev , size , gfp );
@@ -310,7 +335,7 @@ struct page *dma_direct_alloc_pages(struct device *dev, size_t size,
310335 * dma_handle = phys_to_dma_direct (dev , page_to_phys (page ));
311336 return page ;
312337out_free_pages :
313- dma_free_contiguous (dev , page , size );
338+ __dma_direct_free_pages (dev , page , size );
314339 return NULL ;
315340}
316341
@@ -329,7 +354,7 @@ void dma_direct_free_pages(struct device *dev, size_t size,
329354 if (force_dma_unencrypted (dev ))
330355 set_memory_encrypted ((unsigned long )vaddr , 1 << page_order );
331356
332- dma_free_contiguous (dev , page , size );
357+ __dma_direct_free_pages (dev , page , size );
333358}
334359
335360#if defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE ) || \
0 commit comments