Re: [PATCH] dmaengine: Stricter legacy checking in dma_request_slave_channel_compat()

From: Vinod Koul
Date: Thu Aug 20 2015 - 02:29:41 EST


On Mon, Aug 17, 2015 at 03:08:55PM +0200, Geert Uytterhoeven wrote:
> dma_request_slave_channel_compat() is meant for drivers that support
> both DT and legacy platform device based probing: if DT channel DMA
> setup fails, it will fall back to platform data based DMA channel setup,
> using hardcoded DMA channel IDs and a filter function.
>
> However, if the DTS doesn't provide a "dmas" property for the device,
> the fallback is also used. If the legacy filter function is not
> hardcoded in the DMA slave driver, but comes from platform data, it will
> be NULL. Then dma_request_slave_channel_compat() will succeed
> incorrectly, and return a DMA channel, as a NULL legacy filter function
> actually means "all channels are OK", not "do not match".
>
> Later, when trying to use that DMA channel, it will fail with:
>
> rcar-dmac e6700000.dma-controller: rcar_dmac_prep_slave_sg: bad parameter: len=1, id=-22
>
> To fix this, ensure that both the filter function and the DMA channel ID
> are not NULL before using the legacy fallback.
>
> Note that some DMA slave drivers can handle this failure, and will fall
> back to PIO.
>
> See also commit 056f6c87028544de ("dmaengine: shdma: Make dummy
> shdma_chan_filter() always return false"), which fixed the same issue
> for the case where shdma_chan_filter() is hardcoded in a DMA slave
> driver.

Applied, thanks

--
~Vinod

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/