ASoC: SOF: trace: fix unconditional free in trace release
authorKai Vehmanen <kai.vehmanen@linux.intel.com>
Fri, 24 Jan 2020 21:36:22 +0000 (15:36 -0600)
committerMark Brown <broonie@kernel.org>
Mon, 27 Jan 2020 17:52:09 +0000 (17:52 +0000)
Check if DMA pages were successfully allocated in initialization
before calling free. For many types of memory (like sgbufs)
the extra free is harmless, but not all backends track allocation
state, so add an explicit check.

Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20200124213625.30186-5-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/trace.c

index 4bb65030819d314684f0b346a329b2cbd85f85c4..d815090252f8695d084b024aefcc1e0f49c02037 100644 (file)
@@ -343,7 +343,10 @@ void snd_sof_free_trace(struct snd_sof_dev *sdev)
 
        snd_sof_release_trace(sdev);
 
-       snd_dma_free_pages(&sdev->dmatb);
-       snd_dma_free_pages(&sdev->dmatp);
+       if (sdev->dma_trace_pages) {
+               snd_dma_free_pages(&sdev->dmatb);
+               snd_dma_free_pages(&sdev->dmatp);
+               sdev->dma_trace_pages = 0;
+       }
 }
 EXPORT_SYMBOL(snd_sof_free_trace);