mmc: sh-mmcif: reset DMA completion immediately before starting DMA
DMA completion can be signalled from the DMA callback and from the error handler. If both are called, the completion struct can enter an inconsistent state. To prevent this move completion initialisation immediately before activating DMA. Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Signed-off-by: Chris Ball <cjb@laptop.org>
This commit is contained in:
parent
33e69c7b48
commit
1fcfebfe49
1 changed files with 6 additions and 2 deletions
|
|
@ -419,8 +419,6 @@ static void sh_mmcif_request_dma(struct sh_mmcif_host *host,
|
|||
if (ret < 0)
|
||||
goto ecfgrx;
|
||||
|
||||
init_completion(&host->dma_complete);
|
||||
|
||||
return;
|
||||
|
||||
ecfgrx:
|
||||
|
|
@ -1061,6 +1059,12 @@ static bool sh_mmcif_end_cmd(struct sh_mmcif_host *host)
|
|||
if (!data)
|
||||
return false;
|
||||
|
||||
/*
|
||||
* Completion can be signalled from DMA callback and error, so, have to
|
||||
* reset here, before setting .dma_active
|
||||
*/
|
||||
init_completion(&host->dma_complete);
|
||||
|
||||
if (data->flags & MMC_DATA_READ) {
|
||||
if (host->chan_rx)
|
||||
sh_mmcif_start_dma_rx(host);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue