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 <o-takashi@sakamocchi.jp> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
4e99151435
commit
f8ff2f28ba
1 changed files with 3 additions and 0 deletions
|
@ -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;
|
snd_pcm_uframes_t old_appl_ptr = runtime->control->appl_ptr;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (old_appl_ptr == appl_ptr)
|
||||||
|
return 0;
|
||||||
|
|
||||||
runtime->control->appl_ptr = appl_ptr;
|
runtime->control->appl_ptr = appl_ptr;
|
||||||
if (substream->ops->ack) {
|
if (substream->ops->ack) {
|
||||||
ret = substream->ops->ack(substream);
|
ret = substream->ops->ack(substream);
|
||||||
|
|
Loading…
Reference in a new issue