From: Takashi Iwai Date: Tue, 13 Jun 2017 13:57:28 +0000 (+0200) Subject: ALSA: pcm: Skip ack callback without actual appl_ptr update X-Git-Tag: v4.13-rc4~15^2~50 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f8ff2f28ba49fa41a06215ac3187dede347bc9a7;p=platform%2Fkernel%2Flinux-exynos.git ALSA: pcm: Skip ack callback without actual appl_ptr update 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 Signed-off-by: Takashi Iwai --- diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c index e73b6e4..75308dd 100644 --- a/sound/core/pcm_lib.c +++ b/sound/core/pcm_lib.c @@ -2112,6 +2112,9 @@ int pcm_lib_apply_appl_ptr(struct snd_pcm_substream *substream, 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);