[PATCH v2 2/2] ARM: dma-mapping: Fix the coherent case when iommu is used

Gregory CLEMENT gregory.clement at free-electrons.com
Fri Aug 21 09:01:14 PDT 2015


Hi Catalin,

Sorry to answer only today, I xas busy on other task until now.

On 14/08/2015 19:55, Catalin Marinas wrote:
> On Fri, Aug 14, 2015 at 06:12:56PM +0200, Gregory CLEMENT wrote:
>> When doing dma allocation with IOMMU the __iommu_alloc_atomic() was
>> used even when the system was coherent. However, this function
>> allocates from a non-cacheable pool, which is fine when the device is
>> not cache coherent but won't work as expected in the device is cache
>> coherent. Indeed, the CPU and device must access the memory using the
>> same cacheability attributes.
>>
>> Tested-by: We need someone here
> 
> And at least a build on your side ;).

It build but I forgot to set the CONFIG_ARM_DMA_USE_IOMMU config!

> 
> Rob Herring added the coherent IOMMU ops in commit 0fa478df444f ("ARM:
> add coherent iommu dma ops"). But it doesn't look like he needed the
> coherent DMA API, only the streaming one.
> 
>> @@ -1885,7 +1903,7 @@ struct dma_map_ops iommu_ops = {
>>  };
>>  
>>  struct dma_map_ops iommu_coherent_ops = {
>> -	.alloc		= arm_iommu_alloc_attrs,
>> +	.alloc		= arm_coherent_iommu_alloc_attrs,
>>  	.free		= arm_iommu_free_attrs,
> 
> Does this compile? You renamed arm_iommu_free_attrs to
> __arm_iommu_alloc_attrs but I don't see arm_iommu_free_attrs
> and arm_coherent_iommu_free_attrs functions.
> 
>>  	.mmap		= arm_iommu_mmap_attrs,
> 
> And we need an arm_coherent_iommu_mmap_attrs (similar to
> arm_iommu_mmap_attrs but without __get_dma_pgprot. Use
> arm_(coherent_)dma_mmap as an example.
> 
I am going to take care of it

Thanks,

Gregory


-- 
Gregory Clement, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com



More information about the linux-arm-kernel mailing list