ccp: ccp_dmaengine_unregister release dma channels
Subsystems (3)
PATCH 1/1 ccp: ccp_dmaengine_unregister release dma channels
ccp_dmaengine_register adds dma_chan->device_node to dma_dev->channels list but ccp_dmaengine_unregister didn't remove them.
That can cause crashes in various dmaengine methods that tries to use dma_dev->channels
--- drivers/crypto/ccp/ccp-dmaengine.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)
drivers/crypto/ccp/ccp-dmaengine.c +16 -0
@@ -632,6 +632,20 @@ static int ccp_terminate_all(struct dma_chan *dma_chan)return 0 ; } +static void ccp_dma_release (struct ccp_device *ccp) +{ +struct ccp_dma_chan *chan; +struct dma_chan *dma_chan; +unsigned int i; + +for (i =0 ; i < ccp->cmd_q_count; i++) { + chan = ccp->ccp_dma_chan + i; + dma_chan = &chan->dma_chan; +tasklet_kill (&chan->cleanup_tasklet); +list_del_rcu (&dma_chan->device_node); + } +} +int ccp_dmaengine_register (struct ccp_device *ccp) {struct ccp_dma_chan *chan;
@@ -736,6 +750,7 @@ int ccp_dmaengine_register(struct ccp_device *ccp)return 0 ; err_reg: +ccp_dma_release (ccp);kmem_cache_destroy (ccp->dma_desc_cache); err_cache:
@@ -752,6 +767,7 @@ void ccp_dmaengine_unregister(struct ccp_device *ccp)return ;dma_async_device_unregister (dma_dev); +ccp_dma_release (ccp);kmem_cache_destroy (ccp->dma_desc_cache);kmem_cache_destroy (ccp->dma_cmd_cache);
Signature · 1 line
2.35.1
Quoted 5 lines · Dāvis Mosāns
ccp_dmaengine_registeraddsdma_chan->device_nodetodma_dev->channelslist butccp_dmaengine_unregisterdidn't remove them.
That can cause crashes in various dmaengine methods that tries to usedma_dev->channelsSigned-off-by Dāvis Mosāns <[email protected]>
Quoted 48 lines
--- drivers/crypto/ccp/ccp-dmaengine.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)drivers/crypto/ccp/ccp-dmaengine.c +16
-0@@ -632,6 +632,20 @@ static int ccp_terminate_all(struct dma_chan *dma_chan)return 0 ; } +static void ccp_dma_release (struct ccp_device *ccp) +{ +struct ccp_dma_chan *chan; +struct dma_chan *dma_chan; +unsigned int i; + +for (i =0 ; i < ccp->cmd_q_count; i++) { + chan = ccp->ccp_dma_chan + i; + dma_chan = &chan->dma_chan; +tasklet_kill (&chan->cleanup_tasklet); +list_del_rcu (&dma_chan->device_node); + } +} +int ccp_dmaengine_register (struct ccp_device *ccp) {struct ccp_dma_chan *chan;@@ -736,6 +750,7 @@ int ccp_dmaengine_register(struct ccp_device *ccp)return 0 ; err_reg: +ccp_dma_release (ccp);kmem_cache_destroy (ccp->dma_desc_cache); err_cache:@@ -752,6 +767,7 @@ void ccp_dmaengine_unregister(struct ccp_device *ccp)return ;dma_async_device_unregister (dma_dev); +ccp_dma_release (ccp);kmem_cache_destroy (ccp->dma_desc_cache);kmem_cache_destroy (ccp->dma_cmd_cache);Signature · 1 line
2.35.1
Herbert Xu
maintainerQuoted 8 lines · Dāvis Mosāns
ccp_dmaengine_registeraddsdma_chan->device_nodetodma_dev->channelslist butccp_dmaengine_unregisterdidn't remove them.
That can cause crashes in various dmaengine methods that tries to usedma_dev->channelsSigned-off-by Dāvis Mosāns <[email protected]>---
drivers/crypto/ccp/ccp-dmaengine.c| 16 ++++++++++++++++1 file changed, 16 insertions(+)
Patch applied. Thanks.
Signature · 3 lines
Email: Herbert Xu <[email protected]> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt