Re: [PATCH 3.9-stable] dma: tegra: avoid channel lock up after free

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



10.07.2013 16:44, Jonghwan Choi пишет:
> From: Dmitry Osipenko <digetx@xxxxxxxxx>
> 
> This patch looks like it should be in the 3.9-stable tree, should we apply
> it?
> 
> ------------------
> 
> From: "Dmitry Osipenko <digetx@xxxxxxxxx>"
> 
> commit 7bdc1e272a471062e8f310137c896e2355b46d13 upstream
> 
> Lock scenario: Channel 1 was allocated and prepared as slave_sg, used and freed.
> Now preparation of cyclic dma on channel 1 will fail with err "DMA configuration
> conflict" because tdc->isr_handler still setted to handle_once_dma_done.
> 
> This happens because tegra_dma_abort_all() won't be called on channel freeing
> if pending list is empty and channel not busy. We need to clear isr_handler
> on channel freeing to avoid locking.
> 
> Signed-off-by: Dmitry Osipenko <digetx@xxxxxxxxx>
> Acked-by: Stephen Warren <swarren@xxxxxxxxxx>
> Acked-by: Laxman Dewangan <ldewangan@xxxxxxxxxx>
> Signed-off-by: Vinod Koul <vinod.koul@xxxxxxxxx>
> Signed-off-by: Jonghwan Choi <jhbird.choi@xxxxxxxxxxx>
> ---
>  drivers/dma/tegra20-apb-dma.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/dma/tegra20-apb-dma.c b/drivers/dma/tegra20-apb-dma.c
> index fcee27e..d464225 100644
> --- a/drivers/dma/tegra20-apb-dma.c
> +++ b/drivers/dma/tegra20-apb-dma.c
> @@ -1189,6 +1189,7 @@ static void tegra_dma_free_chan_resources(struct dma_chan *dc)
>  	list_splice_init(&tdc->free_dma_desc, &dma_desc_list);
>  	INIT_LIST_HEAD(&tdc->cb_desc);
>  	tdc->config_init = false;
> +	tdc->isr_handler = NULL;
>  	spin_unlock_irqrestore(&tdc->lock, flags);
>  
>  	while (!list_empty(&dma_desc_list)) {
> 

Currently the only dma user in upstream is sound. This should be more actual
after fixing serial tegra driver which has obvious deadlock issue and probably
some other issue that prevents correct data transfer (not possible to complete
large file transfer via bluetooth). I have fix for deadlock but data transfer
breakage looks much more difficult and I'm not fully sure yet that it's serial
issue.
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]