void vmm_scheduler_timer_event(vmm_timer_event_t * ev) { vmm_vcpu_t * vcpu = sched.current_vcpu; if (vcpu) { if (!vcpu->preempt_count) { vmm_scheduler_next(ev, ev->cpu_regs); } else { vmm_timer_event_restart(ev); } } else { vmm_scheduler_next(ev, ev->cpu_regs); } }
static void vmm_scheduler_switch(struct vmm_scheduler_ctrl *schedp, arch_regs_t *regs) { struct vmm_vcpu *vcpu = schedp->current_vcpu; if (!regs) { /* This should never happen !!! */ vmm_panic("%s: null pointer to regs.\n", __func__); } if (vcpu) { if (!vcpu->preempt_count) { vmm_scheduler_next(schedp, &schedp->ev, regs); } else { vmm_timer_event_restart(&schedp->ev); } } else { vmm_scheduler_next(schedp, &schedp->ev, regs); } }