[PATCH] arm64: dma-mapping: Fix dma_mapping_error() when bypassing SWIOTLB

Robin Murphy robin.murphy at arm.com
Wed Jan 25 04:54:52 PST 2017


On 25/01/17 12:51, Arnd Bergmann wrote:
> On Wed, Jan 25, 2017 at 1:37 PM, Michael Zoran <mzoran at crowfest.net> wrote:
>> On Wed, 2017-01-25 at 12:03 +0000, Robin Murphy wrote:
>>> hen bypassing SWIOTLB on small-memory systems, we need to avoid
>>> calling
>>> into swiotlb_dma_mapping_error() in exactly the same way as we avoid
>>> swiotlb_dma_supported(), because the former also relies on SWIOTLB
>>> state
>>> being initialised.
>>
>> I didn't submit the initial ARM64 port of the RPI 3, so I don't know
>> much about this.  But from a third personal point of view, this seems
>> to side step the main issue here.
> 
> I think Robin's approach is fixing exactly the right part of the code.
> 
>> From an ARM64 subsystem point of view, what exactly is the
>> correct/recommended method for ensuring the mm subsystem is initialized
>> correctly?
> 
> It is initialized correctly, the bug was calling the wrong helper when swiotlb
> is not used because we determined that we don't need it.
> 
> One concern from inspection:
> 
>> +static int __swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t addr)
>> +{
>> +       if (swiotlb)
>> +               return swiotlb_dma_mapping_error(hwdev, addr);
>> +       return 1;
>> +}
> 
> Shouldn't that be
> 
>      return addr == DMA_ERROR_CODE;
> 
> in the last line? Otherwise any addr is interpreted as an error, which
> seems wrong. Maybe I'm missing something obvious here.

Aw crap, copy/paste/brain error - thanks.

I'll have a nice strong cup of tea, actually engage thinking mode, and
respin...

Robin.

> 
>     Arnd
> 




More information about the linux-arm-kernel mailing list