From: Ashok Raj <ashok.raj@intel.com>
To: Srivatsa Vaddagiri <vatsa@in.ibm.com>
Cc: Andrew Morton <akpm@osdl.org>,
torvalds@osdl.org, linux-kernel@vger.kernel.org, "Li,
Shaohua" <shaohua.li@intel.com>,
bryce@osdl.org
Subject: Re: [PATCH] Check for online cpus before bringing them up
Date: Fri, 17 Mar 2006 04:21:54 -0800 [thread overview]
Message-ID: <20060317042154.A13530@unix-os.sc.intel.com> (raw)
In-Reply-To: <20060317084653.GA4515@in.ibm.com>; from vatsa@in.ibm.com on Fri, Mar 17, 2006 at 12:46:53AM -0800
On Fri, Mar 17, 2006 at 12:46:53AM -0800, Srivatsa Vaddagiri wrote:
>
>
> Well ..other arch-es need to have a similar check if they get around
> to
> implement physical hot-add (even if they allow offlining of all CPUs).
>
This is really not for physical hotplug, but due to fact i386 startup code wasnt clean
enough. On x86_64 Andi cleaned this up and we dont need those hacks on x86_64.
> + if (cpu_online(cpu)) {
Should we add !cpu_present(cpu) check as well just to be consistent with checks
in cpu_up() ? Probably better if we can move smp_prepare_cpu() to within cpu_up()?
How does the attached patch look.
Check if cpu can be onlined before calling smp_prepare_cpu()
- Moved check for online cpu out of smp_prepare_cpu()
- Moved default declaration of smp_prepare_cpu() to kernel/cpu.c
- Removed lock_cpu_hotplug() from smp_prepare_cpu() to around it, since
its called from cpu_up() as well now.
Signed-off-by: Ashok Raj <ashok.raj@intel.com>
--------------------------------------------------------
arch/i386/kernel/smpboot.c | 2 --
drivers/base/cpu.c | 9 +--------
kernel/cpu.c | 9 +++++++++
kernel/power/smp.c | 2 ++
4 files changed, 12 insertions(+), 10 deletions(-)
Index: linux-2.6.16-rc6-mm1/arch/i386/kernel/smpboot.c
===================================================================
--- linux-2.6.16-rc6-mm1.orig/arch/i386/kernel/smpboot.c
+++ linux-2.6.16-rc6-mm1/arch/i386/kernel/smpboot.c
@@ -1028,7 +1028,6 @@ int __devinit smp_prepare_cpu(int cpu)
struct work_struct task;
int apicid, ret;
- lock_cpu_hotplug();
apicid = x86_cpu_to_apicid[cpu];
if (apicid == BAD_APICID) {
ret = -ENODEV;
@@ -1053,7 +1052,6 @@ int __devinit smp_prepare_cpu(int cpu)
zap_low_mappings();
ret = 0;
exit:
- unlock_cpu_hotplug();
return ret;
}
#endif
Index: linux-2.6.16-rc6-mm1/drivers/base/cpu.c
===================================================================
--- linux-2.6.16-rc6-mm1.orig/drivers/base/cpu.c
+++ linux-2.6.16-rc6-mm1/drivers/base/cpu.c
@@ -19,11 +19,6 @@ EXPORT_SYMBOL(cpu_sysdev_class);
static struct sys_device *cpu_sys_devices[NR_CPUS];
#ifdef CONFIG_HOTPLUG_CPU
-int __attribute__((weak)) smp_prepare_cpu (int cpu)
-{
- return 0;
-}
-
static ssize_t show_online(struct sys_device *dev, char *buf)
{
struct cpu *cpu = container_of(dev, struct cpu, sysdev);
@@ -44,9 +39,7 @@ static ssize_t store_online(struct sys_d
kobject_uevent(&dev->kobj, KOBJ_OFFLINE);
break;
case '1':
- ret = smp_prepare_cpu(cpu->sysdev.id);
- if (!ret)
- ret = cpu_up(cpu->sysdev.id);
+ ret = cpu_up(cpu->sysdev.id);
if (!ret)
kobject_uevent(&dev->kobj, KOBJ_ONLINE);
break;
Index: linux-2.6.16-rc6-mm1/kernel/cpu.c
===================================================================
--- linux-2.6.16-rc6-mm1.orig/kernel/cpu.c
+++ linux-2.6.16-rc6-mm1/kernel/cpu.c
@@ -198,6 +198,11 @@ out:
}
#endif /*CONFIG_HOTPLUG_CPU*/
+int __attribute__((weak)) smp_prepare_cpu (int cpu)
+{
+ return 0;
+}
+
int __devinit cpu_up(unsigned int cpu)
{
int ret;
@@ -211,6 +216,10 @@ int __devinit cpu_up(unsigned int cpu)
goto out;
}
+ ret = smp_prepare_cpu(cpu);
+ if (ret)
+ goto out;
+
ret = notifier_call_chain(&cpu_chain, CPU_UP_PREPARE, hcpu);
if (ret == NOTIFY_BAD) {
printk("%s: attempt to bring up CPU %u failed\n",
Index: linux-2.6.16-rc6-mm1/kernel/power/smp.c
===================================================================
--- linux-2.6.16-rc6-mm1.orig/kernel/power/smp.c
+++ linux-2.6.16-rc6-mm1/kernel/power/smp.c
@@ -49,7 +49,9 @@ void enable_nonboot_cpus(void)
printk("Thawing cpus ...\n");
for_each_cpu_mask(cpu, frozen_cpus) {
+ lock_cpu_hotplug();
error = smp_prepare_cpu(cpu);
+ unlock_cpu_hotplug();
if (!error)
error = cpu_up(cpu);
if (!error) {
next prev parent reply other threads:[~2006-03-17 12:22 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-03-16 17:44 [PATCH] Check for online cpus before bringing them up Srivatsa Vaddagiri
2006-03-17 1:08 ` Andrew Morton
2006-03-17 1:16 ` Shaohua Li
2006-03-17 8:46 ` Srivatsa Vaddagiri
2006-03-17 9:04 ` Andrew Morton
2006-03-17 14:13 ` Srivatsa Vaddagiri
2006-03-18 14:09 ` Ashok Raj
2006-03-21 1:08 ` Shaohua Li
2006-03-21 1:25 ` Ashok Raj
2006-03-21 1:36 ` Shaohua Li
2006-10-06 23:10 ` Status on CPU hotplug issues Bryce Harrington
2006-10-06 23:29 ` Andrew Morton
2006-10-07 0:00 ` Bryce Harrington
2006-10-07 10:35 ` Pavel Machek
2006-10-07 20:42 ` Bryce Harrington
2006-10-08 18:29 ` Heiko Carstens
2006-10-08 19:14 ` Pavel Machek
2006-10-11 1:08 ` [BUG] 2.6.19-rc1-mm1: fs/file.c138 on ia64 Bryce Harrington
2006-10-11 1:15 ` Andrew Morton
2006-10-11 5:38 ` Bryce Harrington
2006-10-07 10:24 ` Status on CPU hotplug issues Pavel Machek
2006-10-07 20:25 ` Bryce Harrington
2006-10-08 19:13 ` Pavel Machek
2006-10-09 7:42 ` Bryce Harrington
2006-10-07 21:57 ` Pavel Machek
2006-10-09 21:40 ` Randy Dunlap
2006-10-23 22:26 ` Bryce Harrington
2006-11-08 5:35 ` Randy Dunlap
2006-11-08 5:52 ` Bryce Harrington
2006-03-17 12:21 ` Ashok Raj [this message]
2006-03-17 13:59 ` [PATCH] Check for online cpus before bringing them up Srivatsa Vaddagiri
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=20060317042154.A13530@unix-os.sc.intel.com \
--to=ashok.raj@intel.com \
--cc=akpm@osdl.org \
--cc=bryce@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=shaohua.li@intel.com \
--cc=torvalds@osdl.org \
--cc=vatsa@in.ibm.com \
/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.