From f8ff2f28ba49fa41a06215ac3187dede347bc9a7 Mon Sep 17 00:00:00 2001
From: Takashi Iwai <tiwai@suse.de>
Date: Tue, 13 Jun 2017 15:57:28 +0200
Subject: [PATCH] ALSA: pcm: Skip ack callback without actual appl_ptr update
Git-commit: f8ff2f28ba49fa41a06215ac3187dede347bc9a7
Patch-mainline: v4.13-rc1
References: FATE#324827
We call ack callback whenever appl_ptr gets updated via
pcm_lib_apply_appl_ptr(). There are various code paths to call this
function. A part of them are for read/write/forward/rewind, where the
appl_ptr is always changed and thus the call of ack is mandatory.
OTOH, another part of code paths are from the explicit user call,
e.g. via SYNC_PTR ioctl. There, we may receive the same appl_ptr
value, and in such a case, calling ack is obviously superfluous.
This patch adds the check of the given appl_ptr value, and returns
immediately if it's no real update.
Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
sound/core/pcm_lib.c | 3 +++
1 file changed, 3 insertions(+)
--- a/sound/core/pcm_lib.c
+++ b/sound/core/pcm_lib.c
@@ -2111,6 +2111,9 @@ int pcm_lib_apply_appl_ptr(struct snd_pc
snd_pcm_uframes_t old_appl_ptr = runtime->control->appl_ptr;
int ret;
+ if (old_appl_ptr == appl_ptr)
+ return 0;
+
runtime->control->appl_ptr = appl_ptr;
if (substream->ops->ack) {
ret = substream->ops->ack(substream);