Re: [PATCH] crypto: ccp: Fix double add when creating new DMA command
On Fri, Jan 27, 2017 at 05:09:04PM -0600, Gary R Hook wrote: > Eliminate a double-add by creating a new list to manage > command descriptors when created; move the descriptor to > the pending list when the command is submitted. This > > > Signed-off-by: Gary R HookPatch applied. Thanks. -- Email: Herbert Xu Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
Re: [PATCH] crypto: ccp: Fix double add when creating new DMA command
On 01/27/2017 05:09 PM, Gary R Hook wrote: Eliminate a double-add by creating a new list to manage command descriptors when created; move the descriptor to the pending list when the command is submitted. Herbert, Another patch that could use some 4.10 love. Possible? Thanks, Gary Signed-off-by: Gary R Hook--- drivers/crypto/ccp/ccp-dev.h |1 + drivers/crypto/ccp/ccp-dmaengine.c |6 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/crypto/ccp/ccp-dev.h b/drivers/crypto/ccp/ccp-dev.h index 830f35e..649e561 100644 --- a/drivers/crypto/ccp/ccp-dev.h +++ b/drivers/crypto/ccp/ccp-dev.h @@ -238,6 +238,7 @@ struct ccp_dma_chan { struct ccp_device *ccp; spinlock_t lock; + struct list_head created; struct list_head pending; struct list_head active; struct list_head complete; diff --git a/drivers/crypto/ccp/ccp-dmaengine.c b/drivers/crypto/ccp/ccp-dmaengine.c index 6553912..e5d9278 100644 --- a/drivers/crypto/ccp/ccp-dmaengine.c +++ b/drivers/crypto/ccp/ccp-dmaengine.c @@ -63,6 +63,7 @@ static void ccp_free_chan_resources(struct dma_chan *dma_chan) ccp_free_desc_resources(chan->ccp, >complete); ccp_free_desc_resources(chan->ccp, >active); ccp_free_desc_resources(chan->ccp, >pending); + ccp_free_desc_resources(chan->ccp, >created); spin_unlock_irqrestore(>lock, flags); } @@ -273,6 +274,7 @@ static dma_cookie_t ccp_tx_submit(struct dma_async_tx_descriptor *tx_desc) spin_lock_irqsave(>lock, flags); cookie = dma_cookie_assign(tx_desc); + list_del(>entry); list_add_tail(>entry, >pending); spin_unlock_irqrestore(>lock, flags); @@ -426,7 +428,7 @@ static struct ccp_dma_desc *ccp_create_desc(struct dma_chan *dma_chan, spin_lock_irqsave(>lock, sflags); - list_add_tail(>entry, >pending); + list_add_tail(>entry, >created); spin_unlock_irqrestore(>lock, sflags); @@ -610,6 +612,7 @@ static int ccp_terminate_all(struct dma_chan *dma_chan) /*TODO: Purge the complete list? */ ccp_free_desc_resources(chan->ccp, >active); ccp_free_desc_resources(chan->ccp, >pending); + ccp_free_desc_resources(chan->ccp, >created); spin_unlock_irqrestore(>lock, flags); @@ -679,6 +682,7 @@ int ccp_dmaengine_register(struct ccp_device *ccp) chan->ccp = ccp; spin_lock_init(>lock); + INIT_LIST_HEAD(>created); INIT_LIST_HEAD(>pending); INIT_LIST_HEAD(>active); INIT_LIST_HEAD(>complete); -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html -- This is my day job. Follow me at: IG/Twitter/Facebook: @grhookphoto IG/Twitter/Facebook: @grhphotographer
[PATCH] crypto: ccp: Fix double add when creating new DMA command
Eliminate a double-add by creating a new list to manage command descriptors when created; move the descriptor to the pending list when the command is submitted. This Signed-off-by: Gary R Hook--- drivers/crypto/ccp/ccp-dev.h |1 + drivers/crypto/ccp/ccp-dmaengine.c |6 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/crypto/ccp/ccp-dev.h b/drivers/crypto/ccp/ccp-dev.h index 830f35e..649e561 100644 --- a/drivers/crypto/ccp/ccp-dev.h +++ b/drivers/crypto/ccp/ccp-dev.h @@ -238,6 +238,7 @@ struct ccp_dma_chan { struct ccp_device *ccp; spinlock_t lock; + struct list_head created; struct list_head pending; struct list_head active; struct list_head complete; diff --git a/drivers/crypto/ccp/ccp-dmaengine.c b/drivers/crypto/ccp/ccp-dmaengine.c index 6553912..e5d9278 100644 --- a/drivers/crypto/ccp/ccp-dmaengine.c +++ b/drivers/crypto/ccp/ccp-dmaengine.c @@ -63,6 +63,7 @@ static void ccp_free_chan_resources(struct dma_chan *dma_chan) ccp_free_desc_resources(chan->ccp, >complete); ccp_free_desc_resources(chan->ccp, >active); ccp_free_desc_resources(chan->ccp, >pending); + ccp_free_desc_resources(chan->ccp, >created); spin_unlock_irqrestore(>lock, flags); } @@ -273,6 +274,7 @@ static dma_cookie_t ccp_tx_submit(struct dma_async_tx_descriptor *tx_desc) spin_lock_irqsave(>lock, flags); cookie = dma_cookie_assign(tx_desc); + list_del(>entry); list_add_tail(>entry, >pending); spin_unlock_irqrestore(>lock, flags); @@ -426,7 +428,7 @@ static struct ccp_dma_desc *ccp_create_desc(struct dma_chan *dma_chan, spin_lock_irqsave(>lock, sflags); - list_add_tail(>entry, >pending); + list_add_tail(>entry, >created); spin_unlock_irqrestore(>lock, sflags); @@ -610,6 +612,7 @@ static int ccp_terminate_all(struct dma_chan *dma_chan) /*TODO: Purge the complete list? */ ccp_free_desc_resources(chan->ccp, >active); ccp_free_desc_resources(chan->ccp, >pending); + ccp_free_desc_resources(chan->ccp, >created); spin_unlock_irqrestore(>lock, flags); @@ -679,6 +682,7 @@ int ccp_dmaengine_register(struct ccp_device *ccp) chan->ccp = ccp; spin_lock_init(>lock); + INIT_LIST_HEAD(>created); INIT_LIST_HEAD(>pending); INIT_LIST_HEAD(>active); INIT_LIST_HEAD(>complete); -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html