[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