[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