/* Do the callback functions of expired vtimer events. Called from within the interrupt handler.  */
static void do_callbacks(struct list_head *cb_list)
/* Do the callback functions of expired vtimer events. Called from within the interrupt handler.  */
static void do_callbacks(struct list_head *cb_list)
{
	struct vtimer_queue *vq;
	struct vtimer_list *event, *tmp;
	if (list_empty(cb_list))
		return;
	vq = &__get_cpu_var(virt_cpu_timer);
	list_for_each_entry_safe(event, tmp, cb_list, entry) {
		list_del_init(&event->entry);
		(event->function)(event->data);
		if (event->interval) {
			event->expires = event->interval + vq->elapsed;
			spin_lock(&vq->lock);
			list_add_sorted(event, &vq->list);
			spin_unlock(&vq->lock);
		}
	}
}