On 29/01/2020 18.35, Marek Szyprowski wrote: > Commit 71723a96b8b1 ("dmaengine: Create symlinks between DMA channels and > slaves") changed the dma_request_chan() function flow in such a way that > it always returns EPROBE_DEFER in case of channels that cannot be found. > This break the operation of the devices which have optional DMA channels > as it puts their drivers in endless deferred probe loop. Fix this by > propagating the proper error value. > > Fixes: 71723a96b8b1 ("dmaengine: Create symlinks between DMA channels and slaves") > Signed-off-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx> > --- > drivers/dma/dmaengine.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c > index f3ef4edd4de1..27b64a665347 100644 > --- a/drivers/dma/dmaengine.c > +++ b/drivers/dma/dmaengine.c > @@ -759,7 +759,7 @@ struct dma_chan *dma_request_chan(struct device *dev, const char *name) > if (!IS_ERR_OR_NULL(chan)) > goto found; > > - return ERR_PTR(-EPROBE_DEFER); > + return chan; It should be: return chan ? chan : ERR_PTR(-EPROBE_DEFER); dma_request_chan() should never return NULL, it either returns the dma_chan, or ERR_PTR(). > > found: > chan->slave = dev; > - Péter Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki