[PATCH] arm64: dma-mapping: Fix dma_mapping_error() when bypassing SWIOTLB
Arnd Bergmann
arnd at arndb.de
Wed Jan 25 04:51:29 PST 2017
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.
Arnd
More information about the linux-arm-kernel
mailing list