linux-mips
[Top] [All Lists]

Re: [PATCH] MIPS: move idle task creation to work queue

To: maksim.rayskiy@gmail.com
Subject: Re: [PATCH] MIPS: move idle task creation to work queue
From: Sergei Shtylyov <sshtylyov@mvista.com>
Date: Sat, 12 Feb 2011 16:51:00 +0300
Cc: ralf@linux-mips.org, linux-mips@linux-mips.org, Maksim Rayskiy <mrayskiy@broadcom.com>
In-reply-to: <1297480946-28053-1-git-send-email-maksim.rayskiy@gmail.com>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <1297480946-28053-1-git-send-email-maksim.rayskiy@gmail.com>
Sender: linux-mips-bounce@linux-mips.org
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.2.13) Gecko/20101207 Thunderbird/3.1.7
Hello.

On 12-02-2011 6:22, maksim.rayskiy@gmail.com wrote:

From: Maksim Rayskiy <mrayskiy@broadcom.com>

To avoid forking usertask when creating an idle task, move fork_idle
to a work queue.
This is a small improvement to previous commit 467f0b8.

   Linus akss to also specify the commit summary in parens.

Signed-off-by: Maksim Rayskiy <mrayskiy@broadcom.com>
[...]

diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c
index 4593916..98bd504 100644
--- a/arch/mips/kernel/smp.c
+++ b/arch/mips/kernel/smp.c
@@ -193,6 +193,21 @@ void __devinit smp_prepare_boot_cpu(void)
   */
  static struct task_struct *cpu_idle_thread[NR_CPUS];

+struct create_idle {
+       struct work_struct work;
+       struct task_struct *idle;
+       struct completion done;
+       int cpu;
+};
+
+static void __cpuinit do_fork_idle(struct work_struct *work)
+{
+       struct create_idle *c_idle =
+               container_of(work, struct create_idle, work);

    Empty line wouldn't hurt here...

+       c_idle->idle = fork_idle(c_idle->cpu);
+       complete(&c_idle->done);
+}
+
  int __cpuinit __cpu_up(unsigned int cpu)
  {
        struct task_struct *idle;
@@ -203,16 +218,21 @@ int __cpuinit __cpu_up(unsigned int cpu)
         * Linux can schedule processes on this slave.
         */
        if (!cpu_idle_thread[cpu]) {
-               idle = fork_idle(cpu);
-               cpu_idle_thread[cpu] = idle;
+               /* Schedule work item to avoid forking user task.
+                  Ported from x86 */

  The preferred style of multi-line comments is this:

/*
 * bla
 * bla
 */

WBR, Sergei

<Prev in Thread] Current Thread [Next in Thread>