From: Ingo Molnar <mingo@elte.hu>
To: Andrew Morton <akpm@osdl.org>
Cc: nickpiggin@yahoo.com.au, linux-kernel@vger.kernel.org
Subject: Re: [patch] remove set_tsk_need_resched() from init_idle()
Date: Wed, 25 May 2005 15:51:30 +0200 [thread overview]
Message-ID: <20050525135130.GA27088@elte.hu> (raw)
In-Reply-To: <20050525052400.46bccf26.akpm@osdl.org>
* Andrew Morton <akpm@osdl.org> wrote:
> > --- linux/arch/x86_64/kernel/process.c.orig
> > +++ linux/arch/x86_64/kernel/process.c
> > @@ -162,6 +162,8 @@ EXPORT_SYMBOL_GPL(cpu_idle_wait);
> > */
> > void cpu_idle (void)
> > {
> > + set_tsk_need_resched(current);
> > +
> > /* endless idle loop with no priority at all */
> > while (1) {
> > while (!need_resched()) {
>
> ia64 needed this treatment also to fix a hang during boot. u o me 3 hrs.
>
> Are all the other architectures busted as well?
oh damn, they are indeed, because they need to hit schedule() at least
once.
The patch below should address this problem for all architectures, by
doing an explicit schedule() in the init code before calling into
cpu_idle(). It's a replacement for the following patch:
sched-remove-set_tsk_need_resched-from-init_idle.patch
Ingo
--
This patch tweaks idle thread setup semantics a bit: instead of setting
NEED_RESCHED in init_idle(), we do an explicit schedule() before
calling into cpu_idle().
This patch, while having no negative side-effects, enables wider use of
cond_resched()s. (which might happen in the stock kernel too, but it's
particulary important for voluntary-preempt)
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Acked-by: Nick Piggin <nickpiggin@yahoo.com.au>
Signed-off-by: Andrew Morton <akpm@osdl.org>
--- linux/kernel/sched.c.orig
+++ linux/kernel/sched.c
@@ -4163,6 +4163,14 @@ void show_state(void)
read_unlock(&tasklist_lock);
}
+/**
+ * init_idle - set up an idle thread for a given CPU
+ * @idle: task in question
+ * @cpu: cpu the idle task belongs to
+ *
+ * NOTE: this function does not set the idle thread's NEED_RESCHED
+ * flag, to make booting more robust.
+ */
void __devinit init_idle(task_t *idle, int cpu)
{
runqueue_t *rq = cpu_rq(cpu);
@@ -4180,7 +4188,6 @@ void __devinit init_idle(task_t *idle, i
#if defined(CONFIG_SMP) && defined(__ARCH_WANT_UNLOCKED_CTXSW)
idle->oncpu = 1;
#endif
- set_tsk_need_resched(idle);
spin_unlock_irqrestore(&rq->lock, flags);
/* Set the preempt count _outside_ the spinlocks! */
--- linux/init/main.c.orig
+++ linux/init/main.c
@@ -383,6 +383,13 @@ static void noinline rest_init(void)
numa_default_policy();
unlock_kernel();
preempt_enable_no_resched();
+
+ /*
+ * The boot idle thread must execute schedule()
+ * at least one to get things moving:
+ */
+ schedule();
+
cpu_idle();
}
next prev parent reply other threads:[~2005-05-25 13:54 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-05-24 12:15 Ingo Molnar
2005-05-24 13:21 ` [patch] Voluntary Kernel Preemption, 2.6.12-rc4-mm2 Ingo Molnar
2005-05-24 14:56 ` Christoph Hellwig
2005-05-24 15:09 ` Ingo Molnar
2005-05-24 15:21 ` Nick Piggin
2005-05-24 15:33 ` Arjan van de Ven
2005-05-24 15:34 ` Nick Piggin
2005-05-24 15:39 ` Ingo Molnar
2005-05-24 15:59 ` Nick Piggin
2005-05-24 16:11 ` Ingo Molnar
2005-05-25 19:48 ` Christoph Hellwig
2005-05-24 14:06 ` [patch] remove set_tsk_need_resched() from init_idle() Ingo Molnar
2005-05-24 15:02 ` Nick Piggin
2005-05-24 15:05 ` Ingo Molnar
2005-05-24 15:24 ` Nick Piggin
2005-05-24 15:27 ` Ingo Molnar
2005-05-24 15:42 ` Ingo Molnar
2005-05-24 16:00 ` Nick Piggin
2005-05-25 12:24 ` Andrew Morton
2005-05-25 13:51 ` Ingo Molnar [this message]
2005-05-25 13:58 ` Ingo Molnar
2005-05-28 16:32 ` Russell King
2005-05-28 18:51 ` Ingo Molnar
2005-05-29 4:05 ` Nick Piggin
2005-05-29 6:01 ` Ingo Molnar
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=20050525135130.GA27088@elte.hu \
--to=mingo@elte.hu \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nickpiggin@yahoo.com.au \
/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
all inboxes | Powered by JetHome®