[PATCH v2 3/4] DMA: PL330: Balance module remove function with probe
From: Inderpal Singh
Date: Fri Oct 05 2012 - 06:18:10 EST
Since peripheral channel resources are not being allocated at probe,
no need to flush the channels and free the resources in remove function.
In case, the channel is in use by some client, return EBUSY.
Signed-off-by: Inderpal Singh <inderpal.singh@xxxxxxxxxx>
---
drivers/dma/pl330.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
index bf71ff7..4b7a34d 100644
--- a/drivers/dma/pl330.c
+++ b/drivers/dma/pl330.c
@@ -3009,18 +3009,21 @@ static int __devexit pl330_remove(struct amba_device *adev)
if (!pdmac)
return 0;
+ /* check if any client is using any channel */
+ list_for_each_entry(pch, &pdmac->ddma.channels,
+ chan.device_node) {
+
+ if (pch->chan.client_count)
+ return -EBUSY;
+ }
+
amba_set_drvdata(adev, NULL);
- /* Idle the DMAC */
list_for_each_entry_safe(pch, _p, &pdmac->ddma.channels,
chan.device_node) {
/* Remove the channel */
list_del(&pch->chan.device_node);
-
- /* Flush the channel */
- pl330_control(&pch->chan, DMA_TERMINATE_ALL, 0);
- pl330_free_chan_resources(&pch->chan);
}
while (!list_empty(&pdmac->desc_pool)) {
--
1.7.9.5
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/