On Thu, 06 Apr 2023 09:33:41 +0200, Oswald Buddenhagen wrote: > > On Thu, Apr 06, 2023 at 08:55:27AM +0200, Takashi Iwai wrote: > > On Wed, 05 Apr 2023 22:12:20 +0200, > > Oswald Buddenhagen wrote: > >> @@ -2262,7 +2156,7 @@ Typical code would be like the following. > >> /* over the period boundary? */ > >> if (chip->size >= runtime->period_size) { > >> /* reset the accumulator */ > >> - chip->size %= runtime->period_size; > >> + chip->size -= runtime->period_size; > >> /* call updater */ > >> spin_unlock(&chip->lock); > >> snd_pcm_period_elapsed(substream); > > > > Hmm, this kind of change shouldn't be sneaked in. > > That's more than the typo fixes etc, > > > true, the patch grew too big and i missed this hunk. > (i only kept it as one patch, because some pieces overlap and i didn't > want to add churn.) Maybe the changes could have been split from the first place, the mechanical changes to drop empty lines before "::", typo fixes, and text improvements, etc. But I guess it's too late and I'm fine to apply this whole change as a single patch with the correction. > > and even worse, it's a wrong replacement. > > > hmm, yeah, if the timer ints are configured to occur too rarely, this > wouldn't do the right thing. > but then, why would they be? that would basically defeat the point of > using many periods in the first place. should i instead change the > text to emphasize that the ints should occur at least once per period? > (i've actually pondered the timer option in the context of the emu10k1 > driver as well, and concluded that there should be two timer ints per > period, so snd_pcm_period_elapsed() is reliably called in the first > half of the next period, which is critical when only two periods are > configured.) No, the point is that, if an irq handler misses the multiple period updates, it has to handle the situation in a single shot, and the offset gets corrected to the value within the period size; using "-=" instead of "%=" may leave the size over the period size in such a case, and this may return an invalid PCM pointer value in the end. The text about the irq handling could be improved, of course. thanks, Takashi