From: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com>
To: tglx@linutronix.de, peterz@infradead.org, paulmck@linux.vnet.ibm.com
Cc: rusty@rustcorp.com.au, mingo@kernel.org, yong.zhang0@gmail.com,
akpm@linux-foundation.org, vatsa@linux.vnet.ibm.com, rjw@sisk.pl,
linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org,
srivatsa.bhat@linux.vnet.ibm.com, nikunj@linux.vnet.ibm.com,
Ralf Baechle <ralf@linux-mips.org>,
Andrew Morton <akpm@linux-foundation.org>,
Eric Dumazet <eric.dumazet@gmail.com>,
Mike Frysinger <vapier@gentoo.org>,
David Howells <dhowells@redhat.com>, Arun Sharma <asharma@fb.com>,
Thomas Gleixner <tglx@linutronix.de>,
Rusty Russell <rusty@rustcorp.com.au>,
linux-mips@linux-mips.org
Subject: [PATCH 10/27] mips, smpboot: Use generic SMP booting infrastructure
Date: Fri, 01 Jun 2012 14:42:32 +0530 [thread overview]
Message-ID: <20120601091226.31979.62223.stgit@srivatsabhat.in.ibm.com> (raw)
In-Reply-To: <20120601090952.31979.24799.stgit@srivatsabhat.in.ibm.com>
Convert mips to use the generic framework to boot secondary CPUs.
Notes:
1. The boot processor was setting the secondary cpu in cpu_online_mask!
Instead, leave it up to the secondary cpu (... and it will be done by the
generic code now).
2. Make the boot cpu wait for the secondary cpu to be set in cpu_online_mask
before returning.
3. Don't enable interrupts in cmp_smp_finish() and vsmp_smp_finish().
Do it much later, in generic code.
4. In synchronise_count_slave(), use local_save_flags() instead of
local_irq_save() because irqs are still disabled.
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Mike Frysinger <vapier@gentoo.org>
Cc: David Howells <dhowells@redhat.com>
Cc: Arun Sharma <asharma@fb.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: linux-mips@linux-mips.org
Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
---
arch/mips/kernel/smp-cmp.c | 8 ++++----
arch/mips/kernel/smp-mt.c | 2 --
arch/mips/kernel/smp.c | 23 +++++++++++++++--------
arch/mips/kernel/sync-r4k.c | 3 ++-
4 files changed, 21 insertions(+), 15 deletions(-)
diff --git a/arch/mips/kernel/smp-cmp.c b/arch/mips/kernel/smp-cmp.c
index e7e03ec..7ecd6db 100644
--- a/arch/mips/kernel/smp-cmp.c
+++ b/arch/mips/kernel/smp-cmp.c
@@ -108,7 +108,9 @@ static void cmp_init_secondary(void)
static void cmp_smp_finish(void)
{
- pr_debug("SMPCMP: CPU%d: %s\n", smp_processor_id(), __func__);
+ unsigned int cpu = smp_processor_id();
+
+ pr_debug("SMPCMP: CPU%d: %s\n", cpu, __func__);
/* CDFIXME: remove this? */
write_c0_compare(read_c0_count() + (8 * mips_hpt_frequency / HZ));
@@ -116,10 +118,8 @@ static void cmp_smp_finish(void)
#ifdef CONFIG_MIPS_MT_FPAFF
/* If we have an FPU, enroll ourselves in the FPU-full mask */
if (cpu_has_fpu)
- cpu_set(smp_processor_id(), mt_fpu_cpumask);
+ cpumask_set_cpu(cpu, &mt_fpu_cpumask);
#endif /* CONFIG_MIPS_MT_FPAFF */
-
- local_irq_enable();
}
static void cmp_cpus_done(void)
diff --git a/arch/mips/kernel/smp-mt.c b/arch/mips/kernel/smp-mt.c
index ff17868..25f7b09 100644
--- a/arch/mips/kernel/smp-mt.c
+++ b/arch/mips/kernel/smp-mt.c
@@ -171,8 +171,6 @@ static void __cpuinit vsmp_smp_finish(void)
if (cpu_has_fpu)
cpu_set(smp_processor_id(), mt_fpu_cpumask);
#endif /* CONFIG_MIPS_MT_FPAFF */
-
- local_irq_enable();
}
static void vsmp_cpus_done(void)
diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c
index 71a95f5..4453d4d 100644
--- a/arch/mips/kernel/smp.c
+++ b/arch/mips/kernel/smp.c
@@ -33,6 +33,7 @@
#include <linux/cpu.h>
#include <linux/err.h>
#include <linux/ftrace.h>
+#include <linux/smpboot.h>
#include <linux/atomic.h>
#include <asm/cpu.h>
@@ -98,8 +99,11 @@ __cpuinit void register_smp_ops(struct plat_smp_ops *ops)
*/
asmlinkage __cpuinit void start_secondary(void)
{
- unsigned int cpu;
+ smpboot_start_secondary(NULL);
+}
+void __cpuinit __cpu_pre_starting(void *unused)
+{
#ifdef CONFIG_MIPS_MT_SMTC
/* Only do cpu_probe for first TC of CPU */
if ((read_c0_tcbind() & TCBIND_CURTC) == 0)
@@ -116,20 +120,22 @@ asmlinkage __cpuinit void start_secondary(void)
*/
calibrate_delay();
- preempt_disable();
- cpu = smp_processor_id();
- cpu_data[cpu].udelay_val = loops_per_jiffy;
+ cpu_data[smp_processor_id()].udelay_val = loops_per_jiffy;
+}
- notify_cpu_starting(cpu);
+void __cpuinit __cpu_pre_online(void *unused)
+{
+ unsigned int cpu = smp_processor_id();
mp_ops->smp_finish();
set_cpu_sibling_map(cpu);
cpu_set(cpu, cpu_callin_map);
+}
+void __cpuinit __cpu_post_online(void *unused)
+{
synchronise_count_slave();
-
- cpu_idle();
}
/*
@@ -196,7 +202,8 @@ int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
while (!cpu_isset(cpu, cpu_callin_map))
udelay(100);
- set_cpu_online(cpu, true);
+ while (!cpu_online(cpu))
+ udelay(100);
return 0;
}
diff --git a/arch/mips/kernel/sync-r4k.c b/arch/mips/kernel/sync-r4k.c
index 99f913c..7f43069 100644
--- a/arch/mips/kernel/sync-r4k.c
+++ b/arch/mips/kernel/sync-r4k.c
@@ -46,7 +46,8 @@ void __cpuinit synchronise_count_master(void)
printk(KERN_INFO "Synchronize counters across %u CPUs: ",
num_online_cpus());
- local_irq_save(flags);
+ /* IRQs are already disabled. So just save the flags */
+ local_save_flags(flags);
/*
* Notify the slaves that it's time to start
next prev parent reply other threads:[~2012-06-01 9:13 UTC|newest]
Thread overview: 91+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-01 9:10 [PATCH 00/27] Generic framework for SMP booting/CPU hotplug related code Srivatsa S. Bhat
2012-06-01 9:10 ` [PATCH 01/27] smpboot: Provide a generic method to boot secondary processors Srivatsa S. Bhat
2012-06-01 12:09 ` Srivatsa S. Bhat
2012-06-03 8:51 ` Yong Zhang
2012-06-03 11:22 ` Srivatsa S. Bhat
2012-06-04 2:18 ` Yong Zhang
2012-06-03 8:53 ` Yong Zhang
2012-06-03 11:33 ` Srivatsa S. Bhat
2012-06-03 11:39 ` Russell King - ARM Linux
2012-06-03 12:05 ` Srivatsa S. Bhat
2012-06-01 16:51 ` Sam Ravnborg
2012-06-01 22:29 ` Srivatsa S. Bhat
2012-06-04 10:32 ` Thomas Gleixner
2012-06-04 13:07 ` Srivatsa S. Bhat
2012-06-04 13:18 ` Thomas Gleixner
2012-06-04 16:53 ` Srivatsa S. Bhat
2012-06-05 5:11 ` Yong Zhang
2012-06-05 6:07 ` Srivatsa S. Bhat
2012-06-01 16:53 ` Sam Ravnborg
2012-06-01 22:41 ` Srivatsa S. Bhat
2012-06-02 15:16 ` Sam Ravnborg
2012-06-02 15:34 ` Srivatsa S. Bhat
2012-06-01 9:10 ` [PATCH 02/27] smpboot: Add provisions for arch-specific locking around cpu_online_mask Srivatsa S. Bhat
2012-06-01 12:12 ` Srivatsa S. Bhat
2012-06-01 9:11 ` [PATCH 04/27] smpboot, x86, xen: Determine smp booting implementations at run-time Srivatsa S. Bhat
2012-06-01 9:11 ` [PATCH 05/27] xen, cpu hotplug: Don't call cpu_bringup() in xen_play_dead() Srivatsa S. Bhat
2012-06-01 12:59 ` [Xen-devel] " Jan Beulich
2012-06-01 15:13 ` Srivatsa S. Bhat
2012-06-01 15:36 ` Jan Beulich
2012-06-02 18:06 ` Srivatsa S. Bhat
2012-06-05 16:49 ` Konrad Rzeszutek Wilk
2012-06-05 17:36 ` Srivatsa S. Bhat
2012-06-05 17:40 ` Thomas Gleixner
2012-06-05 17:48 ` Srivatsa S. Bhat
2012-06-01 9:11 ` [PATCH 06/27] xen, smpboot: Use generic SMP booting infrastructure Srivatsa S. Bhat
2012-06-01 9:11 ` [PATCH 07/27] x86, " Srivatsa S. Bhat
2012-06-04 14:29 ` Thomas Gleixner
2012-06-04 17:00 ` Srivatsa S. Bhat
2012-06-01 9:12 ` [PATCH 08/27] m32r: Fix horrible logic in smp_prepare_cpus() Srivatsa S. Bhat
2012-06-01 9:12 ` [PATCH 09/27] m32r, smpboot: Use generic SMP booting infrastructure Srivatsa S. Bhat
2012-06-01 9:12 ` Srivatsa S. Bhat [this message]
2012-06-03 8:25 ` [PATCH 10/27] mips, " Yong Zhang
2012-06-03 11:48 ` Srivatsa S. Bhat
2012-06-04 2:17 ` Yong Zhang
2012-06-01 9:12 ` [PATCH 11/27] sh, " Srivatsa S. Bhat
2012-06-01 9:12 ` [PATCH 12/27] tile, " Srivatsa S. Bhat
2012-06-01 18:07 ` Chris Metcalf
2012-06-01 9:13 ` [PATCH 13/27] hexagon, " Srivatsa S. Bhat
2012-06-01 9:13 ` [PATCH 14/27] ia64: Move holding of vector_lock to __setup_vector_irq() Srivatsa S. Bhat
2012-06-01 9:13 ` [PATCH 15/27] ia64, smpboot: Use generic SMP booting infrastructure Srivatsa S. Bhat
2012-06-01 9:13 ` [PATCH 16/27] mn10300: Fix horrible logic in smp_prepare_cpus() Srivatsa S. Bhat
2012-06-01 9:14 ` [PATCH 17/27] mn10300, smpboot: Use generic SMP booting infrastructure Srivatsa S. Bhat
2012-06-03 8:33 ` Yong Zhang
2012-06-03 11:50 ` Srivatsa S. Bhat
2012-06-01 9:14 ` [PATCH 18/27] powerpc, " Srivatsa S. Bhat
2012-06-02 6:14 ` Paul Mackerras
2012-06-01 9:14 ` [PATCH 19/27] blackfin, " Srivatsa S. Bhat
2012-06-01 9:14 ` [PATCH 20/27] sparc64, " Srivatsa S. Bhat
2012-06-01 17:55 ` David Miller
2012-06-01 22:44 ` [UPDATED PATCH " Srivatsa S. Bhat
2012-06-01 22:52 ` David Miller
2012-06-01 9:15 ` [PATCH 21/27] sparc32, " Srivatsa S. Bhat
2012-06-01 17:56 ` David Miller
2012-06-01 18:54 ` Sam Ravnborg
2012-06-01 22:47 ` [UPDATED PATCH " Srivatsa S. Bhat
2012-06-01 22:53 ` David Miller
2012-06-01 23:17 ` Srivatsa S. Bhat
2012-06-02 6:52 ` Sam Ravnborg
2012-06-02 7:44 ` Sam Ravnborg
2012-06-02 8:01 ` Srivatsa S. Bhat
2012-06-02 8:14 ` Srivatsa S. Bhat
2012-06-02 15:13 ` Sam Ravnborg
2012-06-02 15:58 ` Srivatsa S. Bhat
2012-06-02 16:23 ` Sam Ravnborg
2012-06-02 16:34 ` Srivatsa S. Bhat
2012-06-03 21:17 ` [PATCH] sparc32: refactor smp boot Sam Ravnborg
2012-06-04 1:04 ` David Miller
2012-06-04 6:48 ` Srivatsa S. Bhat
2012-06-01 9:15 ` [PATCH 22/27] um, smpboot: Use generic SMP booting infrastructure Srivatsa S. Bhat
2012-06-01 9:15 ` [PATCH 23/27] cris, " Srivatsa S. Bhat
2012-06-03 8:41 ` Yong Zhang
2012-06-03 11:52 ` Srivatsa S. Bhat
2012-06-01 9:15 ` [PATCH 24/27] parisc, " Srivatsa S. Bhat
2012-06-01 9:16 ` [PATCH 25/27] s390, " Srivatsa S. Bhat
2012-06-01 10:45 ` Heiko Carstens
2012-06-01 9:16 ` [PATCH 26/27] arm, " Srivatsa S. Bhat
2012-06-01 11:04 ` Russell King - ARM Linux
2012-06-01 9:16 ` [PATCH 27/27] alpha, " Srivatsa S. Bhat
[not found] ` <20120601091038.31979.67878.stgit@srivatsabhat.in.ibm.com>
2012-06-01 12:19 ` [PATCH 03/27] smpboot: Define and use cpu_state per-cpu variable in generic code Srivatsa S. Bhat
2012-06-01 12:25 ` Russell King - ARM Linux
2012-06-01 12:55 ` Srivatsa S. Bhat
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=20120601091226.31979.62223.stgit@srivatsabhat.in.ibm.com \
--to=srivatsa.bhat@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=asharma@fb.com \
--cc=dhowells@redhat.com \
--cc=eric.dumazet@gmail.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@linux-mips.org \
--cc=mingo@kernel.org \
--cc=nikunj@linux.vnet.ibm.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=ralf@linux-mips.org \
--cc=rjw@sisk.pl \
--cc=rusty@rustcorp.com.au \
--cc=tglx@linutronix.de \
--cc=vapier@gentoo.org \
--cc=vatsa@linux.vnet.ibm.com \
--cc=yong.zhang0@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).