diff options
author | Vinod Koul <vkoul@kernel.org> | 2024-01-19 17:03:06 +0530 |
---|---|---|
committer | Vinod Koul <vkoul@kernel.org> | 2024-01-19 17:03:06 +0530 |
commit | b93216d3be55924c43e097c1fbb21bbe1a5a5d5c (patch) | |
tree | b4390bef4955d15cd5d20901a13f5d89238f870e /drivers/dma/uniphier-xdmac.c | |
parent | 4ee632c82d2dbb9e2dcc816890ef182a151cbd99 (diff) | |
parent | 3d0b2176e04261ab4ac095ff2a17db077fc1e46d (diff) |
Merge tag 'dmaengine-6.8-rc1' into fixes
dmaengine updates for v6.8
New support:
- Loongson LS2X APB DMA controller
- sf-pdma: mpfs-pdma support
- Qualcomm X1E80100 GPI dma controller support
Updates:
- Xilinx XDMA updates to support interleaved DMA transfers
- TI PSIL threads for AM62P and J722S and cfg register regions description
- axi-dmac Improving the cyclic DMA transfers
- Tegra Support dma-channel-mask property
- Remaining platform remove callback returning void conversions
Diffstat (limited to 'drivers/dma/uniphier-xdmac.c')
-rw-r--r-- | drivers/dma/uniphier-xdmac.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/dma/uniphier-xdmac.c b/drivers/dma/uniphier-xdmac.c index 3a8ee2b173b5..3ce2dc2ad9de 100644 --- a/drivers/dma/uniphier-xdmac.c +++ b/drivers/dma/uniphier-xdmac.c @@ -563,7 +563,7 @@ out_unregister_dmac: return ret; } -static int uniphier_xdmac_remove(struct platform_device *pdev) +static void uniphier_xdmac_remove(struct platform_device *pdev) { struct uniphier_xdmac_device *xdev = platform_get_drvdata(pdev); struct dma_device *ddev = &xdev->ddev; @@ -579,15 +579,20 @@ static int uniphier_xdmac_remove(struct platform_device *pdev) */ list_for_each_entry(chan, &ddev->channels, device_node) { ret = dmaengine_terminate_sync(chan); - if (ret) - return ret; + if (ret) { + /* + * This results in resource leakage and maybe also + * use-after-free errors as e.g. *xdev is kfreed. + */ + dev_alert(&pdev->dev, "Failed to terminate channel %d (%pe)\n", + chan->chan_id, ERR_PTR(ret)); + return; + } uniphier_xdmac_free_chan_resources(chan); } of_dma_controller_free(pdev->dev.of_node); dma_async_device_unregister(ddev); - - return 0; } static const struct of_device_id uniphier_xdmac_match[] = { @@ -598,7 +603,7 @@ MODULE_DEVICE_TABLE(of, uniphier_xdmac_match); static struct platform_driver uniphier_xdmac_driver = { .probe = uniphier_xdmac_probe, - .remove = uniphier_xdmac_remove, + .remove_new = uniphier_xdmac_remove, .driver = { .name = "uniphier-xdmac", .of_match_table = uniphier_xdmac_match, |