in core.c [118:146]
static void flush_channel_fifos(struct most_channel *c)
{
unsigned long flags, hf_flags;
struct mbo *mbo, *tmp;
if (list_empty(&c->fifo) && list_empty(&c->halt_fifo))
return;
spin_lock_irqsave(&c->fifo_lock, flags);
list_for_each_entry_safe(mbo, tmp, &c->fifo, list) {
list_del(&mbo->list);
spin_unlock_irqrestore(&c->fifo_lock, flags);
most_free_mbo_coherent(mbo);
spin_lock_irqsave(&c->fifo_lock, flags);
}
spin_unlock_irqrestore(&c->fifo_lock, flags);
spin_lock_irqsave(&c->fifo_lock, hf_flags);
list_for_each_entry_safe(mbo, tmp, &c->halt_fifo, list) {
list_del(&mbo->list);
spin_unlock_irqrestore(&c->fifo_lock, hf_flags);
most_free_mbo_coherent(mbo);
spin_lock_irqsave(&c->fifo_lock, hf_flags);
}
spin_unlock_irqrestore(&c->fifo_lock, hf_flags);
if (unlikely((!list_empty(&c->fifo) || !list_empty(&c->halt_fifo))))
dev_warn(&c->dev, "Channel or trash fifo not empty\n");
}