diff mbox

[v3,6/6] dma: rcar-dma: Fixed active descriptor initializing

Message ID 1443559488-2416-7-git-send-email-hamzahfrq.sub@gmail.com
State Under Review
Delegated to: Geert Uytterhoeven
Headers show

Commit Message

hamzahfrq.sub@gmail.com Sept. 29, 2015, 8:44 p.m. UTC
From: Muhammad Hamza Farooq <mfarooq@visteon.com>

Running descriptor pointer is set to NULL upon freeing resources. Other-
wise, rcar_dmac_issue_pending might not start new transfers

Signed-off-by: Muhammad Hamza Farooq <mfarooq@visteon.com>
---
 drivers/dma/sh/rcar-dmac.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Laurent Pinchart Oct. 16, 2015, 1:32 p.m. UTC | #1
Hello Hamza,

Thank you for the patch.

On Tuesday 29 September 2015 22:44:48 hamzahfrq.sub@gmail.com wrote:
> From: Muhammad Hamza Farooq <mfarooq@visteon.com>
> 
> Running descriptor pointer is set to NULL upon freeing resources. Other-
> wise, rcar_dmac_issue_pending might not start new transfers
> 
> Signed-off-by: Muhammad Hamza Farooq <mfarooq@visteon.com>
> ---
>  drivers/dma/sh/rcar-dmac.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/dma/sh/rcar-dmac.c b/drivers/dma/sh/rcar-dmac.c
> index 6eec878..db97f7b 100644
> --- a/drivers/dma/sh/rcar-dmac.c
> +++ b/drivers/dma/sh/rcar-dmac.c
> @@ -1042,6 +1042,7 @@ static void rcar_dmac_free_chan_resources(struct
> dma_chan *chan) list_splice_init(&rchan->desc.active, &list);
>  	list_splice_init(&rchan->desc.done, &list);
>  	list_splice_init(&rchan->desc.wait, &list);
> +	rchan->desc.running = NULL;

This looks good to me, but I wonder if it would make sense to replace the 
list_splice_init() calls with a call to rcar_dmac_chan_reinit() which sets 
desc.running to NULL, and then just process the free list below. Any opinion ?

In the meantime I'll apply your patch to my tree as it's clearly a bug fix and 
will send a pull request.

>  	list_for_each_entry(desc, &list, node)
>  		rcar_dmac_realloc_hwdesc(rchan, desc, 0);
diff mbox

Patch

diff --git a/drivers/dma/sh/rcar-dmac.c b/drivers/dma/sh/rcar-dmac.c
index 6eec878..db97f7b 100644
--- a/drivers/dma/sh/rcar-dmac.c
+++ b/drivers/dma/sh/rcar-dmac.c
@@ -1042,6 +1042,7 @@  static void rcar_dmac_free_chan_resources(struct dma_chan *chan)
 	list_splice_init(&rchan->desc.active, &list);
 	list_splice_init(&rchan->desc.done, &list);
 	list_splice_init(&rchan->desc.wait, &list);
+	rchan->desc.running = NULL;
 
 	list_for_each_entry(desc, &list, node)
 		rcar_dmac_realloc_hwdesc(rchan, desc, 0);