From: George Anzinger <george@mvista.com>
To: fp38660@tux.appstate.edu
Cc: linux-kernel@vger.kernel.org
Subject: Re: How to schedule idle_task?
Date: Fri, 08 Aug 2003 15:13:31 -0700 [thread overview]
Message-ID: <3F34208B.3000908@mvista.com> (raw)
In-Reply-To: <3227.152.14.51.180.1060357468.squirrel@tux.appstate.edu>
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@mvista.com
High-res-timers: http://sourceforge.net/projects/high-res-timers/
Preemption patch: http://www.kernel.org/pub/linux/kernel/people/rml
prev parent reply other threads:[~2003-08-13 19:22 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-08-08 15:44 How to schedule idle_task? Feng Pan
2003-08-08 21:18 ` Herbert Pötzl
2003-08-08 22:13 ` George Anzinger [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3F34208B.3000908@mvista.com \
--to=george@mvista.com \
--cc=fp38660@tux.appstate.edu \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox