On Sun, Sep 24, 2017 at 08:26:41AM +0200, Christophe JAILLET wrote: > All sanity checks in this function set 'sdmac->status = DMA_ERROR' if > something looks wrong, except if the byte count or the address don't match > the bus width. > > Fix it and report the error in status in such a case. > > Signed-off-by: Christophe JAILLET <christophe.jaillet@xxxxxxxxxx> > --- > Untested, so please review carefuly. > --- > drivers/dma/imx-sdma.c | 17 +++++++++++------ > 1 file changed, 11 insertions(+), 6 deletions(-) > > diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c > index a67ec1bdc4e0..f0419967eb92 100644 > --- a/drivers/dma/imx-sdma.c > +++ b/drivers/dma/imx-sdma.c > @@ -1240,26 +1240,31 @@ static struct dma_async_tx_descriptor *sdma_prep_slave_sg( > sdmac->chn_count += count; > > if (sdmac->word_size > DMA_SLAVE_BUSWIDTH_4_BYTES) { > - ret = -EINVAL; > + ret = -EINVAL; this is a style fix and should not be part of this patch > goto err_out; > } > > switch (sdmac->word_size) { > case DMA_SLAVE_BUSWIDTH_4_BYTES: > bd->mode.command = 0; > - if (count & 3 || sg->dma_address & 3) > - return NULL; > + if (count & 3 || sg->dma_address & 3) { > + ret = -EINVAL; > + goto err_out; > + } this looks okay, but then slave configuration comes from different path, so not sure if not setting was intentional or a miss. Fabio, Nandor?? > break; > case DMA_SLAVE_BUSWIDTH_2_BYTES: > bd->mode.command = 2; > - if (count & 1 || sg->dma_address & 1) > - return NULL; > + if (count & 1 || sg->dma_address & 1) { > + ret = -EINVAL; > + goto err_out; > + } > break; > case DMA_SLAVE_BUSWIDTH_1_BYTE: > bd->mode.command = 1; > break; > default: > - return NULL; > + ret = -EINVAL; > + goto err_out; > } > > param = BD_DONE | BD_EXTD | BD_CONT; > -- > 2.11.0 > -- ~Vinod -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html