2018-08-03 07:40:20

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 00/46] Use dmaenginem_async_device_register to simplify code

All the patches are using dmaenginem_async_device_register to simplify code
except the last one:
dmaengine: add COMPILE_TEST for the drivers

I use the last one to do the compiler test.
There are still 20 drivers which do not use the dmaenginem_async_device_register.
Let me take a rest, if this patch set is accepted, I will do the rest.

Huang Shijie (46):
dmaengine: zx_dma: use dmaenginem_async_device_register to simplify
the code
dmaengine: zynqmp_dma: use dmaenginem_async_device_register to
simplify the code
dmaengine: xilinx_dma: use dmaenginem_async_device_register to
simplify the code
dmaengine: xgene-dma: use dmaenginem_async_device_register to simplify
the code
dmaengine: txx9dmac: use dmaenginem_async_device_register to simplify
the code
dmaengine: timb_dma: use dmaenginem_async_device_register to simplify
the code
dmaengine: omap-dma: use dmaenginem_async_device_register to simplify
the code
dmaengine: edma: use dmaenginem_async_device_register to simplify the
code
dmaengine: cppi41: use dmaenginem_async_device_register to simplify
the code
dmaengine: tegra210-adma: use helper dmaenginem_async_device_register
dmaengine: tegra20-apb-dma: use helper
dmaenginem_async_device_register
dmaengine: sun6i-dma: use helper dmaenginem_async_device_register
dmaengine: sun4i-dma: use dmaenginem_async_device_register to simplify
the code
dmaengine: coh901318: use dmaenginem_async_device_register to simplify
the code
dmaengine: s3c24xx-dma: use dmaenginem_async_device_register to
simplify the code
dmaengine: ste_dma40: use dmaenginem_async_device_register to simplify
the code
dmaengine: stm32-mdma: use dmaenginem_async_device_register to
simplify the code
dmaengine: stm32-dma: use dmaenginem_async_device_register to simplify
the code
dmaengine: sprd-dma: use dmaenginem_async_device_register to simplify
the code
dmaengine: sirf-dma: use dmaenginem_async_device_register to simplify
the code
dmaengine: bam_dma: use dmaenginem_async_device_register to simplify
the code
dmaengine: sudmac: use dmaenginem_async_device_register to simplify
the code
dmaengine: sa11x0-dma: use dmaenginem_async_device_register to
simplify the code
dmaengine: nbpfaxi: use dmaenginem_async_device_register to simplify
the code
dmaengine: mmp_tdma: use dmaenginem_async_device_register to simplify
the code
dmaengine: shdmac: use dmaenginem_async_device_register to simplify
the code
dmaengine: usb-dmac: use dmaenginem_async_device_register to simplify
the code
dmaengine: rcar-dmac: use dmaenginem_async_device_register to simplify
the code
dmaengine: hidma: use dmaenginem_async_device_register to simplify the
code
dmaengine: pxa_dma: use dmaenginem_async_device_register to simplify
the code
dmaengine: moxart-dma: use dmaenginem_async_device_register to
simplify the code
dmaengine: pl330: use dmaenginem_async_device_register to simplify the
code
dmaengine: pch_dma: use dmaenginem_async_device_register to simplify
the code
dmaengine: mxs-dma: use dmaenginem_async_device_register to simplify
the code
dmaengine: mtk-hsdma: use dmaenginem_async_device_register to simplify
the code
dmaengine: k3dma: use dmaenginem_async_device_register to simplify the
code
dmaengine: imx-sdma: use dmaenginem_async_device_register to simplify
the code
dmaengine: imx-dma: use dmaenginem_async_device_register to simplify
the code
dmaengine: img-mdc-dma: use dmaenginem_async_device_register to
simplify the code
dmaengine: fsl-edma: use dmaenginem_async_device_register to simplify
the code
dmaengine: at_hdmac: use dmaenginem_async_device_register to simplify
the code
dmaengine: at_xdmac: use dmaenginem_async_device_register to simplify
the code
dmaengine: dma-jz4780: use dmaenginem_async_device_register to
simplify the code
dmaengine: dma-jz4740: use dmaenginem_async_device_register to
simplify the code
dmaengine: dma-axi-dmac: use dmaenginem_async_device_register to
simplify the code
dmaengine: add COMPILE_TEST for the drivers

drivers/dma/Kconfig | 24 ++++++++++++------------
drivers/dma/at_hdmac.c | 4 +---
drivers/dma/at_xdmac.c | 7 ++-----
drivers/dma/coh901318.c | 14 ++++----------
drivers/dma/dma-axi-dmac.c | 7 ++-----
drivers/dma/dma-jz4740.c | 7 ++-----
drivers/dma/dma-jz4780.c | 8 ++------
drivers/dma/fsl-edma.c | 4 +---
drivers/dma/img-mdc-dma.c | 7 ++-----
drivers/dma/imx-dma.c | 8 ++------
drivers/dma/imx-sdma.c | 7 ++-----
drivers/dma/k3dma.c | 7 ++-----
drivers/dma/mediatek/mtk-hsdma.c | 4 +---
drivers/dma/mmp_tdma.c | 7 ++-----
drivers/dma/moxart-dma.c | 5 +----
drivers/dma/mxs-dma.c | 3 +--
drivers/dma/nbpfaxi.c | 7 ++-----
drivers/dma/pch_dma.c | 4 +---
drivers/dma/pl330.c | 4 +---
drivers/dma/pxa_dma.c | 3 +--
drivers/dma/qcom/bam_dma.c | 7 ++-----
drivers/dma/qcom/hidma.c | 3 +--
drivers/dma/s3c24xx-dma.c | 11 +++--------
drivers/dma/sa11x0-dma.c | 4 +---
drivers/dma/sh/rcar-dmac.c | 5 +----
drivers/dma/sh/shdmac.c | 5 +----
drivers/dma/sh/sudmac.c | 4 +---
drivers/dma/sh/usb-dmac.c | 3 +--
drivers/dma/sirf-dma.c | 7 ++-----
drivers/dma/sprd-dma.c | 7 ++-----
drivers/dma/ste_dma40.c | 14 +++++---------
drivers/dma/stm32-dma.c | 3 +--
drivers/dma/stm32-mdma.c | 4 +---
drivers/dma/sun4i-dma.c | 7 ++-----
drivers/dma/sun6i-dma.c | 7 ++-----
drivers/dma/tegra20-apb-dma.c | 8 ++------
drivers/dma/tegra210-adma.c | 8 ++------
drivers/dma/ti/Kconfig | 2 +-
drivers/dma/ti/cppi41.c | 7 ++-----
drivers/dma/ti/edma.c | 8 ++------
drivers/dma/ti/omap-dma.c | 5 +----
drivers/dma/timb_dma.c | 3 +--
drivers/dma/txx9dmac.c | 4 +---
drivers/dma/xgene-dma.c | 16 ++--------------
drivers/dma/xilinx/xilinx_dma.c | 5 +----
drivers/dma/xilinx/zynqmp_dma.c | 4 +---
drivers/dma/zx_dma.c | 7 ++-----
47 files changed, 88 insertions(+), 221 deletions(-)

--
2.17.1



2018-08-03 07:22:24

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 03/46] dmaengine: xilinx_dma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code,
remove dma_async_device_unregister.

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/xilinx/xilinx_dma.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/dma/xilinx/xilinx_dma.c b/drivers/dma/xilinx/xilinx_dma.c
index c12442312595..97ffeb5e59bb 100644
--- a/drivers/dma/xilinx/xilinx_dma.c
+++ b/drivers/dma/xilinx/xilinx_dma.c
@@ -2705,13 +2705,12 @@ static int xilinx_dma_probe(struct platform_device *pdev)
}

/* Register the DMA engine with the core */
- dma_async_device_register(&xdev->common);
+ dmaenginem_async_device_register(&xdev->common);

err = of_dma_controller_register(node, of_dma_xilinx_xlate,
xdev);
if (err < 0) {
dev_err(&pdev->dev, "Unable to register DMA to DT\n");
- dma_async_device_unregister(&xdev->common);
goto error;
}

@@ -2747,8 +2746,6 @@ static int xilinx_dma_remove(struct platform_device *pdev)

of_dma_controller_free(pdev->dev.of_node);

- dma_async_device_unregister(&xdev->common);
-
for (i = 0; i < xdev->nr_channels; i++)
if (xdev->chan[i])
xilinx_dma_chan_remove(xdev->chan[i]);
--
2.17.1


2018-08-03 07:22:37

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 08/46] dmaengine: edma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/ti/edma.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/drivers/dma/ti/edma.c b/drivers/dma/ti/edma.c
index ceabdea40ae0..28ba1e722c47 100644
--- a/drivers/dma/ti/edma.c
+++ b/drivers/dma/ti/edma.c
@@ -2388,18 +2388,17 @@ static int edma_probe(struct platform_device *pdev)
ecc->dma_slave.filter.mapcnt = info->slavecnt;
ecc->dma_slave.filter.fn = edma_filter_fn;

- ret = dma_async_device_register(&ecc->dma_slave);
+ ret = dmaenginem_async_device_register(&ecc->dma_slave);
if (ret) {
dev_err(dev, "slave ddev registration failed (%d)\n", ret);
goto err_reg1;
}

if (ecc->dma_memcpy) {
- ret = dma_async_device_register(ecc->dma_memcpy);
+ ret = dmaenginem_async_device_register(ecc->dma_memcpy);
if (ret) {
dev_err(dev, "memcpy ddev registration failed (%d)\n",
ret);
- dma_async_device_unregister(&ecc->dma_slave);
goto err_reg1;
}
}
@@ -2439,9 +2438,6 @@ static int edma_remove(struct platform_device *pdev)

if (dev->of_node)
of_dma_controller_free(dev->of_node);
- dma_async_device_unregister(&ecc->dma_slave);
- if (ecc->dma_memcpy)
- dma_async_device_unregister(ecc->dma_memcpy);
edma_free_slot(ecc, ecc->dummy_slot);

return 0;
--
2.17.1


2018-08-03 07:22:44

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 10/46] dmaengine: tegra210-adma: use helper dmaenginem_async_device_register

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister
remove the label dma_remove

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/tegra210-adma.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/drivers/dma/tegra210-adma.c b/drivers/dma/tegra210-adma.c
index b26256f23d67..bd99f12a00e3 100644
--- a/drivers/dma/tegra210-adma.c
+++ b/drivers/dma/tegra210-adma.c
@@ -746,7 +746,7 @@ static int tegra_adma_probe(struct platform_device *pdev)
tdma->dma_dev.directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV);
tdma->dma_dev.residue_granularity = DMA_RESIDUE_GRANULARITY_SEGMENT;

- ret = dma_async_device_register(&tdma->dma_dev);
+ ret = dmaenginem_async_device_register(&tdma->dma_dev);
if (ret < 0) {
dev_err(&pdev->dev, "ADMA registration failed: %d\n", ret);
goto irq_dispose;
@@ -756,7 +756,7 @@ static int tegra_adma_probe(struct platform_device *pdev)
tegra_dma_of_xlate, tdma);
if (ret < 0) {
dev_err(&pdev->dev, "ADMA OF registration failed %d\n", ret);
- goto dma_remove;
+ goto irq_dispose;
}

pm_runtime_put(&pdev->dev);
@@ -766,8 +766,6 @@ static int tegra_adma_probe(struct platform_device *pdev)

return 0;

-dma_remove:
- dma_async_device_unregister(&tdma->dma_dev);
irq_dispose:
while (--i >= 0)
irq_dispose_mapping(tdma->channels[i].irq);
@@ -786,8 +784,6 @@ static int tegra_adma_remove(struct platform_device *pdev)
struct tegra_adma *tdma = platform_get_drvdata(pdev);
int i;

- dma_async_device_unregister(&tdma->dma_dev);
-
for (i = 0; i < tdma->nr_channels; ++i)
irq_dispose_mapping(tdma->channels[i].irq);

--
2.17.1


2018-08-03 07:22:50

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 25/46] dmaengine: mmp_tdma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.
return error if it fails.

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/mmp_tdma.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/dma/mmp_tdma.c b/drivers/dma/mmp_tdma.c
index 13c68b6434ce..9f5869e1a017 100644
--- a/drivers/dma/mmp_tdma.c
+++ b/drivers/dma/mmp_tdma.c
@@ -530,9 +530,6 @@ static void mmp_tdma_issue_pending(struct dma_chan *chan)

static int mmp_tdma_remove(struct platform_device *pdev)
{
- struct mmp_tdma_device *tdev = platform_get_drvdata(pdev);
-
- dma_async_device_unregister(&tdev->device);
return 0;
}

@@ -696,7 +693,7 @@ static int mmp_tdma_probe(struct platform_device *pdev)
dma_set_mask(&pdev->dev, DMA_BIT_MASK(64));
platform_set_drvdata(pdev, tdev);

- ret = dma_async_device_register(&tdev->device);
+ ret = dmaenginem_async_device_register(&tdev->device);
if (ret) {
dev_err(tdev->device.dev, "unable to register\n");
return ret;
@@ -708,7 +705,7 @@ static int mmp_tdma_probe(struct platform_device *pdev)
if (ret) {
dev_err(tdev->device.dev,
"failed to register controller\n");
- dma_async_device_unregister(&tdev->device);
+ return ret;
}
}

--
2.17.1


2018-08-03 07:22:50

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 12/46] dmaengine: sun6i-dma: use helper dmaenginem_async_device_register

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister
remove the label err_dma_unregister

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/sun6i-dma.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c
index 0cd13f17fc11..419d6090f9e1 100644
--- a/drivers/dma/sun6i-dma.c
+++ b/drivers/dma/sun6i-dma.c
@@ -1319,7 +1319,7 @@ static int sun6i_dma_probe(struct platform_device *pdev)
goto err_clk_disable;
}

- ret = dma_async_device_register(&sdc->slave);
+ ret = dmaenginem_async_device_register(&sdc->slave);
if (ret) {
dev_warn(&pdev->dev, "Failed to register DMA engine device\n");
goto err_irq_disable;
@@ -1329,7 +1329,7 @@ static int sun6i_dma_probe(struct platform_device *pdev)
sdc);
if (ret) {
dev_err(&pdev->dev, "of_dma_controller_register failed\n");
- goto err_dma_unregister;
+ goto err_irq_disable;
}

if (sdc->cfg->clock_autogate_enable)
@@ -1337,8 +1337,6 @@ static int sun6i_dma_probe(struct platform_device *pdev)

return 0;

-err_dma_unregister:
- dma_async_device_unregister(&sdc->slave);
err_irq_disable:
sun6i_kill_tasklet(sdc);
err_clk_disable:
@@ -1355,7 +1353,6 @@ static int sun6i_dma_remove(struct platform_device *pdev)
struct sun6i_dma_dev *sdc = platform_get_drvdata(pdev);

of_dma_controller_free(pdev->dev.of_node);
- dma_async_device_unregister(&sdc->slave);

sun6i_kill_tasklet(sdc);

--
2.17.1


2018-08-03 07:23:02

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 07/46] dmaengine: omap-dma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/ti/omap-dma.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/dma/ti/omap-dma.c b/drivers/dma/ti/omap-dma.c
index a4a931ddf6f6..085748c6eb67 100644
--- a/drivers/dma/ti/omap-dma.c
+++ b/drivers/dma/ti/omap-dma.c
@@ -1566,7 +1566,7 @@ static int omap_dma_probe(struct platform_device *pdev)
}
}

- rc = dma_async_device_register(&od->ddev);
+ rc = dmaenginem_async_device_register(&od->ddev);
if (rc) {
pr_warn("OMAP-DMA: failed to register slave DMA engine device: %d\n",
rc);
@@ -1584,7 +1584,6 @@ static int omap_dma_probe(struct platform_device *pdev)
of_dma_simple_xlate, &omap_dma_info);
if (rc) {
pr_warn("OMAP-DMA: failed to register DMA controller\n");
- dma_async_device_unregister(&od->ddev);
omap_dma_free(od);
}
}
@@ -1606,8 +1605,6 @@ static int omap_dma_remove(struct platform_device *pdev)
irq = platform_get_irq(pdev, 1);
devm_free_irq(&pdev->dev, irq, od);

- dma_async_device_unregister(&od->ddev);
-
if (!od->legacy) {
/* Disable all interrupts */
omap_dma_glbl_write(od, IRQENABLE_L0, 0);
--
2.17.1


2018-08-03 07:23:09

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 21/46] dmaengine: bam_dma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.
remove label err_unregister_dma

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/qcom/bam_dma.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/dma/qcom/bam_dma.c b/drivers/dma/qcom/bam_dma.c
index 1617715aa6e0..d164892a8aa4 100644
--- a/drivers/dma/qcom/bam_dma.c
+++ b/drivers/dma/qcom/bam_dma.c
@@ -1332,7 +1332,7 @@ static int bam_dma_probe(struct platform_device *pdev)
bdev->common.device_tx_status = bam_tx_status;
bdev->common.dev = bdev->dev;

- ret = dma_async_device_register(&bdev->common);
+ ret = dmaenginem_async_device_register(&bdev->common);
if (ret) {
dev_err(bdev->dev, "failed to register dma async device\n");
goto err_bam_channel_exit;
@@ -1341,7 +1341,7 @@ static int bam_dma_probe(struct platform_device *pdev)
ret = of_dma_controller_register(pdev->dev.of_node, bam_dma_xlate,
&bdev->common);
if (ret)
- goto err_unregister_dma;
+ goto err_bam_channel_exit;

if (bdev->controlled_remotely) {
pm_runtime_disable(&pdev->dev);
@@ -1357,8 +1357,6 @@ static int bam_dma_probe(struct platform_device *pdev)

return 0;

-err_unregister_dma:
- dma_async_device_unregister(&bdev->common);
err_bam_channel_exit:
for (i = 0; i < bdev->num_channels; i++)
tasklet_kill(&bdev->channels[i].vc.task);
@@ -1378,7 +1376,6 @@ static int bam_dma_remove(struct platform_device *pdev)
pm_runtime_force_suspend(&pdev->dev);

of_dma_controller_free(pdev->dev.of_node);
- dma_async_device_unregister(&bdev->common);

/* mask all interrupts for this execution environment */
writel_relaxed(0, bam_addr(bdev, 0, BAM_IRQ_SRCS_MSK_EE));
--
2.17.1


2018-08-03 07:23:13

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 29/46] dmaengine: hidma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/qcom/hidma.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/dma/qcom/hidma.c b/drivers/dma/qcom/hidma.c
index 43d4b00b8138..1d8130edea58 100644
--- a/drivers/dma/qcom/hidma.c
+++ b/drivers/dma/qcom/hidma.c
@@ -877,7 +877,7 @@ static int hidma_probe(struct platform_device *pdev)
if (rc)
goto uninit;

- rc = dma_async_device_register(&dmadev->ddev);
+ rc = dmaenginem_async_device_register(&dmadev->ddev);
if (rc)
goto uninit;

@@ -924,7 +924,6 @@ static int hidma_remove(struct platform_device *pdev)
struct hidma_dev *dmadev = platform_get_drvdata(pdev);

pm_runtime_get_sync(dmadev->ddev.dev);
- dma_async_device_unregister(&dmadev->ddev);
if (!dmadev->lldev->msi_support)
devm_free_irq(dmadev->ddev.dev, dmadev->irq, dmadev->lldev);
else
--
2.17.1


2018-08-03 07:23:18

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 43/46] dmaengine: dma-jz4780: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.
remove label err_unregister_dev

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/dma-jz4780.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/drivers/dma/dma-jz4780.c b/drivers/dma/dma-jz4780.c
index 85820a2d69d4..b2a244902bc5 100644
--- a/drivers/dma/dma-jz4780.c
+++ b/drivers/dma/dma-jz4780.c
@@ -847,7 +847,7 @@ static int jz4780_dma_probe(struct platform_device *pdev)
jzchan->vchan.desc_free = jz4780_dma_desc_free;
}

- ret = dma_async_device_register(dd);
+ ret = dmaenginem_async_device_register(dd);
if (ret) {
dev_err(dev, "failed to register device\n");
goto err_disable_clk;
@@ -858,15 +858,12 @@ static int jz4780_dma_probe(struct platform_device *pdev)
jzdma);
if (ret) {
dev_err(dev, "failed to register OF DMA controller\n");
- goto err_unregister_dev;
+ goto err_disable_clk;
}

dev_info(dev, "JZ4780 DMA controller initialised\n");
return 0;

-err_unregister_dev:
- dma_async_device_unregister(dd);
-
err_disable_clk:
clk_disable_unprepare(jzdma->clk);

@@ -887,7 +884,6 @@ static int jz4780_dma_remove(struct platform_device *pdev)
for (i = 0; i < JZ_DMA_NR_CHANNELS; i++)
tasklet_kill(&jzdma->chan[i].vchan.task);

- dma_async_device_unregister(&jzdma->dma_device);
return 0;
}

--
2.17.1


2018-08-03 07:23:31

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 17/46] dmaengine: stm32-mdma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/stm32-mdma.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/dma/stm32-mdma.c b/drivers/dma/stm32-mdma.c
index 06dd1725375e..390e4cae0e1a 100644
--- a/drivers/dma/stm32-mdma.c
+++ b/drivers/dma/stm32-mdma.c
@@ -1656,7 +1656,7 @@ static int stm32_mdma_probe(struct platform_device *pdev)
return ret;
}

- ret = dma_async_device_register(dd);
+ ret = dmaenginem_async_device_register(dd);
if (ret)
return ret;

@@ -1674,8 +1674,6 @@ static int stm32_mdma_probe(struct platform_device *pdev)
return 0;

err_unregister:
- dma_async_device_unregister(dd);
-
return ret;
}

--
2.17.1


2018-08-03 07:23:33

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 28/46] dmaengine: rcar-dmac: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/sh/rcar-dmac.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/dma/sh/rcar-dmac.c b/drivers/dma/sh/rcar-dmac.c
index 48ee35e2bce6..87130b3eef5c 100644
--- a/drivers/dma/sh/rcar-dmac.c
+++ b/drivers/dma/sh/rcar-dmac.c
@@ -1884,7 +1884,7 @@ static int rcar_dmac_probe(struct platform_device *pdev)
*
* Default transfer size of 32 bytes requires 32-byte alignment.
*/
- ret = dma_async_device_register(engine);
+ ret = dmaenginem_async_device_register(engine);
if (ret < 0)
goto error;

@@ -1898,10 +1898,7 @@ static int rcar_dmac_probe(struct platform_device *pdev)

static int rcar_dmac_remove(struct platform_device *pdev)
{
- struct rcar_dmac *dmac = platform_get_drvdata(pdev);
-
of_dma_controller_free(pdev->dev.of_node);
- dma_async_device_unregister(&dmac->engine);

pm_runtime_disable(&pdev->dev);

--
2.17.1


2018-08-03 07:23:37

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 46/46] dmaengine: add COMPILE_TEST for the drivers

We can do the compiling test with COMPILE_TEST.
Thisi patch adds the COMPILE_TEST for the drivers.

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/Kconfig | 24 ++++++++++++------------
drivers/dma/ti/Kconfig | 2 +-
2 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig
index d4a4230a7942..7670b2f967c4 100644
--- a/drivers/dma/Kconfig
+++ b/drivers/dma/Kconfig
@@ -85,14 +85,14 @@ config AMCC_PPC440SPE_ADMA

config AT_HDMAC
tristate "Atmel AHB DMA support"
- depends on ARCH_AT91
+ depends on ARCH_AT91 || COMPILE_TEST
select DMA_ENGINE
help
Support the Atmel AHB DMA controller.

config AT_XDMAC
tristate "Atmel XDMA support"
- depends on ARCH_AT91
+ depends on ARCH_AT91 || COMPILE_TEST
select DMA_ENGINE
help
Support the Atmel XDMA controller.
@@ -163,7 +163,7 @@ config DMA_SA11X0

config DMA_SUN4I
tristate "Allwinner A10 DMA SoCs support"
- depends on MACH_SUN4I || MACH_SUN5I || MACH_SUN7I
+ depends on MACH_SUN4I || MACH_SUN5I || MACH_SUN7I || COMPILE_TEST
default (MACH_SUN4I || MACH_SUN5I || MACH_SUN7I)
select DMA_ENGINE
select DMA_VIRTUAL_CHANNELS
@@ -240,7 +240,7 @@ config IMG_MDC_DMA

config IMX_DMA
tristate "i.MX DMA support"
- depends on ARCH_MXC
+ depends on ARCH_MXC || COMPILE_TEST
select DMA_ENGINE
help
Support the i.MX DMA engine. This engine is integrated into
@@ -248,7 +248,7 @@ config IMX_DMA

config IMX_SDMA
tristate "i.MX SDMA support"
- depends on ARCH_MXC
+ depends on ARCH_MXC || COMPILE_TEST
select DMA_ENGINE
select DMA_VIRTUAL_CHANNELS
help
@@ -341,7 +341,7 @@ config MMP_TDMA

config MOXART_DMA
tristate "MOXART DMA support"
- depends on ARCH_MOXART
+ depends on ARCH_MOXART || COMPILE_TEST
select DMA_ENGINE
select DMA_VIRTUAL_CHANNELS
help
@@ -439,7 +439,7 @@ config PL330_DMA

config PXA_DMA
bool "PXA DMA support"
- depends on (ARCH_MMP || ARCH_PXA)
+ depends on (ARCH_MMP || ARCH_PXA || COMPILE_TEST)
select DMA_ENGINE
select DMA_VIRTUAL_CHANNELS
help
@@ -450,14 +450,14 @@ config PXA_DMA

config SIRF_DMA
tristate "CSR SiRFprimaII/SiRFmarco DMA support"
- depends on ARCH_SIRF
+ depends on ARCH_SIRF || COMPILE_TEST
select DMA_ENGINE
help
Enable support for the CSR SiRFprimaII DMA engine.

config STE_DMA40
bool "ST-Ericsson DMA40 support"
- depends on ARCH_U8500
+ depends on ARCH_U8500 || COMPILE_TEST
select DMA_ENGINE
help
Support for ST-Ericsson DMA40 controller
@@ -538,7 +538,7 @@ config TXX9_DMAC

config TEGRA20_APB_DMA
bool "NVIDIA Tegra20 APB DMA support"
- depends on ARCH_TEGRA
+ depends on ARCH_TEGRA || COMPILE_TEST
select DMA_ENGINE
help
Support for the NVIDIA Tegra20 APB DMA controller driver. The
@@ -579,7 +579,7 @@ config XGENE_DMA

config XILINX_DMA
tristate "Xilinx AXI DMAS Engine"
- depends on (ARCH_ZYNQ || MICROBLAZE || ARM64)
+ depends on (ARCH_ZYNQ || MICROBLAZE || ARM64 || COMPILE_TEST)
select DMA_ENGINE
help
Enable support for Xilinx AXI VDMA Soft IP.
@@ -598,7 +598,7 @@ config XILINX_DMA

config XILINX_ZYNQMP_DMA
tristate "Xilinx ZynqMP DMA Engine"
- depends on (ARCH_ZYNQ || MICROBLAZE || ARM64)
+ depends on (ARCH_ZYNQ || MICROBLAZE || ARM64 || COMPILE_TEST)
select DMA_ENGINE
help
Enable support for Xilinx ZynqMP DMA controller.
diff --git a/drivers/dma/ti/Kconfig b/drivers/dma/ti/Kconfig
index e5e74e1361dc..a494789c5b87 100644
--- a/drivers/dma/ti/Kconfig
+++ b/drivers/dma/ti/Kconfig
@@ -4,7 +4,7 @@

config TI_CPPI41
tristate "Texas Instruments CPPI 4.1 DMA support"
- depends on (ARCH_OMAP || ARCH_DAVINCI_DA8XX)
+ depends on (ARCH_OMAP || ARCH_DAVINCI_DA8XX || COMPILE_TEST)
select DMA_ENGINE
help
The Communications Port Programming Interface (CPPI) 4.1 DMA engine
--
2.17.1


2018-08-03 07:23:43

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 41/46] dmaengine: at_hdmac: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/at_hdmac.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/dma/at_hdmac.c b/drivers/dma/at_hdmac.c
index 75f38d19fcbe..536146601238 100644
--- a/drivers/dma/at_hdmac.c
+++ b/drivers/dma/at_hdmac.c
@@ -1954,7 +1954,7 @@ static int __init at_dma_probe(struct platform_device *pdev)
dma_has_cap(DMA_SLAVE, atdma->dma_common.cap_mask) ? "slave " : "",
plat_dat->nr_channels);

- dma_async_device_register(&atdma->dma_common);
+ dmaenginem_async_device_register(&atdma->dma_common);

/*
* Do not return an error if the dmac node is not present in order to
@@ -1973,7 +1973,6 @@ static int __init at_dma_probe(struct platform_device *pdev)
return 0;

err_of_dma_controller_register:
- dma_async_device_unregister(&atdma->dma_common);
dma_pool_destroy(atdma->memset_pool);
err_memset_pool_create:
dma_pool_destroy(atdma->dma_desc_pool);
@@ -2000,7 +1999,6 @@ static int at_dma_remove(struct platform_device *pdev)
struct resource *io;

at_dma_off(atdma);
- dma_async_device_unregister(&atdma->dma_common);

dma_pool_destroy(atdma->memset_pool);
dma_pool_destroy(atdma->dma_desc_pool);
--
2.17.1


2018-08-03 07:23:46

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 45/46] dmaengine: dma-axi-dmac: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.
remove label err_unregister_device

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/dma-axi-dmac.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/dma/dma-axi-dmac.c b/drivers/dma/dma-axi-dmac.c
index 15b2453d2647..d510184762e6 100644
--- a/drivers/dma/dma-axi-dmac.c
+++ b/drivers/dma/dma-axi-dmac.c
@@ -678,14 +678,14 @@ static int axi_dmac_probe(struct platform_device *pdev)

axi_dmac_write(dmac, AXI_DMAC_REG_IRQ_MASK, 0x00);

- ret = dma_async_device_register(dma_dev);
+ ret = dmaenginem_async_device_register(dma_dev);
if (ret)
goto err_clk_disable;

ret = of_dma_controller_register(pdev->dev.of_node,
of_dma_xlate_by_chan_id, dma_dev);
if (ret)
- goto err_unregister_device;
+ goto err_clk_disable;

ret = request_irq(dmac->irq, axi_dmac_interrupt_handler, IRQF_SHARED,
dev_name(&pdev->dev), dmac);
@@ -698,8 +698,6 @@ static int axi_dmac_probe(struct platform_device *pdev)

err_unregister_of:
of_dma_controller_free(pdev->dev.of_node);
-err_unregister_device:
- dma_async_device_unregister(&dmac->dma_dev);
err_clk_disable:
clk_disable_unprepare(dmac->clk);

@@ -713,7 +711,6 @@ static int axi_dmac_remove(struct platform_device *pdev)
of_dma_controller_free(pdev->dev.of_node);
free_irq(dmac->irq, dmac);
tasklet_kill(&dmac->chan.vchan.task);
- dma_async_device_unregister(&dmac->dma_dev);
clk_disable_unprepare(dmac->clk);

return 0;
--
2.17.1


2018-08-03 07:23:54

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 44/46] dmaengine: dma-jz4740: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.
remove label err_unregister

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/dma-jz4740.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/dma/dma-jz4740.c b/drivers/dma/dma-jz4740.c
index afd5e10f8927..30513a16e344 100644
--- a/drivers/dma/dma-jz4740.c
+++ b/drivers/dma/dma-jz4740.c
@@ -553,21 +553,19 @@ static int jz4740_dma_probe(struct platform_device *pdev)
vchan_init(&chan->vchan, dd);
}

- ret = dma_async_device_register(dd);
+ ret = dmaenginem_async_device_register(dd);
if (ret)
goto err_clk;

irq = platform_get_irq(pdev, 0);
ret = request_irq(irq, jz4740_dma_irq, 0, dev_name(&pdev->dev), dmadev);
if (ret)
- goto err_unregister;
+ goto err_clk;

platform_set_drvdata(pdev, dmadev);

return 0;

-err_unregister:
- dma_async_device_unregister(dd);
err_clk:
clk_disable_unprepare(dmadev->clk);
return ret;
@@ -593,7 +591,6 @@ static int jz4740_dma_remove(struct platform_device *pdev)
free_irq(irq, dmadev);

jz4740_cleanup_vchan(&dmadev->ddev);
- dma_async_device_unregister(&dmadev->ddev);
clk_disable_unprepare(dmadev->clk);

return 0;
--
2.17.1


2018-08-03 07:24:00

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 09/46] dmaengine: cppi41: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/ti/cppi41.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/dma/ti/cppi41.c b/drivers/dma/ti/cppi41.c
index 1497da367710..d2998a19ed2e 100644
--- a/drivers/dma/ti/cppi41.c
+++ b/drivers/dma/ti/cppi41.c
@@ -1096,21 +1096,19 @@ static int cppi41_dma_probe(struct platform_device *pdev)
goto err_chans;
cdd->irq = irq;

- ret = dma_async_device_register(&cdd->ddev);
+ ret = dmaenginem_async_device_register(&cdd->ddev);
if (ret)
goto err_chans;

ret = of_dma_controller_register(dev->of_node,
cppi41_dma_xlate, &cpp41_dma_info);
if (ret)
- goto err_of;
+ goto err_chans;

pm_runtime_mark_last_busy(dev);
pm_runtime_put_autosuspend(dev);

return 0;
-err_of:
- dma_async_device_unregister(&cdd->ddev);
err_chans:
deinit_cppi41(dev, cdd);
err_init_cppi:
@@ -1132,7 +1130,6 @@ static int cppi41_dma_remove(struct platform_device *pdev)
dev_err(&pdev->dev, "%s could not pm_runtime_get: %i\n",
__func__, error);
of_dma_controller_free(pdev->dev.of_node);
- dma_async_device_unregister(&cdd->ddev);

devm_free_irq(&pdev->dev, cdd->irq, cdd);
deinit_cppi41(&pdev->dev, cdd);
--
2.17.1


2018-08-03 07:24:05

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 16/46] dmaengine: ste_dma40: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.
remove label unregister_slave, unregister_memcpy

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/ste_dma40.c | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)

diff --git a/drivers/dma/ste_dma40.c b/drivers/dma/ste_dma40.c
index f4edfc56f34e..5e328bd10c27 100644
--- a/drivers/dma/ste_dma40.c
+++ b/drivers/dma/ste_dma40.c
@@ -2839,7 +2839,7 @@ static int __init d40_dmaengine_init(struct d40_base *base,

d40_ops_init(base, &base->dma_slave);

- err = dma_async_device_register(&base->dma_slave);
+ err = dmaenginem_async_device_register(&base->dma_slave);

if (err) {
d40_err(base->dev, "Failed to register slave channels\n");
@@ -2854,12 +2854,12 @@ static int __init d40_dmaengine_init(struct d40_base *base,

d40_ops_init(base, &base->dma_memcpy);

- err = dma_async_device_register(&base->dma_memcpy);
+ err = dmaenginem_async_device_register(&base->dma_memcpy);

if (err) {
d40_err(base->dev,
"Failed to register memcpy only channels\n");
- goto unregister_slave;
+ goto exit;
}

d40_chan_init(base, &base->dma_both, base->phy_chans,
@@ -2871,18 +2871,14 @@ static int __init d40_dmaengine_init(struct d40_base *base,
dma_cap_set(DMA_CYCLIC, base->dma_slave.cap_mask);

d40_ops_init(base, &base->dma_both);
- err = dma_async_device_register(&base->dma_both);
+ err = dmaenginem_async_device_register(&base->dma_both);

if (err) {
d40_err(base->dev,
"Failed to register logical and physical capable channels\n");
- goto unregister_memcpy;
+ goto exit;
}
return 0;
- unregister_memcpy:
- dma_async_device_unregister(&base->dma_memcpy);
- unregister_slave:
- dma_async_device_unregister(&base->dma_slave);
exit:
return err;
}
--
2.17.1


2018-08-03 07:24:07

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 26/46] dmaengine: shdmac: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/sh/shdmac.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/dma/sh/shdmac.c b/drivers/dma/sh/shdmac.c
index 04a74e0a95b7..52060cd21e79 100644
--- a/drivers/dma/sh/shdmac.c
+++ b/drivers/dma/sh/shdmac.c
@@ -866,7 +866,7 @@ static int sh_dmae_probe(struct platform_device *pdev)

pm_runtime_put(&pdev->dev);

- err = dma_async_device_register(&shdev->shdma_dev.dma_dev);
+ err = dmaenginem_async_device_register(&shdev->shdma_dev.dma_dev);
if (err < 0)
goto edmadevreg;

@@ -897,9 +897,6 @@ static int sh_dmae_probe(struct platform_device *pdev)
static int sh_dmae_remove(struct platform_device *pdev)
{
struct sh_dmae_device *shdev = platform_get_drvdata(pdev);
- struct dma_device *dma_dev = &shdev->shdma_dev.dma_dev;
-
- dma_async_device_unregister(dma_dev);

spin_lock_irq(&sh_dmae_lock);
list_del_rcu(&shdev->node);
--
2.17.1


2018-08-03 07:24:25

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 20/46] dmaengine: sirf-dma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.
remove label unreg_dma_dev

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/sirf-dma.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/dma/sirf-dma.c b/drivers/dma/sirf-dma.c
index a0733ac3edb1..de19880d4254 100644
--- a/drivers/dma/sirf-dma.c
+++ b/drivers/dma/sirf-dma.c
@@ -944,7 +944,7 @@ static int sirfsoc_dma_probe(struct platform_device *op)
/* Register DMA engine */
dev_set_drvdata(dev, sdma);

- ret = dma_async_device_register(dma);
+ ret = dmaenginem_async_device_register(dma);
if (ret)
goto free_irq;

@@ -952,7 +952,7 @@ static int sirfsoc_dma_probe(struct platform_device *op)
ret = of_dma_controller_register(dn, of_dma_sirfsoc_xlate, sdma);
if (ret) {
dev_err(dev, "failed to register DMA controller\n");
- goto unreg_dma_dev;
+ goto free_irq;
}

pm_runtime_enable(&op->dev);
@@ -960,8 +960,6 @@ static int sirfsoc_dma_probe(struct platform_device *op)

return 0;

-unreg_dma_dev:
- dma_async_device_unregister(dma);
free_irq:
free_irq(sdma->irq, sdma);
irq_dispose:
@@ -975,7 +973,6 @@ static int sirfsoc_dma_remove(struct platform_device *op)
struct sirfsoc_dma *sdma = dev_get_drvdata(dev);

of_dma_controller_free(op->dev.of_node);
- dma_async_device_unregister(&sdma->dma);
free_irq(sdma->irq, sdma);
tasklet_kill(&sdma->tasklet);
irq_dispose_mapping(sdma->irq);
--
2.17.1


2018-08-03 07:24:26

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 32/46] dmaengine: pl330: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/pl330.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
index 88750a34e859..e4bc330132c7 100644
--- a/drivers/dma/pl330.c
+++ b/drivers/dma/pl330.c
@@ -3037,7 +3037,7 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id)
pd->max_burst = ((pl330->quirks & PL330_QUIRK_BROKEN_NO_FLUSHP) ?
1 : PL330_MAX_BURST);

- ret = dma_async_device_register(pd);
+ ret = dmaenginem_async_device_register(pd);
if (ret) {
dev_err(&adev->dev, "unable to register DMAC\n");
goto probe_err3;
@@ -3114,8 +3114,6 @@ static int pl330_remove(struct amba_device *adev)
devm_free_irq(&adev->dev, irq, pl330);
}

- dma_async_device_unregister(&pl330->ddma);
-
/* Idle the DMAC */
list_for_each_entry_safe(pch, _p, &pl330->ddma.channels,
chan.device_node) {
--
2.17.1


2018-08-03 07:24:30

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 36/46] dmaengine: k3dma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.
remove label of_dma_register_fail

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/k3dma.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/dma/k3dma.c b/drivers/dma/k3dma.c
index 6bfa217ed6d0..5d9ab35b982d 100644
--- a/drivers/dma/k3dma.c
+++ b/drivers/dma/k3dma.c
@@ -902,14 +902,14 @@ static int k3_dma_probe(struct platform_device *op)

k3_dma_enable_dma(d, true);

- ret = dma_async_device_register(&d->slave);
+ ret = dmaenginem_async_device_register(&d->slave);
if (ret)
goto dma_async_register_fail;

ret = of_dma_controller_register((&op->dev)->of_node,
k3_of_dma_simple_xlate, d);
if (ret)
- goto of_dma_register_fail;
+ goto dma_async_register_fail;

spin_lock_init(&d->lock);
INIT_LIST_HEAD(&d->chan_pending);
@@ -919,8 +919,6 @@ static int k3_dma_probe(struct platform_device *op)

return 0;

-of_dma_register_fail:
- dma_async_device_unregister(&d->slave);
dma_async_register_fail:
clk_disable_unprepare(d->clk);
return ret;
@@ -931,7 +929,6 @@ static int k3_dma_remove(struct platform_device *op)
struct k3_dma_chan *c, *cn;
struct k3_dma_dev *d = platform_get_drvdata(op);

- dma_async_device_unregister(&d->slave);
of_dma_controller_free((&op->dev)->of_node);

devm_free_irq(&op->dev, d->irq, d);
--
2.17.1


2018-08-03 07:24:43

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 40/46] dmaengine: fsl-edma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/fsl-edma.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/dma/fsl-edma.c b/drivers/dma/fsl-edma.c
index c7568869284e..f475efce1d60 100644
--- a/drivers/dma/fsl-edma.c
+++ b/drivers/dma/fsl-edma.c
@@ -972,7 +972,7 @@ static int fsl_edma_probe(struct platform_device *pdev)

platform_set_drvdata(pdev, fsl_edma);

- ret = dma_async_device_register(&fsl_edma->dma_dev);
+ ret = dmaenginem_async_device_register(&fsl_edma->dma_dev);
if (ret) {
dev_err(&pdev->dev,
"Can't register Freescale eDMA engine. (%d)\n", ret);
@@ -984,7 +984,6 @@ static int fsl_edma_probe(struct platform_device *pdev)
if (ret) {
dev_err(&pdev->dev,
"Can't register Freescale eDMA of_dma. (%d)\n", ret);
- dma_async_device_unregister(&fsl_edma->dma_dev);
fsl_disable_clocks(fsl_edma, DMAMUX_NR);
return ret;
}
@@ -1014,7 +1013,6 @@ static int fsl_edma_remove(struct platform_device *pdev)
fsl_edma_irq_exit(pdev, fsl_edma);
fsl_edma_cleanup_vchan(&fsl_edma->dma_dev);
of_dma_controller_free(np);
- dma_async_device_unregister(&fsl_edma->dma_dev);
fsl_disable_clocks(fsl_edma, DMAMUX_NR);

return 0;
--
2.17.1


2018-08-03 07:24:48

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 30/46] dmaengine: pxa_dma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/pxa_dma.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/dma/pxa_dma.c b/drivers/dma/pxa_dma.c
index b31c28b67ad3..21001ea078fb 100644
--- a/drivers/dma/pxa_dma.c
+++ b/drivers/dma/pxa_dma.c
@@ -1285,7 +1285,6 @@ static int pxad_remove(struct platform_device *op)

pxad_cleanup_debugfs(pdev);
pxad_free_channels(&pdev->slave);
- dma_async_device_unregister(&pdev->slave);
return 0;
}

@@ -1396,7 +1395,7 @@ static int pxad_init_dmadev(struct platform_device *op,
init_waitqueue_head(&c->wq_state);
}

- return dma_async_device_register(&pdev->slave);
+ return dmaenginem_async_device_register(&pdev->slave);
}

static int pxad_probe(struct platform_device *op)
--
2.17.1


2018-08-03 07:24:50

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 42/46] dmaengine: at_xdmac: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.
remove label err_dma_unregister

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/at_xdmac.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/dma/at_xdmac.c b/drivers/dma/at_xdmac.c
index 4bf72561667c..c220f667be80 100644
--- a/drivers/dma/at_xdmac.c
+++ b/drivers/dma/at_xdmac.c
@@ -2041,7 +2041,7 @@ static int at_xdmac_probe(struct platform_device *pdev)
}
platform_set_drvdata(pdev, atxdmac);

- ret = dma_async_device_register(&atxdmac->dma);
+ ret = dmaenginem_async_device_register(&atxdmac->dma);
if (ret) {
dev_err(&pdev->dev, "fail to register DMA engine device\n");
goto err_clk_disable;
@@ -2051,7 +2051,7 @@ static int at_xdmac_probe(struct platform_device *pdev)
at_xdmac_xlate, atxdmac);
if (ret) {
dev_err(&pdev->dev, "could not register of dma controller\n");
- goto err_dma_unregister;
+ goto err_clk_disable;
}

dev_info(&pdev->dev, "%d channels, mapped at 0x%p\n",
@@ -2059,8 +2059,6 @@ static int at_xdmac_probe(struct platform_device *pdev)

return 0;

-err_dma_unregister:
- dma_async_device_unregister(&atxdmac->dma);
err_clk_disable:
clk_disable_unprepare(atxdmac->clk);
err_free_irq:
@@ -2075,7 +2073,6 @@ static int at_xdmac_remove(struct platform_device *pdev)

at_xdmac_off(atxdmac);
of_dma_controller_free(pdev->dev.of_node);
- dma_async_device_unregister(&atxdmac->dma);
clk_disable_unprepare(atxdmac->clk);

free_irq(atxdmac->irq, atxdmac);
--
2.17.1


2018-08-03 07:25:04

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 33/46] dmaengine: pch_dma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/pch_dma.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/dma/pch_dma.c b/drivers/dma/pch_dma.c
index afd8f27bda96..505463d077c0 100644
--- a/drivers/dma/pch_dma.c
+++ b/drivers/dma/pch_dma.c
@@ -922,7 +922,7 @@ static int pch_dma_probe(struct pci_dev *pdev,
pd->dma.device_prep_slave_sg = pd_prep_slave_sg;
pd->dma.device_terminate_all = pd_device_terminate_all;

- err = dma_async_device_register(&pd->dma);
+ err = dmaenginem_async_device_register(&pd->dma);
if (err) {
dev_err(&pdev->dev, "Failed to register DMA device\n");
goto err_free_pool;
@@ -952,8 +952,6 @@ static void pch_dma_remove(struct pci_dev *pdev)
struct dma_chan *chan, *_c;

if (pd) {
- dma_async_device_unregister(&pd->dma);
-
free_irq(pdev->irq, pd);

list_for_each_entry_safe(chan, _c, &pd->dma.channels,
--
2.17.1


2018-08-03 07:25:31

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 24/46] dmaengine: nbpfaxi: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.
remove label e_dma_dev_unreg

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/nbpfaxi.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/dma/nbpfaxi.c b/drivers/dma/nbpfaxi.c
index 8c7b2e8703da..def82e77f321 100644
--- a/drivers/dma/nbpfaxi.c
+++ b/drivers/dma/nbpfaxi.c
@@ -1437,18 +1437,16 @@ static int nbpf_probe(struct platform_device *pdev)

nbpf_configure(nbpf);

- ret = dma_async_device_register(dma_dev);
+ ret = dmaenginem_async_device_register(dma_dev);
if (ret < 0)
goto e_clk_off;

ret = of_dma_controller_register(np, nbpf_of_xlate, nbpf);
if (ret < 0)
- goto e_dma_dev_unreg;
+ goto e_clk_off;

return 0;

-e_dma_dev_unreg:
- dma_async_device_unregister(dma_dev);
e_clk_off:
clk_disable_unprepare(nbpf->clk);

@@ -1471,7 +1469,6 @@ static int nbpf_remove(struct platform_device *pdev)
}

of_dma_controller_free(pdev->dev.of_node);
- dma_async_device_unregister(&nbpf->dma_dev);
clk_disable_unprepare(nbpf->clk);

return 0;
--
2.17.1


2018-08-03 07:25:48

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 38/46] dmaengine: imx-dma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.
remove label err_of_dma_controller

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/imx-dma.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/drivers/dma/imx-dma.c b/drivers/dma/imx-dma.c
index 75b6ff0415ee..d651fbea77ee 100644
--- a/drivers/dma/imx-dma.c
+++ b/drivers/dma/imx-dma.c
@@ -1186,7 +1186,7 @@ static int __init imxdma_probe(struct platform_device *pdev)
imxdma->dma_device.dev->dma_parms = &imxdma->dma_parms;
dma_set_max_seg_size(imxdma->dma_device.dev, 0xffffff);

- ret = dma_async_device_register(&imxdma->dma_device);
+ ret = dmaenginem_async_device_register(&imxdma->dma_device);
if (ret) {
dev_err(&pdev->dev, "unable to register\n");
goto disable_dma_ahb_clk;
@@ -1197,14 +1197,12 @@ static int __init imxdma_probe(struct platform_device *pdev)
imxdma_xlate, imxdma);
if (ret) {
dev_err(&pdev->dev, "unable to register of_dma_controller\n");
- goto err_of_dma_controller;
+ goto disable_dma_ahb_clk;
}
}

return 0;

-err_of_dma_controller:
- dma_async_device_unregister(&imxdma->dma_device);
disable_dma_ahb_clk:
clk_disable_unprepare(imxdma->dma_ahb);
disable_dma_ipg_clk:
@@ -1237,8 +1235,6 @@ static int imxdma_remove(struct platform_device *pdev)

imxdma_free_irq(pdev, imxdma);

- dma_async_device_unregister(&imxdma->dma_device);
-
if (pdev->dev.of_node)
of_dma_controller_free(pdev->dev.of_node);

--
2.17.1


2018-08-03 07:25:57

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 37/46] dmaengine: imx-sdma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.
remove label err_register

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/imx-sdma.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
index b4ec2d20e661..3ee28d044e3c 100644
--- a/drivers/dma/imx-sdma.c
+++ b/drivers/dma/imx-sdma.c
@@ -2062,7 +2062,7 @@ static int sdma_probe(struct platform_device *pdev)

platform_set_drvdata(pdev, sdma);

- ret = dma_async_device_register(&sdma->dma_device);
+ ret = dmaenginem_async_device_register(&sdma->dma_device);
if (ret) {
dev_err(&pdev->dev, "unable to register\n");
goto err_init;
@@ -2072,7 +2072,7 @@ static int sdma_probe(struct platform_device *pdev)
ret = of_dma_controller_register(np, sdma_xlate, sdma);
if (ret) {
dev_err(&pdev->dev, "failed to register controller\n");
- goto err_register;
+ goto err_init;
}

spba_bus = of_find_compatible_node(NULL, NULL, "fsl,spba-bus");
@@ -2086,8 +2086,6 @@ static int sdma_probe(struct platform_device *pdev)

return 0;

-err_register:
- dma_async_device_unregister(&sdma->dma_device);
err_init:
kfree(sdma->script_addrs);
err_irq:
@@ -2103,7 +2101,6 @@ static int sdma_remove(struct platform_device *pdev)
int i;

devm_free_irq(&pdev->dev, sdma->irq, sdma);
- dma_async_device_unregister(&sdma->dma_device);
kfree(sdma->script_addrs);
clk_unprepare(sdma->clk_ahb);
clk_unprepare(sdma->clk_ipg);
--
2.17.1


2018-08-03 07:26:01

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 34/46] dmaengine: mxs-dma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/mxs-dma.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/dma/mxs-dma.c b/drivers/dma/mxs-dma.c
index ae5182ff0128..35193b31a9e0 100644
--- a/drivers/dma/mxs-dma.c
+++ b/drivers/dma/mxs-dma.c
@@ -847,7 +847,7 @@ static int __init mxs_dma_probe(struct platform_device *pdev)
mxs_dma->dma_device.residue_granularity = DMA_RESIDUE_GRANULARITY_BURST;
mxs_dma->dma_device.device_issue_pending = mxs_dma_enable_chan;

- ret = dma_async_device_register(&mxs_dma->dma_device);
+ ret = dmaenginem_async_device_register(&mxs_dma->dma_device);
if (ret) {
dev_err(mxs_dma->dma_device.dev, "unable to register\n");
return ret;
@@ -857,7 +857,6 @@ static int __init mxs_dma_probe(struct platform_device *pdev)
if (ret) {
dev_err(mxs_dma->dma_device.dev,
"failed to register controller\n");
- dma_async_device_unregister(&mxs_dma->dma_device);
}

dev_info(mxs_dma->dma_device.dev, "initialized\n");
--
2.17.1


2018-08-03 07:26:11

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 18/46] dmaengine: stm32-dma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/stm32-dma.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/dma/stm32-dma.c b/drivers/dma/stm32-dma.c
index 379e8d534e61..6bbb3fab4f13 100644
--- a/drivers/dma/stm32-dma.c
+++ b/drivers/dma/stm32-dma.c
@@ -1295,7 +1295,7 @@ static int stm32_dma_probe(struct platform_device *pdev)
vchan_init(&chan->vchan, dd);
}

- ret = dma_async_device_register(dd);
+ ret = dmaenginem_async_device_register(dd);
if (ret)
return ret;

@@ -1334,7 +1334,6 @@ static int stm32_dma_probe(struct platform_device *pdev)
return 0;

err_unregister:
- dma_async_device_unregister(dd);

return ret;
}
--
2.17.1


2018-08-03 07:26:12

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 31/46] dmaengine: moxart-dma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/moxart-dma.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/dma/moxart-dma.c b/drivers/dma/moxart-dma.c
index e04499c1f27f..80bff27c5f9b 100644
--- a/drivers/dma/moxart-dma.c
+++ b/drivers/dma/moxart-dma.c
@@ -618,7 +618,7 @@ static int moxart_probe(struct platform_device *pdev)
}
mdc->irq = irq;

- ret = dma_async_device_register(&mdc->dma_slave);
+ ret = dmaenginem_async_device_register(&mdc->dma_slave);
if (ret) {
dev_err(dev, "dma_async_device_register failed\n");
return ret;
@@ -627,7 +627,6 @@ static int moxart_probe(struct platform_device *pdev)
ret = of_dma_controller_register(node, moxart_of_xlate, mdc);
if (ret) {
dev_err(dev, "of_dma_controller_register failed\n");
- dma_async_device_unregister(&mdc->dma_slave);
return ret;
}

@@ -642,8 +641,6 @@ static int moxart_remove(struct platform_device *pdev)

devm_free_irq(&pdev->dev, m->irq, m);

- dma_async_device_unregister(&m->dma_slave);
-
if (pdev->dev.of_node)
of_dma_controller_free(pdev->dev.of_node);

--
2.17.1


2018-08-03 07:26:33

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 35/46] dmaengine: mtk-hsdma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/mediatek/mtk-hsdma.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/dma/mediatek/mtk-hsdma.c b/drivers/dma/mediatek/mtk-hsdma.c
index b7ec56ae02a6..a8b2e84e1556 100644
--- a/drivers/dma/mediatek/mtk-hsdma.c
+++ b/drivers/dma/mediatek/mtk-hsdma.c
@@ -977,7 +977,7 @@ static int mtk_hsdma_probe(struct platform_device *pdev)
INIT_LIST_HEAD(&vc->desc_hw_processing);
}

- err = dma_async_device_register(dd);
+ err = dmaenginem_async_device_register(dd);
if (err)
return err;

@@ -1007,7 +1007,6 @@ static int mtk_hsdma_probe(struct platform_device *pdev)
return 0;

err_unregister:
- dma_async_device_unregister(dd);

return err;
}
@@ -1035,7 +1034,6 @@ static int mtk_hsdma_remove(struct platform_device *pdev)
/* Disable hardware */
mtk_hsdma_hw_deinit(hsdma);

- dma_async_device_unregister(&hsdma->ddev);
of_dma_controller_free(pdev->dev.of_node);

return 0;
--
2.17.1


2018-08-03 07:26:39

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 39/46] dmaengine: img-mdc-dma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister
remove label unregister

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/img-mdc-dma.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/dma/img-mdc-dma.c b/drivers/dma/img-mdc-dma.c
index 25cec9c243e1..1e555ac62b1e 100644
--- a/drivers/dma/img-mdc-dma.c
+++ b/drivers/dma/img-mdc-dma.c
@@ -1001,21 +1001,19 @@ static int mdc_dma_probe(struct platform_device *pdev)
return ret;
}

- ret = dma_async_device_register(&mdma->dma_dev);
+ ret = dmaenginem_async_device_register(&mdma->dma_dev);
if (ret)
goto suspend;

ret = of_dma_controller_register(pdev->dev.of_node, mdc_of_xlate, mdma);
if (ret)
- goto unregister;
+ goto suspend;

dev_info(&pdev->dev, "MDC with %u channels and %u threads\n",
mdma->nr_channels, mdma->nr_threads);

return 0;

-unregister:
- dma_async_device_unregister(&mdma->dma_dev);
suspend:
if (!pm_runtime_enabled(&pdev->dev))
img_mdc_runtime_suspend(&pdev->dev);
@@ -1029,7 +1027,6 @@ static int mdc_dma_remove(struct platform_device *pdev)
struct mdc_chan *mchan, *next;

of_dma_controller_free(pdev->dev.of_node);
- dma_async_device_unregister(&mdma->dma_dev);

list_for_each_entry_safe(mchan, next, &mdma->dma_dev.channels,
vc.chan.device_node) {
--
2.17.1


2018-08-03 07:26:44

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 27/46] dmaengine: usb-dmac: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/sh/usb-dmac.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/dma/sh/usb-dmac.c b/drivers/dma/sh/usb-dmac.c
index 1bb1a8e09025..c09d7c65c2c5 100644
--- a/drivers/dma/sh/usb-dmac.c
+++ b/drivers/dma/sh/usb-dmac.c
@@ -849,7 +849,7 @@ static int usb_dmac_probe(struct platform_device *pdev)
engine->device_tx_status = usb_dmac_tx_status;
engine->device_issue_pending = usb_dmac_issue_pending;

- ret = dma_async_device_register(engine);
+ ret = dmaenginem_async_device_register(engine);
if (ret < 0)
goto error;

@@ -879,7 +879,6 @@ static int usb_dmac_remove(struct platform_device *pdev)
for (i = 0; i < dmac->n_channels; ++i)
usb_dmac_chan_remove(dmac, &dmac->channels[i]);
of_dma_controller_free(pdev->dev.of_node);
- dma_async_device_unregister(&dmac->engine);

pm_runtime_disable(&pdev->dev);

--
2.17.1


2018-08-03 07:26:49

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 23/46] dmaengine: sa11x0-dma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/sa11x0-dma.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/dma/sa11x0-dma.c b/drivers/dma/sa11x0-dma.c
index b31d07c7d93c..9181d6048f43 100644
--- a/drivers/dma/sa11x0-dma.c
+++ b/drivers/dma/sa11x0-dma.c
@@ -863,7 +863,7 @@ static int sa11x0_dma_init_dmadev(struct dma_device *dmadev,
vchan_init(&c->vc, dmadev);
}

- return dma_async_device_register(dmadev);
+ return dmaenginem_async_device_register(dmadev);
}

static int sa11x0_dma_request_irq(struct platform_device *pdev, int nr,
@@ -987,8 +987,6 @@ static int sa11x0_dma_remove(struct platform_device *pdev)
struct sa11x0_dma_dev *d = platform_get_drvdata(pdev);
unsigned pch;

- dma_async_device_unregister(&d->slave);
-
sa11x0_dma_free_channels(&d->slave);
for (pch = 0; pch < NR_PHY_CHAN; pch++)
sa11x0_dma_free_irq(pdev, pch, &d->phy[pch]);
--
2.17.1


2018-08-03 07:27:59

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 02/46] dmaengine: zynqmp_dma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code,
remove dma_async_device_unregister.

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/xilinx/zynqmp_dma.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/dma/xilinx/zynqmp_dma.c b/drivers/dma/xilinx/zynqmp_dma.c
index c74a88b65039..acfc74b68717 100644
--- a/drivers/dma/xilinx/zynqmp_dma.c
+++ b/drivers/dma/xilinx/zynqmp_dma.c
@@ -1085,13 +1085,12 @@ static int zynqmp_dma_probe(struct platform_device *pdev)
p->dst_addr_widths = BIT(zdev->chan->bus_width / 8);
p->src_addr_widths = BIT(zdev->chan->bus_width / 8);

- dma_async_device_register(&zdev->common);
+ dmaenginem_async_device_register(&zdev->common);

ret = of_dma_controller_register(pdev->dev.of_node,
of_zynqmp_dma_xlate, zdev);
if (ret) {
dev_err(&pdev->dev, "Unable to register DMA to DT\n");
- dma_async_device_unregister(&zdev->common);
goto free_chan_resources;
}

@@ -1122,7 +1121,6 @@ static int zynqmp_dma_remove(struct platform_device *pdev)
struct zynqmp_dma_device *zdev = platform_get_drvdata(pdev);

of_dma_controller_free(pdev->dev.of_node);
- dma_async_device_unregister(&zdev->common);

zynqmp_dma_chan_remove(zdev->chan);
pm_runtime_disable(zdev->dev);
--
2.17.1


2018-08-03 07:29:36

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 01/46] dmaengine: zx_dma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register() to simplify the code.
Remove the code calling dma_async_device_unregister().

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/zx_dma.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/dma/zx_dma.c b/drivers/dma/zx_dma.c
index 2571bc7693df..7febd20113ef 100644
--- a/drivers/dma/zx_dma.c
+++ b/drivers/dma/zx_dma.c
@@ -861,20 +861,18 @@ static int zx_dma_probe(struct platform_device *op)
INIT_LIST_HEAD(&d->chan_pending);
platform_set_drvdata(op, d);

- ret = dma_async_device_register(&d->slave);
+ ret = dmaenginem_async_device_register(&d->slave);
if (ret)
goto clk_dis;

ret = of_dma_controller_register((&op->dev)->of_node,
zx_of_dma_simple_xlate, d);
if (ret)
- goto of_dma_register_fail;
+ goto clk_dis;

dev_info(&op->dev, "initialized\n");
return 0;

-of_dma_register_fail:
- dma_async_device_unregister(&d->slave);
clk_dis:
clk_disable_unprepare(d->clk);
zx_dma_out:
@@ -889,7 +887,6 @@ static int zx_dma_remove(struct platform_device *op)
/* explictly free the irq */
devm_free_irq(&op->dev, d->irq, d);

- dma_async_device_unregister(&d->slave);
of_dma_controller_free((&op->dev)->of_node);

list_for_each_entry_safe(c, cn, &d->slave.channels,
--
2.17.1


2018-08-03 07:40:20

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 05/46] dmaengine: txx9dmac: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/txx9dmac.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/dma/txx9dmac.c b/drivers/dma/txx9dmac.c
index eb45af71d3a3..1e97bee485d7 100644
--- a/drivers/dma/txx9dmac.c
+++ b/drivers/dma/txx9dmac.c
@@ -1147,7 +1147,7 @@ static int __init txx9dmac_chan_probe(struct platform_device *pdev)

platform_set_drvdata(pdev, dc);

- err = dma_async_device_register(&dc->dma);
+ err = dmaenginem_async_device_register(&dc->dma);
if (err)
return err;
dev_dbg(&pdev->dev, "TXx9 DMA Channel (dma%d%s%s)\n",
@@ -1162,8 +1162,6 @@ static int txx9dmac_chan_remove(struct platform_device *pdev)
{
struct txx9dmac_chan *dc = platform_get_drvdata(pdev);

-
- dma_async_device_unregister(&dc->dma);
if (dc->irq >= 0) {
devm_free_irq(&pdev->dev, dc->irq, dc);
tasklet_kill(&dc->tasklet);
--
2.17.1


2018-08-03 07:41:12

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 06/46] dmaengine: timb_dma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/timb_dma.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/dma/timb_dma.c b/drivers/dma/timb_dma.c
index 395c698edb4d..39e1ba2347db 100644
--- a/drivers/dma/timb_dma.c
+++ b/drivers/dma/timb_dma.c
@@ -723,7 +723,7 @@ static int td_probe(struct platform_device *pdev)
list_add_tail(&td_chan->chan.device_node, &td->dma.channels);
}

- err = dma_async_device_register(&td->dma);
+ err = dmaenginem_async_device_register(&td->dma);
if (err) {
dev_err(&pdev->dev, "Failed to register async device\n");
goto err_free_irq;
@@ -754,7 +754,6 @@ static int td_remove(struct platform_device *pdev)
struct resource *iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
int irq = platform_get_irq(pdev, 0);

- dma_async_device_unregister(&td->dma);
free_irq(irq, td);
tasklet_kill(&td->tasklet);
iounmap(td->membase);
--
2.17.1


2018-08-03 07:42:51

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 04/46] dmaengine: xgene-dma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove xgene_dma_async_register
remove dma_async_device_unregister

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/xgene-dma.c | 16 ++--------------
1 file changed, 2 insertions(+), 14 deletions(-)

diff --git a/drivers/dma/xgene-dma.c b/drivers/dma/xgene-dma.c
index 1d5988849aa6..192322bbdc29 100644
--- a/drivers/dma/xgene-dma.c
+++ b/drivers/dma/xgene-dma.c
@@ -1564,7 +1564,7 @@ static int xgene_dma_async_register(struct xgene_dma *pdma, int id)
list_add_tail(&chan->dma_chan.device_node, &dma_dev->channels);

/* Register with Linux async DMA framework*/
- ret = dma_async_device_register(dma_dev);
+ ret = dmaenginem_async_device_register(dma_dev);
if (ret) {
chan_err(chan, "Failed to register async device %d", ret);
tasklet_kill(&chan->tasklet);
@@ -1588,10 +1588,8 @@ static int xgene_dma_init_async(struct xgene_dma *pdma)
for (i = 0; i < XGENE_DMA_MAX_CHANNEL ; i++) {
ret = xgene_dma_async_register(pdma, i);
if (ret) {
- for (j = 0; j < i; j++) {
- dma_async_device_unregister(&pdma->dma_dev[j]);
+ for (j = 0; j < i; j++)
tasklet_kill(&pdma->chan[j].tasklet);
- }

return ret;
}
@@ -1600,14 +1598,6 @@ static int xgene_dma_init_async(struct xgene_dma *pdma)
return ret;
}

-static void xgene_dma_async_unregister(struct xgene_dma *pdma)
-{
- int i;
-
- for (i = 0; i < XGENE_DMA_MAX_CHANNEL; i++)
- dma_async_device_unregister(&pdma->dma_dev[i]);
-}
-
static void xgene_dma_init_channels(struct xgene_dma *pdma)
{
struct xgene_dma_chan *chan;
@@ -1796,8 +1786,6 @@ static int xgene_dma_remove(struct platform_device *pdev)
struct xgene_dma_chan *chan;
int i;

- xgene_dma_async_unregister(pdma);
-
/* Mask interrupts and disable DMA engine */
xgene_dma_mask_interrupts(pdma);
xgene_dma_disable(pdma);
--
2.17.1


2018-08-03 07:43:25

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 14/46] dmaengine: coh901318: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister
remove label err_register_of_dma,err_register_memcpy

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/coh901318.c | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)

diff --git a/drivers/dma/coh901318.c b/drivers/dma/coh901318.c
index da74fd74636b..ff29f2f6ce3b 100644
--- a/drivers/dma/coh901318.c
+++ b/drivers/dma/coh901318.c
@@ -2690,7 +2690,7 @@ static int __init coh901318_probe(struct platform_device *pdev)
base->dma_slave.device_terminate_all = coh901318_terminate_all;
base->dma_slave.dev = &pdev->dev;

- err = dma_async_device_register(&base->dma_slave);
+ err = dmaenginem_async_device_register(&base->dma_slave);

if (err)
goto err_register_slave;
@@ -2717,15 +2717,15 @@ static int __init coh901318_probe(struct platform_device *pdev)
* i.e. 2^2
*/
base->dma_memcpy.copy_align = DMAENGINE_ALIGN_4_BYTES;
- err = dma_async_device_register(&base->dma_memcpy);
+ err = dmaenginem_async_device_register(&base->dma_memcpy);

if (err)
- goto err_register_memcpy;
+ goto err_register_slave;

err = of_dma_controller_register(pdev->dev.of_node, coh901318_xlate,
base);
if (err)
- goto err_register_of_dma;
+ goto err_register_slave;

platform_set_drvdata(pdev, base);
dev_info(&pdev->dev, "Initialized COH901318 DMA on virtual base 0x%p\n",
@@ -2733,10 +2733,6 @@ static int __init coh901318_probe(struct platform_device *pdev)

return err;

- err_register_of_dma:
- dma_async_device_unregister(&base->dma_memcpy);
- err_register_memcpy:
- dma_async_device_unregister(&base->dma_slave);
err_register_slave:
coh901318_pool_destroy(&base->pool);
return err;
@@ -2767,8 +2763,6 @@ static int coh901318_remove(struct platform_device *pdev)
coh901318_base_remove(base, dma_memcpy_channels);

of_dma_controller_free(pdev->dev.of_node);
- dma_async_device_unregister(&base->dma_memcpy);
- dma_async_device_unregister(&base->dma_slave);
coh901318_pool_destroy(&base->pool);
return 0;
}
--
2.17.1


2018-08-03 07:45:25

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 22/46] dmaengine: sudmac: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.
remove label err_slave_reg

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/sh/sudmac.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/dma/sh/sudmac.c b/drivers/dma/sh/sudmac.c
index 69b9564dc9d9..f861067edef4 100644
--- a/drivers/dma/sh/sudmac.c
+++ b/drivers/dma/sh/sudmac.c
@@ -376,7 +376,7 @@ static int sudmac_probe(struct platform_device *pdev)
goto chan_probe_err;
}

- err = dma_async_device_register(&su_dev->shdma_dev.dma_dev);
+ err = dmaenginem_async_device_register(&su_dev->shdma_dev.dma_dev);
if (err < 0)
goto chan_probe_err;

@@ -393,9 +393,7 @@ static int sudmac_probe(struct platform_device *pdev)
static int sudmac_remove(struct platform_device *pdev)
{
struct sudmac_device *su_dev = platform_get_drvdata(pdev);
- struct dma_device *dma_dev = &su_dev->shdma_dev.dma_dev;

- dma_async_device_unregister(dma_dev);
sudmac_chan_remove(su_dev);
shdma_cleanup(&su_dev->shdma_dev);

--
2.17.1


2018-08-03 07:45:27

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 13/46] dmaengine: sun4i-dma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister
remove label err_dma_unregister

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/sun4i-dma.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/dma/sun4i-dma.c b/drivers/dma/sun4i-dma.c
index f4ed3f17607c..c80a59c1fc38 100644
--- a/drivers/dma/sun4i-dma.c
+++ b/drivers/dma/sun4i-dma.c
@@ -1228,7 +1228,7 @@ static int sun4i_dma_probe(struct platform_device *pdev)
goto err_clk_disable;
}

- ret = dma_async_device_register(&priv->slave);
+ ret = dmaenginem_async_device_register(&priv->slave);
if (ret) {
dev_warn(&pdev->dev, "Failed to register DMA engine device\n");
goto err_clk_disable;
@@ -1238,15 +1238,13 @@ static int sun4i_dma_probe(struct platform_device *pdev)
priv);
if (ret) {
dev_err(&pdev->dev, "of_dma_controller_register failed\n");
- goto err_dma_unregister;
+ goto err_clk_disable;
}

dev_dbg(&pdev->dev, "Successfully probed SUN4I_DMA\n");

return 0;

-err_dma_unregister:
- dma_async_device_unregister(&priv->slave);
err_clk_disable:
clk_disable_unprepare(priv->clk);
return ret;
@@ -1260,7 +1258,6 @@ static int sun4i_dma_remove(struct platform_device *pdev)
disable_irq(priv->irq);

of_dma_controller_free(pdev->dev.of_node);
- dma_async_device_unregister(&priv->slave);

clk_disable_unprepare(priv->clk);

--
2.17.1


2018-08-03 07:45:53

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 15/46] dmaengine: s3c24xx-dma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.
remove label err_slave_reg

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/s3c24xx-dma.c | 11 +++--------
1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/drivers/dma/s3c24xx-dma.c b/drivers/dma/s3c24xx-dma.c
index 64744eb88720..1d820c0cd14b 100644
--- a/drivers/dma/s3c24xx-dma.c
+++ b/drivers/dma/s3c24xx-dma.c
@@ -1330,7 +1330,7 @@ static int s3c24xx_dma_probe(struct platform_device *pdev)
goto err_slave;
}

- ret = dma_async_device_register(&s3cdma->memcpy);
+ ret = dmaenginem_async_device_register(&s3cdma->memcpy);
if (ret) {
dev_warn(&pdev->dev,
"%s failed to register memcpy as an async device - %d\n",
@@ -1338,12 +1338,12 @@ static int s3c24xx_dma_probe(struct platform_device *pdev)
goto err_memcpy_reg;
}

- ret = dma_async_device_register(&s3cdma->slave);
+ ret = dmaenginem_async_device_register(&s3cdma->slave);
if (ret) {
dev_warn(&pdev->dev,
"%s failed to register slave as an async device - %d\n",
__func__, ret);
- goto err_slave_reg;
+ goto err_memcpy_reg;
}

platform_set_drvdata(pdev, s3cdma);
@@ -1352,8 +1352,6 @@ static int s3c24xx_dma_probe(struct platform_device *pdev)

return 0;

-err_slave_reg:
- dma_async_device_unregister(&s3cdma->memcpy);
err_memcpy_reg:
s3c24xx_dma_free_virtual_channels(&s3cdma->slave);
err_slave:
@@ -1388,9 +1386,6 @@ static int s3c24xx_dma_remove(struct platform_device *pdev)
struct soc_data *sdata = s3c24xx_dma_get_soc_data(pdev);
int i;

- dma_async_device_unregister(&s3cdma->slave);
- dma_async_device_unregister(&s3cdma->memcpy);
-
s3c24xx_dma_free_irq(pdev, s3cdma);

s3c24xx_dma_free_virtual_channels(&s3cdma->slave);
--
2.17.1


2018-08-03 07:46:26

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 19/46] dmaengine: sprd-dma: use dmaenginem_async_device_register to simplify the code

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister.
remove label err_of_register

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/sprd-dma.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/dma/sprd-dma.c b/drivers/dma/sprd-dma.c
index 55df0d41355b..d06459d1f96f 100644
--- a/drivers/dma/sprd-dma.c
+++ b/drivers/dma/sprd-dma.c
@@ -943,7 +943,7 @@ static int sprd_dma_probe(struct platform_device *pdev)
if (ret < 0)
goto err_rpm;

- ret = dma_async_device_register(&sdev->dma_dev);
+ ret = dmaenginem_async_device_register(&sdev->dma_dev);
if (ret < 0) {
dev_err(&pdev->dev, "register dma device failed:%d\n", ret);
goto err_register;
@@ -953,13 +953,11 @@ static int sprd_dma_probe(struct platform_device *pdev)
ret = of_dma_controller_register(np, of_dma_simple_xlate,
&sprd_dma_info);
if (ret)
- goto err_of_register;
+ goto err_register;

pm_runtime_put(&pdev->dev);
return 0;

-err_of_register:
- dma_async_device_unregister(&sdev->dma_dev);
err_register:
pm_runtime_put_noidle(&pdev->dev);
pm_runtime_disable(&pdev->dev);
@@ -989,7 +987,6 @@ static int sprd_dma_remove(struct platform_device *pdev)
}

of_dma_controller_free(pdev->dev.of_node);
- dma_async_device_unregister(&sdev->dma_dev);
sprd_dma_disable(sdev);

pm_runtime_put_noidle(&pdev->dev);
--
2.17.1


2018-08-03 07:46:44

by Huang Shijie

[permalink] [raw]
Subject: [PATCH 11/46] dmaengine: tegra20-apb-dma: use helper dmaenginem_async_device_register

Use dmaenginem_async_device_register to simplify the code:
remove dma_async_device_unregister
remove the label err_unregister_dma_dev

Signed-off-by: Huang Shijie <[email protected]>
---
drivers/dma/tegra20-apb-dma.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/drivers/dma/tegra20-apb-dma.c b/drivers/dma/tegra20-apb-dma.c
index 9a558e30c461..9f6f51abbeef 100644
--- a/drivers/dma/tegra20-apb-dma.c
+++ b/drivers/dma/tegra20-apb-dma.c
@@ -1444,7 +1444,7 @@ static int tegra_dma_probe(struct platform_device *pdev)
tdma->dma_dev.device_tx_status = tegra_dma_tx_status;
tdma->dma_dev.device_issue_pending = tegra_dma_issue_pending;

- ret = dma_async_device_register(&tdma->dma_dev);
+ ret = dmaenginem_async_device_register(&tdma->dma_dev);
if (ret < 0) {
dev_err(&pdev->dev,
"Tegra20 APB DMA driver registration failed %d\n", ret);
@@ -1456,15 +1456,13 @@ static int tegra_dma_probe(struct platform_device *pdev)
if (ret < 0) {
dev_err(&pdev->dev,
"Tegra20 APB DMA OF registration failed %d\n", ret);
- goto err_unregister_dma_dev;
+ goto err_irq;
}

dev_info(&pdev->dev, "Tegra20 APB DMA driver register %d channels\n",
cdata->nr_channels);
return 0;

-err_unregister_dma_dev:
- dma_async_device_unregister(&tdma->dma_dev);
err_irq:
while (--i >= 0) {
struct tegra_dma_channel *tdc = &tdma->channels[i];
@@ -1485,8 +1483,6 @@ static int tegra_dma_remove(struct platform_device *pdev)
int i;
struct tegra_dma_channel *tdc;

- dma_async_device_unregister(&tdma->dma_dev);
-
for (i = 0; i < tdma->chip_data->nr_channels; ++i) {
tdc = &tdma->channels[i];
free_irq(tdc->irq, tdc);
--
2.17.1


2018-08-03 07:49:26

by Peter Ujfalusi

[permalink] [raw]
Subject: Re: [PATCH 07/46] dmaengine: omap-dma: use dmaenginem_async_device_register to simplify the code



On 2018-08-03 10:19, Huang Shijie wrote:
> Use dmaenginem_async_device_register to simplify the code:
> remove dma_async_device_unregister
>
> Signed-off-by: Huang Shijie <[email protected]>
> ---
> drivers/dma/ti/omap-dma.c | 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>
> diff --git a/drivers/dma/ti/omap-dma.c b/drivers/dma/ti/omap-dma.c
> index a4a931ddf6f6..085748c6eb67 100644
> --- a/drivers/dma/ti/omap-dma.c
> +++ b/drivers/dma/ti/omap-dma.c
> @@ -1566,7 +1566,7 @@ static int omap_dma_probe(struct platform_device *pdev)
> }
> }
>
> - rc = dma_async_device_register(&od->ddev);
> + rc = dmaenginem_async_device_register(&od->ddev);

Why it is dmaenginem_async_device_register() and not aligned other
resource managed functions (devm_* dmam_*), like
devm_dma_async_device_register()

and in dmaenginem_async_device_register() what is the 'm' in dmaenginem ?
DMAengine Managed?

> if (rc) {
> pr_warn("OMAP-DMA: failed to register slave DMA engine device: %d\n",
> rc);
> @@ -1584,7 +1584,6 @@ static int omap_dma_probe(struct platform_device *pdev)
> of_dma_simple_xlate, &omap_dma_info);
> if (rc) {
> pr_warn("OMAP-DMA: failed to register DMA controller\n");
> - dma_async_device_unregister(&od->ddev);
> omap_dma_free(od);
> }
> }
> @@ -1606,8 +1605,6 @@ static int omap_dma_remove(struct platform_device *pdev)
> irq = platform_get_irq(pdev, 1);
> devm_free_irq(&pdev->dev, irq, od);
>
> - dma_async_device_unregister(&od->ddev);
> -

I think this is a bad idea in general.
We need to unregister the dma-device before we clean up and free resources.

> if (!od->legacy) {
> /* Disable all interrupts */
> omap_dma_glbl_write(od, IRQENABLE_L0, 0);
>

I'm sorry to say, but it is a NACK from me.

- Péter

Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

2018-08-03 07:52:26

by Peter Ujfalusi

[permalink] [raw]
Subject: Re: [PATCH 08/46] dmaengine: edma: use dmaenginem_async_device_register to simplify the code



On 2018-08-03 10:19, Huang Shijie wrote:
> Use dmaenginem_async_device_register to simplify the code:
> remove dma_async_device_unregister
>
> Signed-off-by: Huang Shijie <[email protected]>
> ---
> drivers/dma/ti/edma.c | 8 ++------
> 1 file changed, 2 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/dma/ti/edma.c b/drivers/dma/ti/edma.c
> index ceabdea40ae0..28ba1e722c47 100644
> --- a/drivers/dma/ti/edma.c
> +++ b/drivers/dma/ti/edma.c
> @@ -2388,18 +2388,17 @@ static int edma_probe(struct platform_device *pdev)
> ecc->dma_slave.filter.mapcnt = info->slavecnt;
> ecc->dma_slave.filter.fn = edma_filter_fn;
>
> - ret = dma_async_device_register(&ecc->dma_slave);
> + ret = dmaenginem_async_device_register(&ecc->dma_slave);
> if (ret) {
> dev_err(dev, "slave ddev registration failed (%d)\n", ret);
> goto err_reg1;
> }
>
> if (ecc->dma_memcpy) {
> - ret = dma_async_device_register(ecc->dma_memcpy);
> + ret = dmaenginem_async_device_register(ecc->dma_memcpy);
> if (ret) {
> dev_err(dev, "memcpy ddev registration failed (%d)\n",
> ret);
> - dma_async_device_unregister(&ecc->dma_slave);
> goto err_reg1;
> }
> }
> @@ -2439,9 +2438,6 @@ static int edma_remove(struct platform_device *pdev)
>
> if (dev->of_node)
> of_dma_controller_free(dev->of_node);
> - dma_async_device_unregister(&ecc->dma_slave);
> - if (ecc->dma_memcpy)
> - dma_async_device_unregister(ecc->dma_memcpy);

I'm afraid this is not safe either, we need to free the dummy_slot
_after_ the dma device is unregistered.

> edma_free_slot(ecc, ecc->dummy_slot);
>
> return 0;
>

- Péter

Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

2018-08-03 07:53:28

by Lars-Peter Clausen

[permalink] [raw]
Subject: Re: [PATCH 00/46] Use dmaenginem_async_device_register to simplify code

On 08/03/2018 09:19 AM, Huang Shijie wrote:
> All the patches are using dmaenginem_async_device_register to simplify code
> except the last one:
> dmaengine: add COMPILE_TEST for the drivers
>
> I use the last one to do the compiler test.
> There are still 20 drivers which do not use the dmaenginem_async_device_register.
> Let me take a rest, if this patch set is accepted, I will do the rest.

Lots of race conditions in this series. The DMA device needs to be removed
before any of the resources it uses are disabled/released.

As a rule of thumb you can only convert something to a managed
allocation/reregistration if it is the last action in remove.

2018-08-03 07:54:43

by Huang Shijie

[permalink] [raw]
Subject: Re: [PATCH 07/46] dmaengine: omap-dma: use dmaenginem_async_device_register to simplify the code

On Fri, Aug 03, 2018 at 10:47:30AM +0300, Peter Ujfalusi wrote:
>
>
> On 2018-08-03 10:19, Huang Shijie wrote:
> > Use dmaenginem_async_device_register to simplify the code:
> > remove dma_async_device_unregister
> >
> > Signed-off-by: Huang Shijie <[email protected]>
> > ---
> > drivers/dma/ti/omap-dma.c | 5 +----
> > 1 file changed, 1 insertion(+), 4 deletions(-)
> >
> > diff --git a/drivers/dma/ti/omap-dma.c b/drivers/dma/ti/omap-dma.c
> > index a4a931ddf6f6..085748c6eb67 100644
> > --- a/drivers/dma/ti/omap-dma.c
> > +++ b/drivers/dma/ti/omap-dma.c
> > @@ -1566,7 +1566,7 @@ static int omap_dma_probe(struct platform_device *pdev)
> > }
> > }
> >
> > - rc = dma_async_device_register(&od->ddev);
> > + rc = dmaenginem_async_device_register(&od->ddev);
>
> Why it is dmaenginem_async_device_register() and not aligned other
> resource managed functions (devm_* dmam_*), like
> devm_dma_async_device_register()
Vinod prefer the this dmaenginem_async_device_register..
>
> and in dmaenginem_async_device_register() what is the 'm' in dmaenginem ?
> DMAengine Managed?
Yes.
>
> > if (rc) {
> > pr_warn("OMAP-DMA: failed to register slave DMA engine device: %d\n",
> > rc);
> > @@ -1584,7 +1584,6 @@ static int omap_dma_probe(struct platform_device *pdev)
> > of_dma_simple_xlate, &omap_dma_info);
> > if (rc) {
> > pr_warn("OMAP-DMA: failed to register DMA controller\n");
> > - dma_async_device_unregister(&od->ddev);
> > omap_dma_free(od);
> > }
> > }
> > @@ -1606,8 +1605,6 @@ static int omap_dma_remove(struct platform_device *pdev)
> > irq = platform_get_irq(pdev, 1);
> > devm_free_irq(&pdev->dev, irq, od);
> >
> > - dma_async_device_unregister(&od->ddev);
> > -
>
> I think this is a bad idea in general.
> We need to unregister the dma-device before we clean up and free resources.
okay, thanks for pointing here.
We can drop this patch now...

>
> > if (!od->legacy) {
> > /* Disable all interrupts */
> > omap_dma_glbl_write(od, IRQENABLE_L0, 0);
> >
>
> I'm sorry to say, but it is a NACK from me.
No problem.

Thanks
Huang Shijie

2018-08-03 07:56:29

by Huang Shijie

[permalink] [raw]
Subject: Re: [PATCH 08/46] dmaengine: edma: use dmaenginem_async_device_register to simplify the code

On Fri, Aug 03, 2018 at 10:50:13AM +0300, Peter Ujfalusi wrote:
>
>
> On 2018-08-03 10:19, Huang Shijie wrote:
> > Use dmaenginem_async_device_register to simplify the code:
> > remove dma_async_device_unregister
> >
> > Signed-off-by: Huang Shijie <[email protected]>
> > ---
> > drivers/dma/ti/edma.c | 8 ++------
> > 1 file changed, 2 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/dma/ti/edma.c b/drivers/dma/ti/edma.c
> > index ceabdea40ae0..28ba1e722c47 100644
> > --- a/drivers/dma/ti/edma.c
> > +++ b/drivers/dma/ti/edma.c
> > @@ -2388,18 +2388,17 @@ static int edma_probe(struct platform_device *pdev)
> > ecc->dma_slave.filter.mapcnt = info->slavecnt;
> > ecc->dma_slave.filter.fn = edma_filter_fn;
> >
> > - ret = dma_async_device_register(&ecc->dma_slave);
> > + ret = dmaenginem_async_device_register(&ecc->dma_slave);
> > if (ret) {
> > dev_err(dev, "slave ddev registration failed (%d)\n", ret);
> > goto err_reg1;
> > }
> >
> > if (ecc->dma_memcpy) {
> > - ret = dma_async_device_register(ecc->dma_memcpy);
> > + ret = dmaenginem_async_device_register(ecc->dma_memcpy);
> > if (ret) {
> > dev_err(dev, "memcpy ddev registration failed (%d)\n",
> > ret);
> > - dma_async_device_unregister(&ecc->dma_slave);
> > goto err_reg1;
> > }
> > }
> > @@ -2439,9 +2438,6 @@ static int edma_remove(struct platform_device *pdev)
> >
> > if (dev->of_node)
> > of_dma_controller_free(dev->of_node);
> > - dma_async_device_unregister(&ecc->dma_slave);
> > - if (ecc->dma_memcpy)
> > - dma_async_device_unregister(ecc->dma_memcpy);
>
> I'm afraid this is not safe either, we need to free the dummy_slot
> _after_ the dma device is unregistered.
>
Thanks for pointing this.

I will drop this patch ...

Thanks
Huang Shijie

2018-08-03 07:57:31

by Peter Ujfalusi

[permalink] [raw]
Subject: Re: [PATCH 09/46] dmaengine: cppi41: use dmaenginem_async_device_register to simplify the code



On 2018-08-03 10:19, Huang Shijie wrote:
> Use dmaenginem_async_device_register to simplify the code:
> remove dma_async_device_unregister
>
> Signed-off-by: Huang Shijie <[email protected]>
> ---
> drivers/dma/ti/cppi41.c | 7 ++-----
> 1 file changed, 2 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/dma/ti/cppi41.c b/drivers/dma/ti/cppi41.c
> index 1497da367710..d2998a19ed2e 100644
> --- a/drivers/dma/ti/cppi41.c
> +++ b/drivers/dma/ti/cppi41.c
> @@ -1096,21 +1096,19 @@ static int cppi41_dma_probe(struct platform_device *pdev)
> goto err_chans;
> cdd->irq = irq;
>
> - ret = dma_async_device_register(&cdd->ddev);
> + ret = dmaenginem_async_device_register(&cdd->ddev);
> if (ret)
> goto err_chans;
>
> ret = of_dma_controller_register(dev->of_node,
> cppi41_dma_xlate, &cpp41_dma_info);
> if (ret)
> - goto err_of;
> + goto err_chans;
>
> pm_runtime_mark_last_busy(dev);
> pm_runtime_put_autosuspend(dev);
>
> return 0;
> -err_of:
> - dma_async_device_unregister(&cdd->ddev);
> err_chans:
> deinit_cppi41(dev, cdd);
> err_init_cppi:
> @@ -1132,7 +1130,6 @@ static int cppi41_dma_remove(struct platform_device *pdev)
> dev_err(&pdev->dev, "%s could not pm_runtime_get: %i\n",
> __func__, error);
> of_dma_controller_free(pdev->dev.of_node);
> - dma_async_device_unregister(&cdd->ddev);

If I read the code right then this is not safe.
We would have deinitalized cppi41 driver which is not functional, but we
will still have the dma device registered and if a channel is requested
we will have kernel crash.

It falls in the same case as omap-dma, edma.

>
> devm_free_irq(&pdev->dev, cdd->irq, cdd);
> deinit_cppi41(&pdev->dev, cdd);
>

- Péter

Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

2018-08-03 08:00:30

by Huang Shijie

[permalink] [raw]
Subject: Re: [PATCH 00/46] Use dmaenginem_async_device_register to simplify code

On Fri, Aug 03, 2018 at 09:51:43AM +0200, Lars-Peter Clausen wrote:
> On 08/03/2018 09:19 AM, Huang Shijie wrote:
> > All the patches are using dmaenginem_async_device_register to simplify code
> > except the last one:
> > dmaengine: add COMPILE_TEST for the drivers
> >
> > I use the last one to do the compiler test.
> > There are still 20 drivers which do not use the dmaenginem_async_device_register.
> > Let me take a rest, if this patch set is accepted, I will do the rest.
>
> Lots of race conditions in this series. The DMA device needs to be removed
> before any of the resources it uses are disabled/released.
>
> As a rule of thumb you can only convert something to a managed
> allocation/reregistration if it is the last action in remove.
Yes. Agree.

I am collecting the DMA maintainers opinions now..
If the managed unregistration is not the last action, we can drop the patch.

Thanks
Huang Shijie


2018-08-03 08:03:20

by Huang Shijie

[permalink] [raw]
Subject: Re: [PATCH 09/46] dmaengine: cppi41: use dmaenginem_async_device_register to simplify the code



在 2018年08月03日 15:55, Peter Ujfalusi 写道:
>
> On 2018-08-03 10:19, Huang Shijie wrote:
>> Use dmaenginem_async_device_register to simplify the code:
>> remove dma_async_device_unregister
>>
>> Signed-off-by: Huang Shijie <[email protected]>
>> ---
>> drivers/dma/ti/cppi41.c | 7 ++-----
>> 1 file changed, 2 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/dma/ti/cppi41.c b/drivers/dma/ti/cppi41.c
>> index 1497da367710..d2998a19ed2e 100644
>> --- a/drivers/dma/ti/cppi41.c
>> +++ b/drivers/dma/ti/cppi41.c
>> @@ -1096,21 +1096,19 @@ static int cppi41_dma_probe(struct platform_device *pdev)
>> goto err_chans;
>> cdd->irq = irq;
>>
>> - ret = dma_async_device_register(&cdd->ddev);
>> + ret = dmaenginem_async_device_register(&cdd->ddev);
>> if (ret)
>> goto err_chans;
>>
>> ret = of_dma_controller_register(dev->of_node,
>> cppi41_dma_xlate, &cpp41_dma_info);
>> if (ret)
>> - goto err_of;
>> + goto err_chans;
>>
>> pm_runtime_mark_last_busy(dev);
>> pm_runtime_put_autosuspend(dev);
>>
>> return 0;
>> -err_of:
>> - dma_async_device_unregister(&cdd->ddev);
>> err_chans:
>> deinit_cppi41(dev, cdd);
>> err_init_cppi:
>> @@ -1132,7 +1130,6 @@ static int cppi41_dma_remove(struct platform_device *pdev)
>> dev_err(&pdev->dev, "%s could not pm_runtime_get: %i\n",
>> __func__, error);
>> of_dma_controller_free(pdev->dev.of_node);
>> - dma_async_device_unregister(&cdd->ddev);
> If I read the code right then this is not safe.
> We would have deinitalized cppi41 driver which is not functional, but we
> will still have the dma device registered and if a channel is requested
> we will have kernel crash.
>
> It falls in the same case as omap-dma, edma.
Thanks for pointing this, we can drop the patches for omap-dma, edma.

Huang Shijie


2018-08-03 08:12:25

by Pierre-Yves MORDRET

[permalink] [raw]
Subject: Re: [PATCH 17/46] dmaengine: stm32-mdma: use dmaenginem_async_device_register to simplify the code

Acked-by: Pierre-Yves MORDRET <[email protected]>

On 08/03/2018 09:19 AM, Huang Shijie wrote:
> Use dmaenginem_async_device_register to simplify the code:
> remove dma_async_device_unregister.
>
> Signed-off-by: Huang Shijie <[email protected]>
> ---
> drivers/dma/stm32-mdma.c | 4 +---
> 1 file changed, 1 insertion(+), 3 deletions(-)
>
> diff --git a/drivers/dma/stm32-mdma.c b/drivers/dma/stm32-mdma.c
> index 06dd1725375e..390e4cae0e1a 100644
> --- a/drivers/dma/stm32-mdma.c
> +++ b/drivers/dma/stm32-mdma.c
> @@ -1656,7 +1656,7 @@ static int stm32_mdma_probe(struct platform_device *pdev)
> return ret;
> }
>
> - ret = dma_async_device_register(dd);
> + ret = dmaenginem_async_device_register(dd);
> if (ret)
> return ret;
>
> @@ -1674,8 +1674,6 @@ static int stm32_mdma_probe(struct platform_device *pdev)
> return 0;
>
> err_unregister:
> - dma_async_device_unregister(dd);
> -
> return ret;
> }
>
>

2018-08-03 08:22:16

by Peter Ujfalusi

[permalink] [raw]
Subject: Re: [PATCH 00/46] Use dmaenginem_async_device_register to simplify code

Hi,

On 2018-08-03 10:19, Huang Shijie wrote:
> All the patches are using dmaenginem_async_device_register to simplify code
> except the last one:
> dmaengine: add COMPILE_TEST for the drivers
>
> I use the last one to do the compiler test.
> There are still 20 drivers which do not use the dmaenginem_async_device_register.
> Let me take a rest, if this patch set is accepted, I will do the rest.

I think for most of the drivers this series is going to open a race
which is essentially:

prior:
_remove()
{
...
dma_async_device_register()
/* Free resources, disable HW, etc */
return 0;
}

after:
_remove()
{
...
/* Free resources, disable HW, etc */
/*
* The dma device is still registered and a channel can be
* requested
*/

dma_async_device_register()
return 0;
}

It might be theoretical, but conversion to managed device resources is
not straight forward in some cases.

- Péter

>
> Huang Shijie (46):
> dmaengine: zx_dma: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: zynqmp_dma: use dmaenginem_async_device_register to
> simplify the code
> dmaengine: xilinx_dma: use dmaenginem_async_device_register to
> simplify the code
> dmaengine: xgene-dma: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: txx9dmac: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: timb_dma: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: omap-dma: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: edma: use dmaenginem_async_device_register to simplify the
> code
> dmaengine: cppi41: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: tegra210-adma: use helper dmaenginem_async_device_register
> dmaengine: tegra20-apb-dma: use helper
> dmaenginem_async_device_register
> dmaengine: sun6i-dma: use helper dmaenginem_async_device_register
> dmaengine: sun4i-dma: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: coh901318: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: s3c24xx-dma: use dmaenginem_async_device_register to
> simplify the code
> dmaengine: ste_dma40: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: stm32-mdma: use dmaenginem_async_device_register to
> simplify the code
> dmaengine: stm32-dma: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: sprd-dma: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: sirf-dma: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: bam_dma: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: sudmac: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: sa11x0-dma: use dmaenginem_async_device_register to
> simplify the code
> dmaengine: nbpfaxi: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: mmp_tdma: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: shdmac: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: usb-dmac: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: rcar-dmac: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: hidma: use dmaenginem_async_device_register to simplify the
> code
> dmaengine: pxa_dma: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: moxart-dma: use dmaenginem_async_device_register to
> simplify the code
> dmaengine: pl330: use dmaenginem_async_device_register to simplify the
> code
> dmaengine: pch_dma: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: mxs-dma: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: mtk-hsdma: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: k3dma: use dmaenginem_async_device_register to simplify the
> code
> dmaengine: imx-sdma: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: imx-dma: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: img-mdc-dma: use dmaenginem_async_device_register to
> simplify the code
> dmaengine: fsl-edma: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: at_hdmac: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: at_xdmac: use dmaenginem_async_device_register to simplify
> the code
> dmaengine: dma-jz4780: use dmaenginem_async_device_register to
> simplify the code
> dmaengine: dma-jz4740: use dmaenginem_async_device_register to
> simplify the code
> dmaengine: dma-axi-dmac: use dmaenginem_async_device_register to
> simplify the code
> dmaengine: add COMPILE_TEST for the drivers
>
> drivers/dma/Kconfig | 24 ++++++++++++------------
> drivers/dma/at_hdmac.c | 4 +---
> drivers/dma/at_xdmac.c | 7 ++-----
> drivers/dma/coh901318.c | 14 ++++----------
> drivers/dma/dma-axi-dmac.c | 7 ++-----
> drivers/dma/dma-jz4740.c | 7 ++-----
> drivers/dma/dma-jz4780.c | 8 ++------
> drivers/dma/fsl-edma.c | 4 +---
> drivers/dma/img-mdc-dma.c | 7 ++-----
> drivers/dma/imx-dma.c | 8 ++------
> drivers/dma/imx-sdma.c | 7 ++-----
> drivers/dma/k3dma.c | 7 ++-----
> drivers/dma/mediatek/mtk-hsdma.c | 4 +---
> drivers/dma/mmp_tdma.c | 7 ++-----
> drivers/dma/moxart-dma.c | 5 +----
> drivers/dma/mxs-dma.c | 3 +--
> drivers/dma/nbpfaxi.c | 7 ++-----
> drivers/dma/pch_dma.c | 4 +---
> drivers/dma/pl330.c | 4 +---
> drivers/dma/pxa_dma.c | 3 +--
> drivers/dma/qcom/bam_dma.c | 7 ++-----
> drivers/dma/qcom/hidma.c | 3 +--
> drivers/dma/s3c24xx-dma.c | 11 +++--------
> drivers/dma/sa11x0-dma.c | 4 +---
> drivers/dma/sh/rcar-dmac.c | 5 +----
> drivers/dma/sh/shdmac.c | 5 +----
> drivers/dma/sh/sudmac.c | 4 +---
> drivers/dma/sh/usb-dmac.c | 3 +--
> drivers/dma/sirf-dma.c | 7 ++-----
> drivers/dma/sprd-dma.c | 7 ++-----
> drivers/dma/ste_dma40.c | 14 +++++---------
> drivers/dma/stm32-dma.c | 3 +--
> drivers/dma/stm32-mdma.c | 4 +---
> drivers/dma/sun4i-dma.c | 7 ++-----
> drivers/dma/sun6i-dma.c | 7 ++-----
> drivers/dma/tegra20-apb-dma.c | 8 ++------
> drivers/dma/tegra210-adma.c | 8 ++------
> drivers/dma/ti/Kconfig | 2 +-
> drivers/dma/ti/cppi41.c | 7 ++-----
> drivers/dma/ti/edma.c | 8 ++------
> drivers/dma/ti/omap-dma.c | 5 +----
> drivers/dma/timb_dma.c | 3 +--
> drivers/dma/txx9dmac.c | 4 +---
> drivers/dma/xgene-dma.c | 16 ++--------------
> drivers/dma/xilinx/xilinx_dma.c | 5 +----
> drivers/dma/xilinx/zynqmp_dma.c | 4 +---
> drivers/dma/zx_dma.c | 7 ++-----
> 47 files changed, 88 insertions(+), 221 deletions(-)
>

Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

2018-08-05 01:04:57

by Huang Shijie

[permalink] [raw]
Subject: Re: [PATCH 00/46] Use dmaenginem_async_device_register to simplify code

On Fri, Aug 03, 2018 at 11:20:49AM +0300, Peter Ujfalusi wrote:
> Hi,
>
> On 2018-08-03 10:19, Huang Shijie wrote:
> > All the patches are using dmaenginem_async_device_register to simplify code
> > except the last one:
> > dmaengine: add COMPILE_TEST for the drivers
> >
> > I use the last one to do the compiler test.
> > There are still 20 drivers which do not use the dmaenginem_async_device_register.
> > Let me take a rest, if this patch set is accepted, I will do the rest.
>
> I think for most of the drivers this series is going to open a race
> which is essentially:
>
> prior:
> _remove()
> {
> ...
> dma_async_device_register()
> /* Free resources, disable HW, etc */

If these resources are managed by the devm_* APIs.
We can use the dmaenginem_async_device_register().

The Devres will release all the things in the following order:
................................................
dma_async_device_unregister()
/* Free resources, disable HW, etc */
................................................


Thanks
Huang Shijie

2018-08-06 03:30:10

by Huang Shijie

[permalink] [raw]
Subject: Re: [PATCH 09/46] dmaengine: cppi41: use dmaenginem_async_device_register to simplify the code

On Fri, Aug 03, 2018 at 10:55:25AM +0300, Peter Ujfalusi wrote:
>
>
> On 2018-08-03 10:19, Huang Shijie wrote:
> > Use dmaenginem_async_device_register to simplify the code:
> > remove dma_async_device_unregister
> >
> > Signed-off-by: Huang Shijie <[email protected]>
> > ---
> > drivers/dma/ti/cppi41.c | 7 ++-----
> > 1 file changed, 2 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/dma/ti/cppi41.c b/drivers/dma/ti/cppi41.c
> > index 1497da367710..d2998a19ed2e 100644
> > --- a/drivers/dma/ti/cppi41.c
> > +++ b/drivers/dma/ti/cppi41.c
> > @@ -1096,21 +1096,19 @@ static int cppi41_dma_probe(struct platform_device *pdev)
> > goto err_chans;
> > cdd->irq = irq;
> >
> > - ret = dma_async_device_register(&cdd->ddev);
> > + ret = dmaenginem_async_device_register(&cdd->ddev);
> > if (ret)
> > goto err_chans;
> >
> > ret = of_dma_controller_register(dev->of_node,
> > cppi41_dma_xlate, &cpp41_dma_info);
> > if (ret)
> > - goto err_of;
> > + goto err_chans;
> >
> > pm_runtime_mark_last_busy(dev);
> > pm_runtime_put_autosuspend(dev);
> >
> > return 0;
> > -err_of:
> > - dma_async_device_unregister(&cdd->ddev);
> > err_chans:
> > deinit_cppi41(dev, cdd);
> > err_init_cppi:
> > @@ -1132,7 +1130,6 @@ static int cppi41_dma_remove(struct platform_device *pdev)
> > dev_err(&pdev->dev, "%s could not pm_runtime_get: %i\n",
> > __func__, error);
> > of_dma_controller_free(pdev->dev.of_node);
> > - dma_async_device_unregister(&cdd->ddev);
>
> If I read the code right then this is not safe.
I read the code again, and find it is okay.

> We would have deinitalized cppi41 driver which is not functional, but we
> will still have the dma device registered and if a channel is requested
> we will have kernel crash.
We cannot succeed to request a channel when the drv->remove() is called.

Please see __device_release_driver:
---------------------------------------------------------------------
if (dev->bus && dev->bus->remove)
dev->bus->remove(dev);
else if (drv->remove)
drv->remove(dev);

device_links_driver_cleanup(dev);
dma_deconfigure(dev);

devres_release_all(dev); ============> Devres release
---------------------------------------------------------------------

For the DMA engine driver, there is only one case which will calls drv->remove():
Use the rmmod(or modprobe -r).

We do not use the device_link_add API for DMA engines.
And we not manually call the device_release_driver() for DMA engines.

But when we use the rmmod, the module state will be MODULE_STATE_GOING.
In the find_candidate(), dma_chan_get() will fail.
And we cannot get a channel.

Please correct me if I am wrong :)

Thanks
Huang Shijie

2018-08-07 07:03:29

by Peter Ujfalusi

[permalink] [raw]
Subject: Re: [PATCH 09/46] dmaengine: cppi41: use dmaenginem_async_device_register to simplify the code

Hi,

On 2018-08-06 06:28, Huang Shijie wrote:
> On Fri, Aug 03, 2018 at 10:55:25AM +0300, Peter Ujfalusi wrote:
>>
>>
>> On 2018-08-03 10:19, Huang Shijie wrote:
>>> Use dmaenginem_async_device_register to simplify the code:
>>> remove dma_async_device_unregister
>>>
>>> Signed-off-by: Huang Shijie <[email protected]>
>>> ---
>>> drivers/dma/ti/cppi41.c | 7 ++-----
>>> 1 file changed, 2 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/drivers/dma/ti/cppi41.c b/drivers/dma/ti/cppi41.c
>>> index 1497da367710..d2998a19ed2e 100644
>>> --- a/drivers/dma/ti/cppi41.c
>>> +++ b/drivers/dma/ti/cppi41.c
>>> @@ -1096,21 +1096,19 @@ static int cppi41_dma_probe(struct platform_device *pdev)
>>> goto err_chans;
>>> cdd->irq = irq;
>>>
>>> - ret = dma_async_device_register(&cdd->ddev);
>>> + ret = dmaenginem_async_device_register(&cdd->ddev);
>>> if (ret)
>>> goto err_chans;
>>>
>>> ret = of_dma_controller_register(dev->of_node,
>>> cppi41_dma_xlate, &cpp41_dma_info);
>>> if (ret)
>>> - goto err_of;
>>> + goto err_chans;
>>>
>>> pm_runtime_mark_last_busy(dev);
>>> pm_runtime_put_autosuspend(dev);
>>>
>>> return 0;
>>> -err_of:
>>> - dma_async_device_unregister(&cdd->ddev);
>>> err_chans:
>>> deinit_cppi41(dev, cdd);
>>> err_init_cppi:
>>> @@ -1132,7 +1130,6 @@ static int cppi41_dma_remove(struct platform_device *pdev)
>>> dev_err(&pdev->dev, "%s could not pm_runtime_get: %i\n",
>>> __func__, error);
>>> of_dma_controller_free(pdev->dev.of_node);
>>> - dma_async_device_unregister(&cdd->ddev);
>>
>> If I read the code right then this is not safe.
> I read the code again, and find it is okay.
>
>> We would have deinitalized cppi41 driver which is not functional, but we
>> will still have the dma device registered and if a channel is requested
>> we will have kernel crash.
> We cannot succeed to request a channel when the drv->remove() is called.
>
> Please see __device_release_driver:
> ---------------------------------------------------------------------
> if (dev->bus && dev->bus->remove)
> dev->bus->remove(dev);
> else if (drv->remove)
> drv->remove(dev);
>
> device_links_driver_cleanup(dev);
> dma_deconfigure(dev);
>
> devres_release_all(dev); ============> Devres release
> ---------------------------------------------------------------------
>
> For the DMA engine driver, there is only one case which will calls drv->remove():
> Use the rmmod(or modprobe -r).
>
> We do not use the device_link_add API for DMA engines.
> And we not manually call the device_release_driver() for DMA engines.
>
> But when we use the rmmod, the module state will be MODULE_STATE_GOING.
> In the find_candidate(), dma_chan_get() will fail.
> And we cannot get a channel.
>
> Please correct me if I am wrong :)

You are perfectly right.

It might be only me, but I like to keep the resource teardown in a
reverse order of their creation. If everything is devm then it is granted.

In case of cppi4 it looks safe after reading in to the DMAengine core,
module core and platform core code.

But does the removed three lines worth over the clarity of how the
module removal is proceeding?

Alexandre and Tony put lots of effort to the cppi4 driver, I let them
decide.

- Péter

Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

2018-08-07 07:17:54

by Huang Shijie

[permalink] [raw]
Subject: Re: [PATCH 09/46] dmaengine: cppi41: use dmaenginem_async_device_register to simplify the code

On Tue, Aug 07, 2018 at 10:01:47AM +0300, Peter Ujfalusi wrote:
> Hi,
>
> On 2018-08-06 06:28, Huang Shijie wrote:
> It might be only me, but I like to keep the resource teardown in a
> reverse order of their creation. If everything is devm then it is granted.
Yes.

If everything is devm then it is granted..

>
> In case of cppi4 it looks safe after reading in to the DMAengine core,
> module core and platform core code.
>
> But does the removed three lines worth over the clarity of how the
> module removal is proceeding?
Please keep the driver as it is if you like the traditional way. :)

The DMA driver's maintainer has the right to decide whether
to use the dmaenginem_async_device_register or not.

Thanks
Huang Shijie

2018-08-08 07:18:07

by Tony Lindgren

[permalink] [raw]
Subject: Re: [PATCH 09/46] dmaengine: cppi41: use dmaenginem_async_device_register to simplify the code

* Peter Ujfalusi <[email protected]> [180807 07:05]:
> But does the removed three lines worth over the clarity of how the
> module removal is proceeding?
>
> Alexandre and Tony put lots of effort to the cppi4 driver, I let them
> decide.

Up to you guys as far as I'm concerned.

Tony

2018-08-09 02:39:01

by Vinod Koul

[permalink] [raw]
Subject: Re: [PATCH 07/46] dmaengine: omap-dma: use dmaenginem_async_device_register to simplify the code

On 03-08-18, 10:47, Peter Ujfalusi wrote:
>
>
> On 2018-08-03 10:19, Huang Shijie wrote:
> > Use dmaenginem_async_device_register to simplify the code:
> > remove dma_async_device_unregister
> >
> > Signed-off-by: Huang Shijie <[email protected]>
> > ---
> > drivers/dma/ti/omap-dma.c | 5 +----
> > 1 file changed, 1 insertion(+), 4 deletions(-)
> >
> > diff --git a/drivers/dma/ti/omap-dma.c b/drivers/dma/ti/omap-dma.c
> > index a4a931ddf6f6..085748c6eb67 100644
> > --- a/drivers/dma/ti/omap-dma.c
> > +++ b/drivers/dma/ti/omap-dma.c
> > @@ -1566,7 +1566,7 @@ static int omap_dma_probe(struct platform_device *pdev)
> > }
> > }
> >
> > - rc = dma_async_device_register(&od->ddev);
> > + rc = dmaenginem_async_device_register(&od->ddev);
>
> Why it is dmaenginem_async_device_register() and not aligned other
> resource managed functions (devm_* dmam_*), like
> devm_dma_async_device_register()
>
> and in dmaenginem_async_device_register() what is the 'm' in dmaenginem ?
> DMAengine Managed?

yup, as you rightly said we could have done devm_dmaengine... or like
few others do dmaenginem_

Yes it makes a little odd API but am trying to move away from dma_ to
dmaengine_ for everything new..

--
~Vinod