From e647f5a5c5d165c87750e8c0dcbe341b5a378ffd Mon Sep 17 00:00:00 2001
From: Takashi Iwai <tiwai@suse.de>
Date: Wed, 4 Jul 2018 15:08:05 +0200
Subject: [PATCH] ALSA: pcm: Use snd_pcm_stop_xrun() for xrun injection
Git-commit: e647f5a5c5d165c87750e8c0dcbe341b5a378ffd
Patch-mainline: v4.19-rc1
References: bsc#1121278
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>
---
sound/core/pcm.c | 7 +------
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;
--
2.20.1