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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.