* [PATCH 03/27] smpboot: Define and use cpu_state per-cpu variable in generic code [not found] <20120601090952.31979.24799.stgit@srivatsabhat.in.ibm.com> @ 2012-06-01 9:10 ` Srivatsa S. Bhat 2012-06-01 9:10 ` Srivatsa S. Bhat 2012-06-01 16:59 ` David Daney 2012-06-01 9:12 ` [PATCH 10/27] mips, smpboot: Use generic SMP booting infrastructure Srivatsa S. Bhat 1 sibling, 2 replies; 8+ messages in thread From: Srivatsa S. Bhat @ 2012-06-01 9:10 UTC (permalink / raw) To: tglx, peterz, paulmck Cc: rusty, mingo, yong.zhang0, akpm, vatsa, rjw, linux-arch, linux-kernel, srivatsa.bhat, nikunj, Tony Luck, Fenghua Yu, Ralf Baechle, Benjamin Herrenschmidt, Paul Mundt, Chris Metcalf, Thomas Gleixner, Ingo Molnar, H. Peter Anvin, x86, Konrad Rzeszutek Wilk, Jeremy Fitzhardinge, Peter Zijlstra, Andrew Morton, Mike Frysinger, Yong Zhang, Venkatesh Pallipadi, Suresh Siddha, linux-ia64, linux-mips, linuxppc-dev, linux-sh, xen-devel, virtualization The per-cpu variable cpu_state is used in x86 and also used in other architectures, to track the state of the cpu during bringup and hotplug. Pull it out into generic code. Cc: Tony Luck <tony.luck@intel.com> Cc: Fenghua Yu <fenghua.yu@intel.com> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mundt <lethal@linux-sh.org> Cc: Chris Metcalf <cmetcalf@tilera.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@redhat.com> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: x86@kernel.org Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Cc: Jeremy Fitzhardinge <jeremy@goop.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Mike Frysinger <vapier@gentoo.org> Cc: Yong Zhang <yong.zhang0@gmail.com> Cc: Venkatesh Pallipadi <venki@google.com> Cc: Suresh Siddha <suresh.b.siddha@intel.com> Cc: linux-ia64@vger.kernel.org Cc: linux-mips@linux-mips.org Cc: linuxppc-dev@lists.ozlabs.org Cc: linux-sh@vger.kernel.org Cc: xen-devel@lists.xensource.com Cc: virtualization@lists.linux-foundation.org Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com> --- arch/ia64/include/asm/cpu.h | 2 -- arch/ia64/kernel/process.c | 1 + arch/ia64/kernel/smpboot.c | 6 +----- arch/mips/cavium-octeon/smp.c | 4 +--- arch/powerpc/kernel/smp.c | 6 +----- arch/sh/include/asm/smp.h | 2 -- arch/sh/kernel/smp.c | 4 +--- arch/tile/kernel/smpboot.c | 4 +--- arch/x86/include/asm/cpu.h | 2 -- arch/x86/kernel/smpboot.c | 4 +--- arch/x86/xen/smp.c | 1 + include/linux/smpboot.h | 1 + kernel/smpboot.c | 4 ++++ 13 files changed, 13 insertions(+), 28 deletions(-) diff --git a/arch/ia64/include/asm/cpu.h b/arch/ia64/include/asm/cpu.h index fcca30b..1c3acac 100644 --- a/arch/ia64/include/asm/cpu.h +++ b/arch/ia64/include/asm/cpu.h @@ -12,8 +12,6 @@ struct ia64_cpu { DECLARE_PER_CPU(struct ia64_cpu, cpu_devices); -DECLARE_PER_CPU(int, cpu_state); - #ifdef CONFIG_HOTPLUG_CPU extern int arch_register_cpu(int num); extern void arch_unregister_cpu(int); diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c index 5e0e86d..32566c7 100644 --- a/arch/ia64/kernel/process.c +++ b/arch/ia64/kernel/process.c @@ -29,6 +29,7 @@ #include <linux/kdebug.h> #include <linux/utsname.h> #include <linux/tracehook.h> +#include <linux/smpboot.h> #include <asm/cpu.h> #include <asm/delay.h> diff --git a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c index 963d2db..df00a3c 100644 --- a/arch/ia64/kernel/smpboot.c +++ b/arch/ia64/kernel/smpboot.c @@ -39,6 +39,7 @@ #include <linux/efi.h> #include <linux/percpu.h> #include <linux/bitops.h> +#include <linux/smpboot.h> #include <linux/atomic.h> #include <asm/cache.h> @@ -111,11 +112,6 @@ extern unsigned long ia64_iobase; struct task_struct *task_for_booting_cpu; -/* - * State for each CPU - */ -DEFINE_PER_CPU(int, cpu_state); - cpumask_t cpu_core_map[NR_CPUS] __cacheline_aligned; EXPORT_SYMBOL(cpu_core_map); DEFINE_PER_CPU_SHARED_ALIGNED(cpumask_t, cpu_sibling_map); diff --git a/arch/mips/cavium-octeon/smp.c b/arch/mips/cavium-octeon/smp.c index 97e7ce9..93cd4b0 100644 --- a/arch/mips/cavium-octeon/smp.c +++ b/arch/mips/cavium-octeon/smp.c @@ -13,6 +13,7 @@ #include <linux/kernel_stat.h> #include <linux/sched.h> #include <linux/module.h> +#include <linux/smpboot.h> #include <asm/mmu_context.h> #include <asm/time.h> @@ -252,9 +253,6 @@ static void octeon_cpus_done(void) #ifdef CONFIG_HOTPLUG_CPU -/* State of each CPU. */ -DEFINE_PER_CPU(int, cpu_state); - extern void fixup_irqs(void); static DEFINE_SPINLOCK(smp_reserve_lock); diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index e1417c4..1928058a 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c @@ -31,6 +31,7 @@ #include <linux/cpu.h> #include <linux/notifier.h> #include <linux/topology.h> +#include <linux/smpboot.h> #include <asm/ptrace.h> #include <linux/atomic.h> @@ -57,11 +58,6 @@ #define DBG(fmt...) #endif -#ifdef CONFIG_HOTPLUG_CPU -/* State of each CPU during hotplug phases */ -static DEFINE_PER_CPU(int, cpu_state) = { 0 }; -#endif - struct thread_info *secondary_ti; DEFINE_PER_CPU(cpumask_var_t, cpu_sibling_map); diff --git a/arch/sh/include/asm/smp.h b/arch/sh/include/asm/smp.h index 78b0d0f4..bda041e 100644 --- a/arch/sh/include/asm/smp.h +++ b/arch/sh/include/asm/smp.h @@ -31,8 +31,6 @@ enum { SMP_MSG_NR, /* must be last */ }; -DECLARE_PER_CPU(int, cpu_state); - void smp_message_recv(unsigned int msg); void smp_timer_broadcast(const struct cpumask *mask); diff --git a/arch/sh/kernel/smp.c b/arch/sh/kernel/smp.c index b86e9ca..8e0fde0 100644 --- a/arch/sh/kernel/smp.c +++ b/arch/sh/kernel/smp.c @@ -22,6 +22,7 @@ #include <linux/interrupt.h> #include <linux/sched.h> #include <linux/atomic.h> +#include <linux/smpboot.h> #include <asm/processor.h> #include <asm/mmu_context.h> #include <asm/smp.h> @@ -34,9 +35,6 @@ int __cpu_logical_map[NR_CPUS]; /* Map logical to physical */ struct plat_smp_ops *mp_ops = NULL; -/* State of each CPU */ -DEFINE_PER_CPU(int, cpu_state) = { 0 }; - void __cpuinit register_smp_ops(struct plat_smp_ops *ops) { if (mp_ops) diff --git a/arch/tile/kernel/smpboot.c b/arch/tile/kernel/smpboot.c index e686c5a..24a9c06 100644 --- a/arch/tile/kernel/smpboot.c +++ b/arch/tile/kernel/smpboot.c @@ -25,13 +25,11 @@ #include <linux/delay.h> #include <linux/err.h> #include <linux/irq.h> +#include <linux/smpboot.h> #include <asm/mmu_context.h> #include <asm/tlbflush.h> #include <asm/sections.h> -/* State of each CPU. */ -static DEFINE_PER_CPU(int, cpu_state) = { 0 }; - /* The messaging code jumps to this pointer during boot-up */ unsigned long start_cpu_function_addr; diff --git a/arch/x86/include/asm/cpu.h b/arch/x86/include/asm/cpu.h index 4564c8e..2d0b239 100644 --- a/arch/x86/include/asm/cpu.h +++ b/arch/x86/include/asm/cpu.h @@ -30,8 +30,6 @@ extern int arch_register_cpu(int num); extern void arch_unregister_cpu(int); #endif -DECLARE_PER_CPU(int, cpu_state); - int mwait_usable(const struct cpuinfo_x86 *); #endif /* _ASM_X86_CPU_H */ diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index bfbe30e..269bc1f 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c @@ -51,6 +51,7 @@ #include <linux/stackprotector.h> #include <linux/gfp.h> #include <linux/cpuidle.h> +#include <linux/smpboot.h> #include <asm/acpi.h> #include <asm/desc.h> @@ -73,9 +74,6 @@ #include <asm/smpboot_hooks.h> #include <asm/i8259.h> -/* State of each CPU */ -DEFINE_PER_CPU(int, cpu_state) = { 0 }; - #ifdef CONFIG_HOTPLUG_CPU /* * We need this for trampoline_base protection from concurrent accesses when diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c index 2ef5948..09a7199 100644 --- a/arch/x86/xen/smp.c +++ b/arch/x86/xen/smp.c @@ -16,6 +16,7 @@ #include <linux/err.h> #include <linux/slab.h> #include <linux/smp.h> +#include <linux/smpboot.h> #include <asm/paravirt.h> #include <asm/desc.h> diff --git a/include/linux/smpboot.h b/include/linux/smpboot.h index 63bbedd..834d90c 100644 --- a/include/linux/smpboot.h +++ b/include/linux/smpboot.h @@ -5,6 +5,7 @@ #ifndef SMPBOOT_H #define SMPBOOT_H +DECLARE_PER_CPU(int, cpu_state); extern void smpboot_start_secondary(void *arg); #endif diff --git a/kernel/smpboot.c b/kernel/smpboot.c index 5ae1805..0df43b0 100644 --- a/kernel/smpboot.c +++ b/kernel/smpboot.c @@ -67,6 +67,8 @@ void __init idle_threads_init(void) } #endif +/* State of each CPU during bringup/teardown */ +DEFINE_PER_CPU(int, cpu_state) = { 0 }; /* Implement the following functions in your architecture, as appropriate. */ @@ -141,6 +143,8 @@ void __cpuinit smpboot_start_secondary(void *arg) set_cpu_online(cpu, true); arch_vector_unlock(); + per_cpu(cpu_state, cpu) = CPU_ONLINE; + __cpu_post_online(arg); /* Enable local interrupts now */ ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 03/27] smpboot: Define and use cpu_state per-cpu variable in generic code 2012-06-01 9:10 ` [PATCH 03/27] smpboot: Define and use cpu_state per-cpu variable in generic code Srivatsa S. Bhat @ 2012-06-01 9:10 ` Srivatsa S. Bhat 2012-06-01 16:59 ` David Daney 1 sibling, 0 replies; 8+ messages in thread From: Srivatsa S. Bhat @ 2012-06-01 9:10 UTC (permalink / raw) To: tglx, peterz, paulmck Cc: rusty, mingo, yong.zhang0, akpm, vatsa, rjw, linux-arch, linux-kernel, srivatsa.bhat, nikunj, Tony Luck, Fenghua Yu, Ralf Baechle, Benjamin Herrenschmidt, Paul Mundt, Chris Metcalf, Ingo Molnar, H. Peter Anvin, x86, Konrad Rzeszutek Wilk, Jeremy Fitzhardinge, Peter Zijlstra The per-cpu variable cpu_state is used in x86 and also used in other architectures, to track the state of the cpu during bringup and hotplug. Pull it out into generic code. Cc: Tony Luck <tony.luck@intel.com> Cc: Fenghua Yu <fenghua.yu@intel.com> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mundt <lethal@linux-sh.org> Cc: Chris Metcalf <cmetcalf@tilera.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@redhat.com> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: x86@kernel.org Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Cc: Jeremy Fitzhardinge <jeremy@goop.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Mike Frysinger <vapier@gentoo.org> Cc: Yong Zhang <yong.zhang0@gmail.com> Cc: Venkatesh Pallipadi <venki@google.com> Cc: Suresh Siddha <suresh.b.siddha@intel.com> Cc: linux-ia64@vger.kernel.org Cc: linux-mips@linux-mips.org Cc: linuxppc-dev@lists.ozlabs.org Cc: linux-sh@vger.kernel.org Cc: xen-devel@lists.xensource.com Cc: virtualization@lists.linux-foundation.org Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com> --- arch/ia64/include/asm/cpu.h | 2 -- arch/ia64/kernel/process.c | 1 + arch/ia64/kernel/smpboot.c | 6 +----- arch/mips/cavium-octeon/smp.c | 4 +--- arch/powerpc/kernel/smp.c | 6 +----- arch/sh/include/asm/smp.h | 2 -- arch/sh/kernel/smp.c | 4 +--- arch/tile/kernel/smpboot.c | 4 +--- arch/x86/include/asm/cpu.h | 2 -- arch/x86/kernel/smpboot.c | 4 +--- arch/x86/xen/smp.c | 1 + include/linux/smpboot.h | 1 + kernel/smpboot.c | 4 ++++ 13 files changed, 13 insertions(+), 28 deletions(-) diff --git a/arch/ia64/include/asm/cpu.h b/arch/ia64/include/asm/cpu.h index fcca30b..1c3acac 100644 --- a/arch/ia64/include/asm/cpu.h +++ b/arch/ia64/include/asm/cpu.h @@ -12,8 +12,6 @@ struct ia64_cpu { DECLARE_PER_CPU(struct ia64_cpu, cpu_devices); -DECLARE_PER_CPU(int, cpu_state); - #ifdef CONFIG_HOTPLUG_CPU extern int arch_register_cpu(int num); extern void arch_unregister_cpu(int); diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c index 5e0e86d..32566c7 100644 --- a/arch/ia64/kernel/process.c +++ b/arch/ia64/kernel/process.c @@ -29,6 +29,7 @@ #include <linux/kdebug.h> #include <linux/utsname.h> #include <linux/tracehook.h> +#include <linux/smpboot.h> #include <asm/cpu.h> #include <asm/delay.h> diff --git a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c index 963d2db..df00a3c 100644 --- a/arch/ia64/kernel/smpboot.c +++ b/arch/ia64/kernel/smpboot.c @@ -39,6 +39,7 @@ #include <linux/efi.h> #include <linux/percpu.h> #include <linux/bitops.h> +#include <linux/smpboot.h> #include <linux/atomic.h> #include <asm/cache.h> @@ -111,11 +112,6 @@ extern unsigned long ia64_iobase; struct task_struct *task_for_booting_cpu; -/* - * State for each CPU - */ -DEFINE_PER_CPU(int, cpu_state); - cpumask_t cpu_core_map[NR_CPUS] __cacheline_aligned; EXPORT_SYMBOL(cpu_core_map); DEFINE_PER_CPU_SHARED_ALIGNED(cpumask_t, cpu_sibling_map); diff --git a/arch/mips/cavium-octeon/smp.c b/arch/mips/cavium-octeon/smp.c index 97e7ce9..93cd4b0 100644 --- a/arch/mips/cavium-octeon/smp.c +++ b/arch/mips/cavium-octeon/smp.c @@ -13,6 +13,7 @@ #include <linux/kernel_stat.h> #include <linux/sched.h> #include <linux/module.h> +#include <linux/smpboot.h> #include <asm/mmu_context.h> #include <asm/time.h> @@ -252,9 +253,6 @@ static void octeon_cpus_done(void) #ifdef CONFIG_HOTPLUG_CPU -/* State of each CPU. */ -DEFINE_PER_CPU(int, cpu_state); - extern void fixup_irqs(void); static DEFINE_SPINLOCK(smp_reserve_lock); diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index e1417c4..1928058a 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c @@ -31,6 +31,7 @@ #include <linux/cpu.h> #include <linux/notifier.h> #include <linux/topology.h> +#include <linux/smpboot.h> #include <asm/ptrace.h> #include <linux/atomic.h> @@ -57,11 +58,6 @@ #define DBG(fmt...) #endif -#ifdef CONFIG_HOTPLUG_CPU -/* State of each CPU during hotplug phases */ -static DEFINE_PER_CPU(int, cpu_state) = { 0 }; -#endif - struct thread_info *secondary_ti; DEFINE_PER_CPU(cpumask_var_t, cpu_sibling_map); diff --git a/arch/sh/include/asm/smp.h b/arch/sh/include/asm/smp.h index 78b0d0f4..bda041e 100644 --- a/arch/sh/include/asm/smp.h +++ b/arch/sh/include/asm/smp.h @@ -31,8 +31,6 @@ enum { SMP_MSG_NR, /* must be last */ }; -DECLARE_PER_CPU(int, cpu_state); - void smp_message_recv(unsigned int msg); void smp_timer_broadcast(const struct cpumask *mask); diff --git a/arch/sh/kernel/smp.c b/arch/sh/kernel/smp.c index b86e9ca..8e0fde0 100644 --- a/arch/sh/kernel/smp.c +++ b/arch/sh/kernel/smp.c @@ -22,6 +22,7 @@ #include <linux/interrupt.h> #include <linux/sched.h> #include <linux/atomic.h> +#include <linux/smpboot.h> #include <asm/processor.h> #include <asm/mmu_context.h> #include <asm/smp.h> @@ -34,9 +35,6 @@ int __cpu_logical_map[NR_CPUS]; /* Map logical to physical */ struct plat_smp_ops *mp_ops = NULL; -/* State of each CPU */ -DEFINE_PER_CPU(int, cpu_state) = { 0 }; - void __cpuinit register_smp_ops(struct plat_smp_ops *ops) { if (mp_ops) diff --git a/arch/tile/kernel/smpboot.c b/arch/tile/kernel/smpboot.c index e686c5a..24a9c06 100644 --- a/arch/tile/kernel/smpboot.c +++ b/arch/tile/kernel/smpboot.c @@ -25,13 +25,11 @@ #include <linux/delay.h> #include <linux/err.h> #include <linux/irq.h> +#include <linux/smpboot.h> #include <asm/mmu_context.h> #include <asm/tlbflush.h> #include <asm/sections.h> -/* State of each CPU. */ -static DEFINE_PER_CPU(int, cpu_state) = { 0 }; - /* The messaging code jumps to this pointer during boot-up */ unsigned long start_cpu_function_addr; diff --git a/arch/x86/include/asm/cpu.h b/arch/x86/include/asm/cpu.h index 4564c8e..2d0b239 100644 --- a/arch/x86/include/asm/cpu.h +++ b/arch/x86/include/asm/cpu.h @@ -30,8 +30,6 @@ extern int arch_register_cpu(int num); extern void arch_unregister_cpu(int); #endif -DECLARE_PER_CPU(int, cpu_state); - int mwait_usable(const struct cpuinfo_x86 *); #endif /* _ASM_X86_CPU_H */ diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index bfbe30e..269bc1f 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c @@ -51,6 +51,7 @@ #include <linux/stackprotector.h> #include <linux/gfp.h> #include <linux/cpuidle.h> +#include <linux/smpboot.h> #include <asm/acpi.h> #include <asm/desc.h> @@ -73,9 +74,6 @@ #include <asm/smpboot_hooks.h> #include <asm/i8259.h> -/* State of each CPU */ -DEFINE_PER_CPU(int, cpu_state) = { 0 }; - #ifdef CONFIG_HOTPLUG_CPU /* * We need this for trampoline_base protection from concurrent accesses when diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c index 2ef5948..09a7199 100644 --- a/arch/x86/xen/smp.c +++ b/arch/x86/xen/smp.c @@ -16,6 +16,7 @@ #include <linux/err.h> #include <linux/slab.h> #include <linux/smp.h> +#include <linux/smpboot.h> #include <asm/paravirt.h> #include <asm/desc.h> diff --git a/include/linux/smpboot.h b/include/linux/smpboot.h index 63bbedd..834d90c 100644 --- a/include/linux/smpboot.h +++ b/include/linux/smpboot.h @@ -5,6 +5,7 @@ #ifndef SMPBOOT_H #define SMPBOOT_H +DECLARE_PER_CPU(int, cpu_state); extern void smpboot_start_secondary(void *arg); #endif diff --git a/kernel/smpboot.c b/kernel/smpboot.c index 5ae1805..0df43b0 100644 --- a/kernel/smpboot.c +++ b/kernel/smpboot.c @@ -67,6 +67,8 @@ void __init idle_threads_init(void) } #endif +/* State of each CPU during bringup/teardown */ +DEFINE_PER_CPU(int, cpu_state) = { 0 }; /* Implement the following functions in your architecture, as appropriate. */ @@ -141,6 +143,8 @@ void __cpuinit smpboot_start_secondary(void *arg) set_cpu_online(cpu, true); arch_vector_unlock(); + per_cpu(cpu_state, cpu) = CPU_ONLINE; + __cpu_post_online(arg); /* Enable local interrupts now */ ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 03/27] smpboot: Define and use cpu_state per-cpu variable in generic code 2012-06-01 9:10 ` [PATCH 03/27] smpboot: Define and use cpu_state per-cpu variable in generic code Srivatsa S. Bhat 2012-06-01 9:10 ` Srivatsa S. Bhat @ 2012-06-01 16:59 ` David Daney 1 sibling, 0 replies; 8+ messages in thread From: David Daney @ 2012-06-01 16:59 UTC (permalink / raw) To: Srivatsa S. Bhat Cc: tglx, peterz, paulmck, rusty, mingo, yong.zhang0, akpm, vatsa, rjw, linux-arch, linux-kernel, nikunj, Tony Luck, Fenghua Yu, Ralf Baechle, Benjamin Herrenschmidt, Paul Mundt, Chris Metcalf, Ingo Molnar, H. Peter Anvin, x86, Konrad Rzeszutek Wilk, Jeremy Fitzhardinge, Peter Zijlstra, Mike Frysinger, Venkatesh Pallipadi, Suresh Siddha, linux-ia64, linux-mips, linuxppc-dev, linux-sh, xen-devel, virtualization On 06/01/2012 02:10 AM, Srivatsa S. Bhat wrote: > The per-cpu variable cpu_state is used in x86 and also used in other > architectures, to track the state of the cpu during bringup and hotplug. > Pull it out into generic code. > > Cc: Tony Luck<tony.luck@intel.com> > Cc: Fenghua Yu<fenghua.yu@intel.com> > Cc: Ralf Baechle<ralf@linux-mips.org> > Cc: Benjamin Herrenschmidt<benh@kernel.crashing.org> > Cc: Paul Mundt<lethal@linux-sh.org> > Cc: Chris Metcalf<cmetcalf@tilera.com> > Cc: Thomas Gleixner<tglx@linutronix.de> > Cc: Ingo Molnar<mingo@redhat.com> > Cc: "H. Peter Anvin"<hpa@zytor.com> > Cc: x86@kernel.org > Cc: Konrad Rzeszutek Wilk<konrad.wilk@oracle.com> > Cc: Jeremy Fitzhardinge<jeremy@goop.org> > Cc: Peter Zijlstra<a.p.zijlstra@chello.nl> > Cc: Andrew Morton<akpm@linux-foundation.org> > Cc: Mike Frysinger<vapier@gentoo.org> > Cc: Yong Zhang<yong.zhang0@gmail.com> > Cc: Venkatesh Pallipadi<venki@google.com> > Cc: Suresh Siddha<suresh.b.siddha@intel.com> > Cc: linux-ia64@vger.kernel.org > Cc: linux-mips@linux-mips.org > Cc: linuxppc-dev@lists.ozlabs.org > Cc: linux-sh@vger.kernel.org > Cc: xen-devel@lists.xensource.com > Cc: virtualization@lists.linux-foundation.org > Signed-off-by: Srivatsa S. Bhat<srivatsa.bhat@linux.vnet.ibm.com> > --- > > arch/ia64/include/asm/cpu.h | 2 -- > arch/ia64/kernel/process.c | 1 + > arch/ia64/kernel/smpboot.c | 6 +----- > arch/mips/cavium-octeon/smp.c | 4 +--- > arch/powerpc/kernel/smp.c | 6 +----- > arch/sh/include/asm/smp.h | 2 -- > arch/sh/kernel/smp.c | 4 +--- > arch/tile/kernel/smpboot.c | 4 +--- > arch/x86/include/asm/cpu.h | 2 -- > arch/x86/kernel/smpboot.c | 4 +--- > arch/x86/xen/smp.c | 1 + > include/linux/smpboot.h | 1 + > kernel/smpboot.c | 4 ++++ > 13 files changed, 13 insertions(+), 28 deletions(-) > [...] > diff --git a/arch/mips/cavium-octeon/smp.c b/arch/mips/cavium-octeon/smp.c > index 97e7ce9..93cd4b0 100644 > --- a/arch/mips/cavium-octeon/smp.c > +++ b/arch/mips/cavium-octeon/smp.c > @@ -13,6 +13,7 @@ > #include<linux/kernel_stat.h> > #include<linux/sched.h> > #include<linux/module.h> > +#include<linux/smpboot.h> > > #include<asm/mmu_context.h> > #include<asm/time.h> > @@ -252,9 +253,6 @@ static void octeon_cpus_done(void) > > #ifdef CONFIG_HOTPLUG_CPU > > -/* State of each CPU. */ > -DEFINE_PER_CPU(int, cpu_state); > - > extern void fixup_irqs(void); > > static DEFINE_SPINLOCK(smp_reserve_lock); The Octeon bit: Acked-by: David Daney <david.daney@cavium.com> FWIW, the rest looks good too. ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 10/27] mips, smpboot: Use generic SMP booting infrastructure [not found] <20120601090952.31979.24799.stgit@srivatsabhat.in.ibm.com> 2012-06-01 9:10 ` [PATCH 03/27] smpboot: Define and use cpu_state per-cpu variable in generic code Srivatsa S. Bhat @ 2012-06-01 9:12 ` Srivatsa S. Bhat 2012-06-01 9:12 ` Srivatsa S. Bhat 2012-06-03 8:25 ` Yong Zhang 1 sibling, 2 replies; 8+ messages in thread From: Srivatsa S. Bhat @ 2012-06-01 9:12 UTC (permalink / raw) To: tglx, peterz, paulmck Cc: rusty, mingo, yong.zhang0, akpm, vatsa, rjw, linux-arch, linux-kernel, srivatsa.bhat, nikunj, Ralf Baechle, Andrew Morton, Eric Dumazet, Mike Frysinger, David Howells, Arun Sharma, Thomas Gleixner, Rusty Russell, linux-mips 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 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 10/27] mips, smpboot: Use generic SMP booting infrastructure 2012-06-01 9:12 ` [PATCH 10/27] mips, smpboot: Use generic SMP booting infrastructure Srivatsa S. Bhat @ 2012-06-01 9:12 ` Srivatsa S. Bhat 2012-06-03 8:25 ` Yong Zhang 1 sibling, 0 replies; 8+ messages in thread From: Srivatsa S. Bhat @ 2012-06-01 9:12 UTC (permalink / raw) To: tglx, peterz, paulmck Cc: rusty, mingo, yong.zhang0, akpm, vatsa, rjw, linux-arch, linux-kernel, srivatsa.bhat, nikunj, Ralf Baechle 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 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 10/27] mips, smpboot: Use generic SMP booting infrastructure 2012-06-01 9:12 ` [PATCH 10/27] mips, smpboot: Use generic SMP booting infrastructure Srivatsa S. Bhat 2012-06-01 9:12 ` Srivatsa S. Bhat @ 2012-06-03 8:25 ` Yong Zhang 2012-06-03 11:48 ` Srivatsa S. Bhat 1 sibling, 1 reply; 8+ messages in thread From: Yong Zhang @ 2012-06-03 8:25 UTC (permalink / raw) To: Srivatsa S. Bhat Cc: tglx, peterz, paulmck, rusty, mingo, akpm, vatsa, rjw, linux-arch, linux-kernel, nikunj, Ralf Baechle, Eric Dumazet, Mike Frysinger, David Howells, Arun Sharma, linux-mips On Fri, Jun 01, 2012 at 02:42:32PM +0530, Srivatsa S. Bhat wrote: > 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. We don't need to wait for both cpu_callin_map (The code above yours) any more. > > 3. Don't enable interrupts in cmp_smp_finish() and vsmp_smp_finish(). > Do it much later, in generic code. Hmmm... the bad thing is that some board enable irq more early than ->smp_finish(), I have sent patches for that (by moving irq enable to smp_finish() and delaying smp_finish()). Please check patch#0001~patch#0004 in http://marc.info/?l=linux-mips&m=133758022710973&w=2 > > 4. In synchronise_count_slave(), use local_save_flags() instead of > local_irq_save() because irqs are still disabled. We can just remove local_irq_save()/local_irq_restore() like: http://marc.info/?l=linux-mips&m=133758046211043&w=2 Thanks, Yong > > 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 ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 10/27] mips, smpboot: Use generic SMP booting infrastructure 2012-06-03 8:25 ` Yong Zhang @ 2012-06-03 11:48 ` Srivatsa S. Bhat 2012-06-04 2:17 ` Yong Zhang 0 siblings, 1 reply; 8+ messages in thread From: Srivatsa S. Bhat @ 2012-06-03 11:48 UTC (permalink / raw) To: Yong Zhang Cc: tglx, peterz, paulmck, rusty, mingo, akpm, vatsa, rjw, linux-arch, linux-kernel, nikunj, Ralf Baechle, Eric Dumazet, Mike Frysinger, David Howells, Arun Sharma, linux-mips On 06/03/2012 01:55 PM, Yong Zhang wrote: > On Fri, Jun 01, 2012 at 02:42:32PM +0530, Srivatsa S. Bhat wrote: >> 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. > > We don't need to wait for both cpu_callin_map (The code above yours) > any more. Yes, I noticed that while writing the patch. But then, I thought of cleaning up the hundreds of callin/callout/commenced maps in various architectures and bringing them out into core code in a later series, and clean this up at that time.. I didn't want to do too many invasive changes all at one-shot. But I guess for this particular case of mips, I can get rid of the wait for cpu_callin_map in this patchset itself. I'll update this patch with that change. Thanks! > >> >> 3. Don't enable interrupts in cmp_smp_finish() and vsmp_smp_finish(). >> Do it much later, in generic code. > > Hmmm... the bad thing is that some board enable irq more early than > ->smp_finish(), I have sent patches for that (by moving irq enable > to smp_finish() and delaying smp_finish()). > Please check patch#0001~patch#0004 in > http://marc.info/?l=linux-mips&m=133758022710973&w=2 > >> >> 4. In synchronise_count_slave(), use local_save_flags() instead of >> local_irq_save() because irqs are still disabled. > > We can just remove local_irq_save()/local_irq_restore() like: > http://marc.info/?l=linux-mips&m=133758046211043&w=2 > So what is the status of those patches? Has anyone picked them up? I could rebase this patch on top of yours, or better yet, if your patches haven't been picked up yet, I could include them in this patchset itself to avoid too many dependencies on external patches. What do you say? Regards, Srivatsa S. Bhat ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 10/27] mips, smpboot: Use generic SMP booting infrastructure 2012-06-03 11:48 ` Srivatsa S. Bhat @ 2012-06-04 2:17 ` Yong Zhang 0 siblings, 0 replies; 8+ messages in thread From: Yong Zhang @ 2012-06-04 2:17 UTC (permalink / raw) To: Srivatsa S. Bhat Cc: tglx, peterz, paulmck, rusty, mingo, akpm, vatsa, rjw, linux-arch, linux-kernel, nikunj, Ralf Baechle, Eric Dumazet, Mike Frysinger, David Howells, Arun Sharma, linux-mips On Sun, Jun 03, 2012 at 05:18:16PM +0530, Srivatsa S. Bhat wrote: > Yes, I noticed that while writing the patch. But then, I thought of cleaning > up the hundreds of callin/callout/commenced maps in various architectures and > bringing them out into core code in a later series, and clean this up at that time.. > I didn't want to do too many invasive changes all at one-shot. OK. > But I guess for this particular case of mips, I can get rid of the wait for > cpu_callin_map in this patchset itself. I'll update this patch with that change. :-) > So what is the status of those patches? Has anyone picked them up? > > I could rebase this patch on top of yours, or better yet, if your > patches haven't been picked up yet, I could include them in this > patchset itself to avoid too many dependencies on external patches. > > What do you say? Ralf has pushed it to http://git.linux-mips.org/?p=ralf/linux.git;a=summary I guess you can see it soon. Thanks, Yong ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2012-06-04 2:17 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20120601090952.31979.24799.stgit@srivatsabhat.in.ibm.com>
2012-06-01 9:10 ` [PATCH 03/27] smpboot: Define and use cpu_state per-cpu variable in generic code Srivatsa S. Bhat
2012-06-01 9:10 ` Srivatsa S. Bhat
2012-06-01 16:59 ` David Daney
2012-06-01 9:12 ` [PATCH 10/27] mips, smpboot: Use generic SMP booting infrastructure Srivatsa S. Bhat
2012-06-01 9:12 ` Srivatsa S. Bhat
2012-06-03 8:25 ` Yong Zhang
2012-06-03 11:48 ` Srivatsa S. Bhat
2012-06-04 2:17 ` Yong Zhang
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox