hc
2024-05-10 37f49e37ab4cb5d0bc4c60eb5c6d4dd57db767bb
kernel/drivers/crypto/ccp/ccp-dmaengine.c
....@@ -643,11 +643,23 @@
643643 chan = ccp->ccp_dma_chan + i;
644644 dma_chan = &chan->dma_chan;
645645
646
- if (dma_chan->client_count)
647
- dma_release_channel(dma_chan);
648
-
649646 tasklet_kill(&chan->cleanup_tasklet);
650647 list_del_rcu(&dma_chan->device_node);
648
+ }
649
+}
650
+
651
+static void ccp_dma_release_channels(struct ccp_device *ccp)
652
+{
653
+ struct ccp_dma_chan *chan;
654
+ struct dma_chan *dma_chan;
655
+ unsigned int i;
656
+
657
+ for (i = 0; i < ccp->cmd_q_count; i++) {
658
+ chan = ccp->ccp_dma_chan + i;
659
+ dma_chan = &chan->dma_chan;
660
+
661
+ if (dma_chan->client_count)
662
+ dma_release_channel(dma_chan);
651663 }
652664 }
653665
....@@ -771,8 +783,9 @@
771783 if (!dmaengine)
772784 return;
773785
774
- ccp_dma_release(ccp);
786
+ ccp_dma_release_channels(ccp);
775787 dma_async_device_unregister(dma_dev);
788
+ ccp_dma_release(ccp);
776789
777790 kmem_cache_destroy(ccp->dma_desc_cache);
778791 kmem_cache_destroy(ccp->dma_cmd_cache);