static void yield_task_dummy(struct rq *rq) { dequeue_task_dummy(rq, rq->curr, rq->curr->flags); enqueue_task_dummy(rq, rq->curr, rq->curr->flags); printk(KERN_CRIT "yield: %d\n",rq->curr->pid); // resched_task ? No // recover old priority ? }
static void check_preempt_curr_dummy(struct rq *rq, struct task_struct *p, int flags) { /* Here two cases are handled: * - if a process of higher priority becomes runnable; and * - if a process of the same priority as the running process becomes runnable * in which case the running process is preempted only if it has already * exceeded its round robin quantum. */ if (rq->curr->prio > p->prio) { resched_task(rq->curr); } else if (rq->curr->prio == p->prio) { if (p->dummy_se.rr_tick_count >= get_timeslice()) { dequeue_task_dummy(rq, rq->curr, 0); enqueue_task_dummy(rq, rq->curr, 0); resched_task(rq->curr); } } }
static void yield_task_dummy(struct rq *rq) { dequeue_task_dummy(rq, rq->curr, 0); enqueue_task_dummy(rq, rq->curr, 0); resched_task(rq->curr); }