[PATCH] arm64: dma-mapping: Fix dma_mapping_error() when bypassing SWIOTLB
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
>> into swiotlb_dma_mapping_error() in exactly the same way as we avoid
>> swiotlb_dma_supported(), because the former also relies on SWIOTLB
>> 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
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.
More information about the linux-rpi-kernel