diff options
author | Takashi Iwai <tiwai@suse.de> | 2018-07-04 15:08:05 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2018-07-04 15:34:59 +0200 |
commit | e647f5a5c5d165c87750e8c0dcbe341b5a378ffd (patch) | |
tree | ea8b6fe2e8fb03060f2886fe4166a1014d25154b /sound/core | |
parent | 9cd641ed31f576d08f7b784850ba93eef050f32f (diff) | |
download | linux-e647f5a5c5d165c87750e8c0dcbe341b5a378ffd.tar.gz linux-e647f5a5c5d165c87750e8c0dcbe341b5a378ffd.tar.bz2 linux-e647f5a5c5d165c87750e8c0dcbe341b5a378ffd.zip |
ALSA: pcm: Use snd_pcm_stop_xrun() for xrun injection
Basically the xrun injection routine can simply call the standard
helper snd_pcm_stop_xrun(), but with one exception: it may be called
even when the stream is closed.
Make snd_pcm_stop_xrun() more robust and check the NULL runtime state,
and simplify xrun injection code by calling it.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/core')
-rw-r--r-- | sound/core/pcm.c | 7 | ||||
-rw-r--r-- | sound/core/pcm_native.c | 2 |
2 files changed, 2 insertions, 7 deletions
diff --git a/sound/core/pcm.c b/sound/core/pcm.c index 6f037a4b8b52..fdb9b92fc8d6 100644 --- a/sound/core/pcm.c +++ b/sound/core/pcm.c @@ -492,13 +492,8 @@ static void snd_pcm_xrun_injection_write(struct snd_info_entry *entry, struct snd_info_buffer *buffer) { struct snd_pcm_substream *substream = entry->private_data; - struct snd_pcm_runtime *runtime; - snd_pcm_stream_lock_irq(substream); - runtime = substream->runtime; - if (runtime && runtime->status->state == SNDRV_PCM_STATE_RUNNING) - __snd_pcm_xrun(substream); - snd_pcm_stream_unlock_irq(substream); + snd_pcm_stop_xrun(substream); } static void snd_pcm_xrun_debug_read(struct snd_info_entry *entry, diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c index 20174d0c0527..66c90f486af9 100644 --- a/sound/core/pcm_native.c +++ b/sound/core/pcm_native.c @@ -1339,7 +1339,7 @@ int snd_pcm_stop_xrun(struct snd_pcm_substream *substream) unsigned long flags; snd_pcm_stream_lock_irqsave(substream, flags); - if (snd_pcm_running(substream)) + if (substream->runtime && snd_pcm_running(substream)) __snd_pcm_xrun(substream); snd_pcm_stream_unlock_irqrestore(substream, flags); return 0; |