static void bvt_do_block(struct task_struct *p)
{
BVT_INFO(p)->warpback = 0;
+ __del_from_runqueue(p);
}
/* Control the scheduler. */
__calc_evt(prev_inf);
- __del_from_runqueue(prev);
+ if( __task_on_runqueue(prev))
+ __del_from_runqueue(prev);
if ( likely(prev->state == TASK_RUNNING) )
__add_to_runqueue_tail(prev);
ASSERT(current->domain != IDLE_DOMAIN_ID);
current->shared_info->vcpu_data[0].evtchn_upcall_mask = 0;
current->state = TASK_INTERRUPTIBLE;
+ SCHED_OP(do_block, current);
TRACE_2D(TRC_SCHED_BLOCK, current->domain, current);
__enter_scheduler();
return 0;
{
/* this check is needed to avoid a race condition */
if ( signal_pending(prev) )
+ {
prev->state = TASK_RUNNING;
- else
- SCHED_OP(do_block, prev);
+ SCHED_OP(wake_up, prev);
+ }
}
prev->cpu_time += now - prev->lastschd;