This patch is already approved by "Vinod Koul <[email protected]>"

Thanks.

Best Regards.

> -----Original Message-----
> From: [email protected] [mailto:[email protected]]
> On Behalf Of Jonghwan Choi
> Sent: Thursday, October 10, 2013 2:16 PM
> To: 'Jonghwan Choi'
> Cc: [email protected]; 'Michael Grzeschik'; 'Vinod Koul';
> [email protected]
> Subject: [PATCH 3.11-stable] dmaengine: imx-dma: fix callback path in
> tasklet
> 
> This patch looks like it should be in the 3.11-stable tree, should we
> apply
> it?
> 
> ------------------
> 
> From: "Michael Grzeschik <[email protected]>"
> 
> commit fcaaba6c7136fe47e5a13352f99a64b019b6d2c5 upstream
> 
> We need to free the ld_active list head before jumping into the callback
> routine. Otherwise the callback could run into issue_pending and change
> our ld_active list head we just going to free. This will run the channel
> list into an currupted and undefined state.
> 
>  Cc: <[email protected]> # 3.11.x: 5a276fa: dmaengine: imx-dma: fix
> lockdep
>  Cc: <[email protected]> # 3.11.x: edc530f: dmaengine: imx-dma: fix
> slow path
> Signed-off-by: Michael Grzeschik <[email protected]>
> Signed-off-by: Vinod Koul <[email protected]>
> Signed-off-by: Jonghwan Choi <[email protected]>
> ---
>  drivers/dma/imx-dma.c |   10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/dma/imx-dma.c b/drivers/dma/imx-dma.c
> index b8440dd..25787d06 100644
> --- a/drivers/dma/imx-dma.c
> +++ b/drivers/dma/imx-dma.c
> @@ -627,13 +627,11 @@ static void imxdma_tasklet(unsigned long data)
> 
>       if (list_empty(&imxdmac->ld_active)) {
>               /* Someone might have called terminate all */
> -             goto out;
> +             spin_unlock_irqrestore(&imxdma->lock, flags);
> +             return;
>       }
>       desc = list_first_entry(&imxdmac->ld_active, struct imxdma_desc,
> node);
> 
> -     if (desc->desc.callback)
> -             desc->desc.callback(desc->desc.callback_param);
> -
>       /* If we are dealing with a cyclic descriptor, keep it on ld_active
>        * and dont mark the descriptor as complete.
>        * Only in non-cyclic cases it would be marked as complete
> @@ -661,6 +659,10 @@ static void imxdma_tasklet(unsigned long data)
>       }
>  out:
>       spin_unlock_irqrestore(&imxdma->lock, flags);
> +
> +     if (desc->desc.callback)
> +             desc->desc.callback(desc->desc.callback_param);
> +
>  }
> 
>  static int imxdma_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
> --
> 1.7.9.5
> 
> --
> To unsubscribe from this list: send the line "unsubscribe stable" in
> the body of a message to [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to