On 13/01/2020 13.31, Bartlomiej Zolnierkiewicz wrote: > > On 12/17/19 12:19 PM, Viresh Kumar wrote: >> On 17-12-19, 12:50, Peter Ujfalusi wrote: >>> dma_request_slave_channel() is a wrapper on top of dma_request_chan() >>> eating up the error code. >>> >>> By using dma_request_chan() directly the driver can support deferred >>> probing against DMA. > > It doesn't seem to be the case as DMA channel is requested at the start > of the data transfer (which happens after the driver has been successfully > probed). True, I have updated the commit message to remove the reference to deferred probing. If the DMA is requested upfront (at probe time, device open time?) the driver would save quite a bit of time by not allocating and freeing the DMA resources repeatedly for each transfer, thus most likely giving a boost to throughput... > PS there is a typo in the patch summary (it should "pata_arasan_cf"). Ah, fixed this as well in v2. Thanks for catching them, - Péter > > Best regards, > -- > Bartlomiej Zolnierkiewicz > Samsung R&D Institute Poland > Samsung Electronics > >>> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@xxxxxx> >>> --- >>> drivers/ata/pata_arasan_cf.c | 6 ++++-- >>> 1 file changed, 4 insertions(+), 2 deletions(-) >>> >>> diff --git a/drivers/ata/pata_arasan_cf.c b/drivers/ata/pata_arasan_cf.c >>> index 135173c8d138..69b555d83f68 100644 >>> --- a/drivers/ata/pata_arasan_cf.c >>> +++ b/drivers/ata/pata_arasan_cf.c >>> @@ -526,9 +526,10 @@ static void data_xfer(struct work_struct *work) >>> >>> /* request dma channels */ >>> /* dma_request_channel may sleep, so calling from process context */ >>> - acdev->dma_chan = dma_request_slave_channel(acdev->host->dev, "data"); >>> - if (!acdev->dma_chan) { >>> + acdev->dma_chan = dma_request_chan(acdev->host->dev, "data"); >>> + if (IS_ERR(acdev->dma_chan)) { >>> dev_err(acdev->host->dev, "Unable to get dma_chan\n"); >>> + acdev->dma_chan = NULL; >>> goto chan_request_fail; >>> } >>> >>> @@ -539,6 +540,7 @@ static void data_xfer(struct work_struct *work) >>> } >>> >>> dma_release_channel(acdev->dma_chan); >>> + acdev->dma_chan = NULL; >>> >>> /* data xferred successfully */ >>> if (!ret) { >> >> Acked-by: Viresh Kumar <viresh.kumar@xxxxxxxxxx> >> > Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki