On 12/20/2011 04:32 PM, Clemens Ladisch wrote:
Takashi Iwai wrote:
One point I'm not sure about this implementation is the use of tasklet. The tasklet itself runs again in ep->lock, what's the rationale for it? In other words, can't it be a straight function call?
This architecture was copied from ua101.c.
Yes.
If I remember correctly, the original reason for the tasklet was to avoid calling snd_pcm_period_elapsed() from inside the lock. This would not be necessary in endpoint.c.
Hmm. It was actually you who told me to use a tasklet and not to submit urbs from the input urb completion callbacks, as we can run out of queuable playback buffers otherwise. Now that I think about it again, I agree that it could be done without a tasklet as well by just keeping the returned ones in a list and handle them in one go whenever possible.
I'll try this when I spin the next version.
Thanks, Daniel