linux/sound/core
Takashi Iwai 0910c216f7 ALSA: pcm - Optimize the call of snd_pcm_update_hw_ptr() in read/write loop
In the PCM read/write loop, the driver calls snd_pcm_update_hw_ptr()
at each time at the beginning of the loop.  Russell King reported that
this hogs CPU significantly.

The current code assumes that the pointer callback is very fast and
cheap, also not too much fine grained.  It's not true in all cases.
When the pointer advances short samples while the read/write copy has
been performed, the driver updates the hw_ptr and gets avail > 0
again.  Then it tries to read/write these small chunks.  This repeats
until the avail really gets to zero.

For avoiding this situation, a simple workaround is to call
snd_pcm_update_hw_ptr() only once at starting the loop, assuming that
the read/write copy is performed fast enough.  If the available count
becomes short, it goes to snd_pcm_wait_avail() anyway, and this
processes right.

Tested-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2012-05-11 19:05:12 +02:00
..
oss ALSA: module_param: make bool parameters really bool 2011-12-19 10:34:41 +01:00
seq Documentation: remove references to /etc/modprobe.conf 2012-03-30 16:03:15 -07:00
compress_offload.c ALSA: Fix memory leak on error in snd_compr_set_params() 2012-01-24 15:29:32 +01:00
control_compat.c ALSA: control: add support for ENUMERATED user space controls 2011-10-09 09:09:11 +02:00
control.c ALSA: control - Fixe a trailing white space error 2012-03-13 08:11:59 +01:00
ctljack.c ALSA: hda - Add missing inclusion of linux/export.h 2011-11-16 14:28:33 +01:00
device.c sound: Add export.h for THIS_MODULE/EXPORT_SYMBOL where needed 2011-10-31 19:31:22 -04:00
hrtimer.c ALSA: hrtimer: remove superfluous tasklet invocation 2011-02-10 18:53:32 +01:00
hwdep_compat.c
hwdep.c Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-06 19:44:47 -08:00
info_oss.c sound: Add export.h for THIS_MODULE/EXPORT_SYMBOL where needed 2011-10-31 19:31:22 -04:00
info.c sound: Add module.h to the previously silent sound users 2011-10-31 19:31:21 -04:00
init.c The following text was taken from the original review request: 2012-03-24 10:41:37 -07:00
isadma.c sound: Add export.h for THIS_MODULE/EXPORT_SYMBOL where needed 2011-10-31 19:31:22 -04:00
jack.c ALSA: jack: Update documention to reflect other userspace interfaces 2012-05-07 18:11:37 +02:00
Kconfig Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound 2012-01-17 10:48:13 -08:00
Makefile Merge branch 'topic/hda' into for-linus 2012-01-12 09:59:18 +01:00
memalloc.c treewide: Correct spelling of successfully in comments 2011-09-27 18:08:04 +02:00
memory.c sound: Add export.h for THIS_MODULE/EXPORT_SYMBOL where needed 2011-10-31 19:31:22 -04:00
misc.c ALSA: Fixed a trailing white space error 2012-02-20 15:34:04 +01:00
pcm_compat.c ALSA: sound/core/pcm_compat.c: adjust array index 2011-07-28 15:12:02 +02:00
pcm_lib.c ALSA: pcm - Optimize the call of snd_pcm_update_hw_ptr() in read/write loop 2012-05-11 19:05:12 +02:00
pcm_memory.c sound: Add export.h for THIS_MODULE/EXPORT_SYMBOL where needed 2011-10-31 19:31:22 -04:00
pcm_misc.c sound: Add export.h for THIS_MODULE/EXPORT_SYMBOL where needed 2011-10-31 19:31:22 -04:00
pcm_native.c ALSA: pcm - Avoid GFP_ATOMIC in snd_pcm_link() 2012-03-15 07:36:00 +01:00
pcm_timer.c ALSA: sound/core/pcm_timer.c: use lib/gcd.c 2009-12-22 08:24:35 +01:00
pcm.c The following text was taken from the original review request: 2012-03-24 10:41:37 -07:00
rawmidi_compat.c
rawmidi.c sound: fix drivers needing module.h not moduleparam.h 2011-10-31 19:31:19 -04:00
rtctimer.c ALSA: rtctimer.c needs module.h 2011-07-30 08:03:35 +02:00
sgbuf.c ALSA: Fix vunmap and free order in snd_free_sgbuf_pages() 2009-03-18 08:04:01 +01:00
sound_oss.c ALSA: Fix the card number limit of OSS-emulation 2012-05-08 17:25:56 +02:00
sound.c ALSA: core: add support for compressed devices 2011-12-23 10:07:46 +01:00
timer_compat.c ALSA: Kill snd_assert() in sound/core/* 2008-08-13 11:46:35 +02:00
timer.c device.h: cleanup users outside of linux/include (C files) 2012-03-11 14:27:37 -04:00
vmaster.c ALSA: Add a hook capability to vmaster controls 2012-03-12 13:58:54 +01:00