Messages in this thread | | | Date | Fri, 8 Aug 2003 11:44:28 -0400 (EDT) | Subject | How to schedule idle_task? | From | "Feng Pan" <> |
| |
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?
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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |