Re: How to schedule idle_task?

From: Herbert Pötzl
Date: Fri Aug 08 2003 - 16:22:45 EST


On Fri, Aug 08, 2003 at 11:44:28AM -0400, 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.

hmm, why not simply _not_scheduling_ the tasks you do
not want to be scheduled? (sounds weird?)

in the scheduler, you basically decide which task
is the chosen one, if you decide to exclude some tasks
from that decision, they will not run (be scheduled)

HTH,
Herbert

> 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?
>
> btw, the kernel version is 2.4.21
>
> Thanks
>
> Feng
>
>
> -
> 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/
-
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/