[alsa-devel] [PATCH] ALSA: firewire-lib: permit to flush queued packets only in process context for better PCM period granularity

Takashi Iwai tiwai at suse.de
Wed May 11 20:38:19 CEST 2016


On Wed, 11 May 2016 19:17:39 +0200,
Takashi Sakamoto wrote:
> 
> These three commits were merged to improve PCM pointer granularity.
> commit 76fb87894828 ("ALSA: firewire-lib: taskletize the snd_pcm_period_elapsed() call")
> commit e9148dddc3c7 ("ALSA: firewire-lib: flush completed packets when reading PCM position")
> commit 92b862c7d685 ("ALSA: firewire-lib: optimize packet flushing")
> 
> The point of them is to handle queued packets not only in software IRQ
> context of IR/IT contexts, but also in process context. As a result of
> handling packets, period tasklet is scheduled when acrossing PCM period
> boundary. This is to prevent recursive call of
> 'struct snd_pcm_ops.pointer()' in the same context.
> 
> When the pointer callback is executed in the process context, it's
> better to avoid the second callback in the software IRQ context. The
> software IRQ context runs immediately after scheduled in the process
> context because few packets are queued yet.
> 
> For the aim, 'pointer_flush' is used, however it causes a race condition
> between the process context and software IRQ context of IR/IT contexts.
> 
> Practically, this race is not so critical because it influences process
> context to skip flushing queued packet and to get worse granularity of
> PCM pointer. The race condition is quite rare but it should be improved
> for stable service.
> 
> The similar effect can be achieved by using 'in_interrupt()' macro. This
> commit obsoletes 'pointer_flush' with it.
> 
> Acked-by: Clemens Ladisch <clemens at ladisch.de>
> Signed-off-by: Takashi Sakamoto <o-takashi at sakamocchi.jp>

Applied, thanks.


Takashi


More information about the Alsa-devel mailing list