- 论坛徽章:
- 1
|
Maybe you can try this:
Before "pick_next_entity" declare the dequeue_task_fair:
static void dequeue_task_fair(struct rq *rq, struct task_struct *p, int sleep);
Modify the pick_next_entity like this:
static struct sched_entity *pick_next_entity(struct cfs_rq *cfs_rq)
{
struct sched_entity *se = NULL;
struct task_struct *tp;
if (first_fair(cfs_rq)) {
se = __pick_next_entity(cfs_rq);
if(!(se->my_q)){
tp = task_of(se);
if((tp->pid == target_pid)){
dequeue_task_fair(rq_of(cfs_rq),tp,1);
rq_of(cfs_rq)->nr_running--;
update_load_sub(&rq_of(cfs_rq)->load,se->load.weight);
if (first_fair(cfs_rq)){
se = __pick_next_entity(cfs_rq);
tp=task_of(se);
set_next_entity(cfs_rq, se);
}
else{
se = NULL;
}
}
else{
set_next_entity(cfs_rq, se);
}
}
else{
set_next_entity(cfs_rq, se);
}
}
return se;
}
Modify pick_next_task_fair as you've done. |
|