]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
ASoC: Fix DMA channel leak in imx-pcm-dma-mx2 driver.
authorJavier Martin <javier.martin@vista-silicon.com>
Thu, 12 Jan 2012 11:30:38 +0000 (12:30 +0100)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Thu, 12 Jan 2012 20:04:40 +0000 (12:04 -0800)
"snd_imx_pcm_hw_params" callback can be called
several times by the user (i.e. OSS emulation)
leading to a DMA channel leak.

Signed-off-by: Javier Martin <javier.martin@vista-silicon.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/imx/imx-pcm-dma-mx2.c

index 1cf2fe889f6adaa885c77bf2c74da9dd9f56a3d8..7d7fbb5d2a91abf9ebf06934411c84643469b39f 100644 (file)
@@ -88,11 +88,13 @@ static int imx_ssi_dma_alloc(struct snd_pcm_substream *substream,
        iprtd->dma_data.dma_request = dma_params->dma;
 
        /* Try to grab a DMA channel */
-       dma_cap_zero(mask);
-       dma_cap_set(DMA_SLAVE, mask);
-       iprtd->dma_chan = dma_request_channel(mask, filter, iprtd);
-       if (!iprtd->dma_chan)
-               return -EINVAL;
+       if (!iprtd->dma_chan) {
+               dma_cap_zero(mask);
+               dma_cap_set(DMA_SLAVE, mask);
+               iprtd->dma_chan = dma_request_channel(mask, filter, iprtd);
+               if (!iprtd->dma_chan)
+                       return -EINVAL;
+       }
 
        switch (params_format(params)) {
        case SNDRV_PCM_FORMAT_S16_LE: