'Twas brillig, and Jaroslav Kysela at 27/01/10 17:21 did gyre and gimble: > On Wed, 27 Jan 2010, Clemens Ladisch wrote: > >> Jaroslav Kysela wrote: >>> On Wed, 27 Jan 2010, Clemens Ladisch wrote: >>>> A somewhat unrelated issue: Both old and new code assume that >>>> hw_ptr==0 is a period boundary, but that is not true if the boundary >>>> is not an integer multiple of the period size, and the pointer wraps. >>>> I'm not sure what happens then. >>> >>> I'm not exactly sure what you're talking about. Where is the >>> hw_ptr==0 assumption? >> >> This code, which tries to align hw_ptr_interrupt to a period boundary: >> >> runtime->hw_ptr_interrupt = new_hw_ptr - >> (new_hw_ptr % runtime->period_size); > > I see. It is really problem, because if hw_ptr_interrupt shifts, then the > condition > delta = runtime->hw_ptr_interrupt + runtime->period_size; > if (delta > new_hw_ptr) { > > is not accurate and might cause unwanted issues. > > The simple fix for 64-bit archs is to use "boundary = buffer_size * > period_size" expression to setup the boundary variable properly. > > I added code to find the lowest common multiple for 32-bit archs. > > The patch is: > > http://git.alsa-project.org/?p=alsa-kernel.git;a=commitdiff;h=7910b4a1db63fefc3d291853d33c34c5b6352e8e FWIW, this patch seems to have finally solved: https://qa.mandriva.com/show_bug.cgi?id=57010 which we used to track this issue. Had two users confirm it as fixed which is good enough for me :) Take care and thanks. Col -- Colin Guthrie gmane(at)colin.guthr.ie http://colin.guthr.ie/ Day Job: Tribalogic Limited [http://www.tribalogic.net/] Open Source: Mandriva Linux Contributor [http://www.mandriva.com/] PulseAudio Hacker [http://www.pulseaudio.org/] Trac Hacker [http://trac.edgewall.org/] _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel