in most_snd.c [225:252]
static int playback_thread(void *data)
{
struct channel *const channel = data;
while (!kthread_should_stop()) {
struct mbo *mbo = NULL;
bool period_elapsed = false;
wait_event_interruptible(
channel->playback_waitq,
kthread_should_stop() ||
(channel->is_stream_running &&
(mbo = most_get_mbo(channel->iface, channel->id,
&comp))));
if (!mbo)
continue;
if (channel->is_stream_running)
period_elapsed = copy_data(channel, mbo);
else
memset(mbo->virt_address, 0, mbo->buffer_length);
most_submit_mbo(mbo);
if (period_elapsed)
snd_pcm_period_elapsed(channel->substream);
}
return 0;
}