Message ID | 1400487263-3951-1-git-send-email-jarkko.nikula@linux.intel.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 2fa190ce33bdf2f58bb0a65d94e08980d92c76ed |
Headers | show |
On Mon, May 19, 2014 at 11:14:23AM +0300, Jarkko Nikula wrote: > From: Kevin Strasser <kevin.strasser@intel.com> > > In some cases the pcm stream is closed while context has been > scheduled to be restored, causing a null pointer deref panic. > Cancel work to ensure stream does not get freed while work is > still active/pending. Applied, thanks.
diff --git a/sound/soc/intel/sst-baytrail-pcm.c b/sound/soc/intel/sst-baytrail-pcm.c index 6242ccce2bb7..3af38576e91e 100644 --- a/sound/soc/intel/sst-baytrail-pcm.c +++ b/sound/soc/intel/sst-baytrail-pcm.c @@ -164,7 +164,8 @@ static void sst_byt_pcm_work(struct work_struct *work) struct sst_byt_pcm_data *pcm_data = container_of(work, struct sst_byt_pcm_data, work); - sst_byt_pcm_restore_stream_context(pcm_data->substream); + if (snd_pcm_running(pcm_data->substream)) + sst_byt_pcm_restore_stream_context(pcm_data->substream); } static int sst_byt_pcm_trigger(struct snd_pcm_substream *substream, int cmd) @@ -277,6 +278,7 @@ static int sst_byt_pcm_close(struct snd_pcm_substream *substream) dev_dbg(rtd->dev, "PCM: close\n"); + cancel_work_sync(&pcm_data->work); mutex_lock(&pcm_data->mutex); ret = sst_byt_stream_free(byt, pcm_data->stream); if (ret < 0) {