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@xxxxxxxxxx> > Signed-off-by: Takashi Sakamoto <o-takashi@xxxxxxxxxxxxx> Applied, thanks. Takashi _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel