[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.


More information about the linux-rpi-kernel mailing list