Re: How to schedule idle_task?

From: George Anzinger
Date: Wed Aug 13 2003 - 14:27:34 EST


Feng Pan wrote:
Hi,

I am trying to force idle_task in schedule() but could not get it to work.
Here is my requirement: I would like the scheduler to prevent any task
with low priority (meaning lower than a cutoff point) from being scheduled
to run, even if there are no high priority tasks running (when this
happens, idle_task should be scheduled to run). They (the low priority
tasks) have to wait until their dynamic priorities boosted to be able to
run.

So here is what I added to schedule():

/*
* Default process to select..
*/
next = idle_task(this_cpu);
c = -1000;
list_for_each(tmp, &runqueue_head) {
p = list_entry(tmp, struct task_struct, run_list);
if (can_schedule(p, this_cpu)) {
int weight = goodness(p, this_cpu, prev->active_mm);
if (weight > c)
c = weight, next = p;
}
}


// This is what I added:

if((c > 2) && (c < CUTOFF_PRIORITY)) {
//printk("LOW PRIORITY PROCESS (%d)\n", c);
next = idle_task(this_cpu);
}


// End

/* Do we need to re-calculate counters? */
if (unlikely(!c))
...
...
...


The problem is that once the idle_task is forced to run, no other tasks
can be scheduled again, and the system hangs, even if there is another
high priority task running. And if I uncomment the printk statement, the
message is printed repeatly.

So the question is, how do I do this properly so that high priority tasks
can still run?

Not to endorse what you are doing, but, the recalc will not be done until all the current times expire and you have put a floor on them ever expiring so the recalc will never be done...

SCHED_SPORADIC is not that simple.. :)


--
George Anzinger george@xxxxxxxxxx
High-res-timers: http://sourceforge.net/projects/high-res-timers/
Preemption patch: http://www.kernel.org/pub/linux/kernel/people/rml

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/