From patchwork Fri Feb 5 01:41:06 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bryan Wu X-Patchwork-Id: 44587 X-Patchwork-Delegate: apw@canonical.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from chlorine.canonical.com (chlorine.canonical.com [91.189.94.204]) by ozlabs.org (Postfix) with ESMTP id 7A065B7CBD for ; Fri, 5 Feb 2010 12:41:21 +1100 (EST) Received: from localhost ([127.0.0.1] helo=chlorine.canonical.com) by chlorine.canonical.com with esmtp (Exim 4.69) (envelope-from ) id 1NdDC9-0002uE-GM; Fri, 05 Feb 2010 01:41:17 +0000 Received: from adelie.canonical.com ([91.189.90.139]) by chlorine.canonical.com with esmtp (Exim 4.69) (envelope-from ) id 1NdDC7-0002tS-1J for kernel-team@lists.ubuntu.com; Fri, 05 Feb 2010 01:41:15 +0000 Received: from hutte.canonical.com ([91.189.90.181]) by adelie.canonical.com with esmtp (Exim 4.69 #1 (Debian)) id 1NdDC7-0003AX-03 for ; Fri, 05 Feb 2010 01:41:15 +0000 Received: from [199.223.125.189] (helo=canonical.com) by hutte.canonical.com with esmtpsa (TLS-1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.69) (envelope-from ) id 1NdDC6-0001oT-0a for kernel-team@lists.ubuntu.com; Fri, 05 Feb 2010 01:41:14 +0000 From: Bryan Wu To: kernel-team@lists.ubuntu.com Subject: [PATCH 2/2] async_populate_rootfs: move rootfs init earlier Date: Thu, 4 Feb 2010 17:41:06 -0800 Message-Id: <1265334066-15161-3-git-send-email-bryan.wu@canonical.com> X-Mailer: git-send-email 1.6.3.3 In-Reply-To: <1265334066-15161-1-git-send-email-bryan.wu@canonical.com> References: <1265334066-15161-1-git-send-email-bryan.wu@canonical.com> X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.9 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: kernel-team-bounces@lists.ubuntu.com Errors-To: kernel-team-bounces@lists.ubuntu.com From: Andy Whitcroft Check to see if the machine has more than one active CPU, if it does then it is worth starting the decode of the rootfs earlier. Signed-off-by: Andy Whitcroft [cherry-pick from a7baa7164fdf25b2819798ee2238a3cc7b4ada75 for backporting] Signed-off-by: Bryan Wu --- include/asm-generic/vmlinux.lds.h | 1 + include/linux/init.h | 1 + init/initramfs.c | 15 ++++++++++++++- 3 files changed, 16 insertions(+), 1 deletions(-) diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 6ad76bf..45e2d65 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -587,6 +587,7 @@ *(.initcall0s.init) \ *(.initcall1.init) \ *(.initcall1s.init) \ + *(.initcallearlyrootfs.init) \ *(.initcall2.init) \ *(.initcall2s.init) \ *(.initcall3.init) \ diff --git a/include/linux/init.h b/include/linux/init.h index 5a33056..33d7ac8 100644 --- a/include/linux/init.h +++ b/include/linux/init.h @@ -186,6 +186,7 @@ extern void (*late_time_init)(void); #define core_initcall(fn) __define_initcall("1",fn,1) #define core_initcall_sync(fn) __define_initcall("1s",fn,1s) +#define earlyrootfs_initcall(fn) __define_initcall("earlyrootfs",fn,rootfs) #define postcore_initcall(fn) __define_initcall("2",fn,2) #define postcore_initcall_sync(fn) __define_initcall("2s",fn,2s) #define arch_initcall(fn) __define_initcall("3",fn,3) diff --git a/init/initramfs.c b/init/initramfs.c index b8f9e3c..d9e6e81 100644 --- a/init/initramfs.c +++ b/init/initramfs.c @@ -609,9 +609,22 @@ static void __init async_populate_rootfs(void) return; } +static int __initdata rootfs_populated; + +static int __init populate_rootfs_early(void) +{ + if (num_online_cpus() > 1) { + rootfs_populated = 1; + async_schedule_domain(async_populate_rootfs, NULL, + &populate_rootfs_domain); + } +} static int __init populate_rootfs(void) { - async_schedule_domain(async_populate_rootfs, NULL, &populate_rootfs_domain); + if (!rootfs_populated) + async_schedule_domain(async_populate_rootfs, NULL, + &populate_rootfs_domain); } +earlyrootfs_initcall(populate_rootfs_early); rootfs_initcall(populate_rootfs);