summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>2014-04-25 22:44:53 +0900
committerTakashi Iwai <tiwai@suse.de>2014-05-26 14:21:56 +0200
commitc8de6dbbbb422030d3c174146b2137e69a528d69 (patch)
tree2b803a0d5a5f84f87e5f61b8de5fe6413406519f
parent7b2d99fa6b127707cf0d78feedbb3613aed4d576 (diff)
ALSA: firewire-lib: Restrict calling flush_context_completion() when context exists
Currently, drivers can bring XRUN state for PCM substreams when error to queue packets or detecting discontinuity of packet. The application may try to recover this state by calling snd_pcm_prepare(). Depending on each driver, .prepare() includes restart streaming. Then there is a state that PCM substreams are running but isochronous contexts are stopped. In this case, when .pointer() is called, it refers to error pointer. This commit is for a prevention of this bug. Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--sound/firewire/amdtp.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sound/firewire/amdtp.c b/sound/firewire/amdtp.c
index ac8c35830cd9..7c814ace9e58 100644
--- a/sound/firewire/amdtp.c
+++ b/sound/firewire/amdtp.c
@@ -898,7 +898,7 @@ EXPORT_SYMBOL(amdtp_stream_start);
unsigned long amdtp_stream_pcm_pointer(struct amdtp_stream *s)
{
/* this optimization is allowed to be racy */
- if (s->pointer_flush)
+ if (s->pointer_flush && amdtp_stream_running(s))
fw_iso_context_flush_completions(s->context);
else
s->pointer_flush = true;